logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git

gen.lua (2268B)


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