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


  1. local arch = config.target.platform:match('[^-]*')
  2. set('cflags_auto', {
  3. '-fomit-frame-pointer',
  4. '-fno-unwind-tables',
  5. '-fno-asynchronous-unwind-tables',
  6. '-ffunction-sections',
  7. '-fdata-sections',
  8. })
  9. set('cflags_c99fse', {
  10. '-std=c99',
  11. '-nostdinc',
  12. '-ffreestanding',
  13. '-fexcess-precision=standard',
  14. '-frounding-math',
  15. '-Wa,--noexecstack',
  16. })
  17. set('cflags_nossp', '-fno-stack-protector')
  18. set('cflags_memops', '-fno-tree-loop-distribute-patterns')
  19. cflags{
  20. '$cflags_auto',
  21. '$cflags_c99fse',
  22. '-Wno-return-local-addr',
  23. '-fPIC',
  24. '-D _XOPEN_SOURCE=700',
  25. '-I $srcdir/arch/'..arch,
  26. '-I $srcdir/arch/generic',
  27. '-I $outdir',
  28. '-I $srcdir/src/include',
  29. '-I $srcdir/src/internal',
  30. '-I $outdir/include',
  31. }
  32. set('ldflags', {
  33. '$ldflags',
  34. '-Wl,--sort-section,alignment',
  35. '-Wl,--sort-common',
  36. '-Wl,--gc-sections',
  37. '-Wl,--hash-style=both',
  38. '-Wl,--no-undefined',
  39. '-Wl,--exclude-libs=ALL',
  40. '-Wl,--dynamic-list=$srcdir/dynamic.list',
  41. })
  42. local basefiles = load('base.lua')
  43. local archfiles = load(arch..'.lua')
  44. local bits = {}
  45. for _, hdr in ipairs(archfiles.bits) do
  46. archfiles.bits[hdr] = true
  47. end
  48. for _, hdr in ipairs(basefiles.bits) do
  49. if not archfiles.bits[hdr] then
  50. table.insert(bits, hdr)
  51. end
  52. end
  53. pkg.hdrs = {
  54. copy('$outdir/include', '$srcdir/include', basefiles.hdrs),
  55. copy('$outdir/include/bits', '$srcdir/arch/'..arch..'/bits', archfiles.bits),
  56. copy('$outdir/include/bits', '$srcdir/arch/generic/bits', bits),
  57. '$outdir/include/bits/alltypes.h',
  58. '$outdir/include/bits/syscall.h',
  59. install=true,
  60. }
  61. pkg.deps = {
  62. '$gendir/headers',
  63. '$outdir/version.h',
  64. }
  65. build('sed', '$outdir/include/bits/alltypes.h', {
  66. '$srcdir/arch/'..arch..'/bits/alltypes.h.in',
  67. '$srcdir/include/alltypes.h.in',
  68. '|', '$srcdir/tools/mkalltypes.sed',
  69. }, {expr='-f $srcdir/tools/mkalltypes.sed'})
  70. build('sed', '$outdir/include/bits/syscall.h', {'$srcdir/arch/'..arch..'/bits/syscall.h.in'}, {
  71. expr=[[-n -e 'p;s,__NR_,SYS_,p']],
  72. })
  73. build('awk', '$outdir/version.h', '$dir/ver', {expr=[['{printf "#define VERSION \"%s\"\n", $$1}']]})
  74. local srcs, objs = {}, {}
  75. for src in iterstrings{basefiles.srcs, archfiles.srcs} do
  76. srcs[src:match('(.*)%.'):gsub('/'..arch..'/', '/', 1)] = src
  77. end
  78. local specialcflags = {
  79. -- src/Makefile:/^MEMOPS_OBJS
  80. -- src/Makefile:/^NOSSP_OBJS
  81. __init_tls='$cflags $cflags_nossp',
  82. __libc_start_main='$cflags $cflags_nossp',
  83. __set_thread_area='$cflags $cflags_nossp',
  84. __stack_chk_fail='$cflags $cflags_nossp',
  85. memcpy='$cflags $cflags_memops $cflags_nossp',
  86. memmove='$cflags $cflags_memops',
  87. memset='$cflags $cflags_memops $cflags_nossp',
  88. memcmp='$cflags $cflags_memops',
  89. }
  90. for _, src in pairs(srcs) do
  91. table.insert(objs, cc(src, nil, {cflags=specialcflags[src:match('([^/]*)%.[^/.]*$')]}))
  92. end
  93. table.sort(objs)
  94. ar('libc.a', objs)
  95. file('lib/libc.a', '644', '$outdir/libc.a')
  96. exe('libc.so', {'ldso/dlstart.c', 'ldso/dynlink.c', objs}, nil, {
  97. cflags='$cflags $cflags_nossp',
  98. ldflags='$ldflags -nostdlib -shared -Wl,-e,_dlstart',
  99. ldlibs='-lgcc',
  100. })
  101. file('lib/libc.so', '755', '$outdir/libc.so')
  102. sym('lib/ld-musl-'..arch..'.so.1', 'libc.so')
  103. sym('bin/ldd', '../lib/libc.so')
  104. for _, lib in ipairs{'libm.a', 'librt.a', 'libpthread.a', 'libcrypt.a', 'libutil.a', 'libxnet.a', 'libresolv.a', 'libdl.a'} do
  105. ar(lib, {})
  106. file('lib/'..lib, '644', '$outdir/'..lib)
  107. end
  108. local startfiles = {'$outdir/libc.a'}
  109. for _, src in ipairs{'crt1.c', 'rcrt1.c', 'Scrt1.c', arch..'/crti.s', arch..'/crtn.s'} do
  110. local obj = src:gsub('.-(%w*)%.[cs]$', '%1.o')
  111. local out = '$outdir/'..obj
  112. build('cc', out, {'$srcdir/crt/'..src, '|', '$gendir/deps'}, {cflags='$cflags $cflags_nossp'})
  113. file('lib/'..obj, '644', out)
  114. table.insert(startfiles, out)
  115. end
  116. phony('startfiles', startfiles)
  117. fetch 'git'