master hovercats/oakiss / pkg / linux-headers / gen.lua
  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'