gen.lua (2367B)
1 local arch = ({ 2 aarch64='arm64', 3 x86_64='x86', 4 riscv64='riscv', 5 })[config.target.platform:match('[^-]*')] 6 sub('tools.ninja', function() 7 toolchain(config.host) 8 exe('unifdef', {'scripts/unifdef.c'}) 9 end) 10 11 rule('header', 'sed -E -f $dir/header.sed $in >$out.tmp && { $outdir/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ $out.tmp >$out; [ $$? -le 1 ]; } && rm $out.tmp') 12 rule('wrapper', [[printf '#include <asm-generic/%s>\n' $file >$out]]) 13 14 local function process(outdir, srcdir, files) 15 local outs = {} 16 for i, file in ipairs(files) do 17 local out = outdir..'/'..file 18 outs[i] = out 19 build('header', out, {srcdir..'/'..file, '|', '$dir/header.sed', '$outdir/unifdef'}) 20 end 21 return outs 22 end 23 24 local mandatory = { 25 -- <awk '$1 == "mandatory-y" {printf "\\t'\'%s\'',\\n", $3}' src/include/uapi/asm-generic/Kbuild 26 'auxvec.h', 27 'bitsperlong.h', 28 'bpf_perf_event.h', 29 'byteorder.h', 30 'errno.h', 31 'fcntl.h', 32 'ioctl.h', 33 'ioctls.h', 34 'ipcbuf.h', 35 'mman.h', 36 'msgbuf.h', 37 'param.h', 38 'poll.h', 39 'posix_types.h', 40 'ptrace.h', 41 'resource.h', 42 'sembuf.h', 43 'setup.h', 44 'shmbuf.h', 45 'sigcontext.h', 46 'siginfo.h', 47 'signal.h', 48 'socket.h', 49 'sockios.h', 50 'stat.h', 51 'statfs.h', 52 'swab.h', 53 'termbits.h', 54 'termios.h', 55 'types.h', 56 'unistd.h', 57 } 58 59 local basefiles = load('base.lua') 60 local archfiles = load(arch..'.lua') 61 62 build('awk', '$outdir/include/linux/version.h', {'$srcdir/Makefile', '|', '$dir/version.awk'}, { 63 expr='-f $dir/version.awk', 64 }) 65 66 pkg.hdrs = { 67 '$outdir/include/linux/version.h', 68 process('$outdir/include', '$srcdir/include/uapi', basefiles), 69 process('$outdir/include', '$srcdir/arch/'..arch..'/include/uapi', archfiles), 70 install=true, 71 } 72 73 for _, file in ipairs(archfiles) do 74 archfiles[file] = true 75 end 76 77 local function wrap(file) 78 local out = '$outdir/include/asm/'..file 79 build('wrapper', out, nil, {file=file}) 80 table.insert(pkg.hdrs, out) 81 end 82 for _, file in ipairs(mandatory) do 83 if not archfiles['asm/'..file] then 84 wrap(file) 85 end 86 end 87 for _, file in ipairs(archfiles.generic) do 88 wrap(file) 89 end 90 91 for _, spec in ipairs(archfiles.unistd) do 92 local out = '$outdir/include/asm/'..spec.dst 93 build('awk', out, {'$srcdir/'..spec.src, '|', '$dir/unistd.awk'}, { 94 expr={ 95 '-v file='..spec.dst, 96 string.format([[-v abi='%s']], spec.abi), 97 '-v off='..(spec.off or ''), 98 '-f $dir/unistd.awk', 99 }, 100 }) 101 table.insert(pkg.hdrs, out) 102 end 103 104 fetch('local')