1local arch = ({
2 aarch64='arm64',
3 x86_64='x86',
4 riscv64='riscv',
5})[config.target.platform:match('[^-]*')]
6sub('tools.ninja', function()
7 toolchain(config.host)
8 exe('unifdef', {'scripts/unifdef.c'})
9end)
10
11rule('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')
12rule('wrapper', [[printf '#include <asm-generic/%s>\n' $file >$out]])
13
14local 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
22end
23
24local 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
59local basefiles = load('base.lua')
60local archfiles = load(arch..'.lua')
61
62build('awk', '$outdir/include/linux/version.h', {'$srcdir/Makefile', '|', '$dir/version.awk'}, {
63 expr='-f $dir/version.awk',
64})
65
66pkg.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
73for _, file in ipairs(archfiles) do
74 archfiles[file] = true
75end
76
77local function wrap(file)
78 local out = '$outdir/include/asm/'..file
79 build('wrapper', out, nil, {file=file})
80 table.insert(pkg.hdrs, out)
81end
82for _, file in ipairs(mandatory) do
83 if not archfiles['asm/'..file] then
84 wrap(file)
85 end
86end
87for _, file in ipairs(archfiles.generic) do
88 wrap(file)
89end
90
91for _, 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)
102end
103
104fetch 'local'