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 (2366B)


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