mlibc/meson.build
2018-11-07 19:57:45 +01:00

415 lines
16 KiB
Meson

project('mlibc', 'c', 'cpp')
protoc = find_program('protoc')
cpp_compiler = meson.get_compiler('cpp')
cxxshim_dep = subproject('cxxshim').get_variable('cxxshim_dep')
frigg_dep = subproject('frigg').get_variable('frigg_dep')
#rtdl_dep = cpp_compiler.find_library(':ld-init.so')
managarm_incl = include_directories('subprojects/managarm/frigg/include',
'subprojects/managarm/hel/include')
drm_incl = include_directories('../ports/libdrm/include')
internal_incl = include_directories('options/internal/include')
internal_sources = [
'options/internal/generic/allocator.cpp',
'options/internal/generic/debug.cpp',
'options/internal/gcc/guard-abi.cpp',
'options/internal/gcc/initfini.cpp',
'options/internal/gcc-extra/mlibc_crtbegin.S',
'options/internal/gcc-extra/mlibc_crtend.S',
'options/internal/x86_64/setjmp.S',
]
rtdl_sources = [
'options/internal/gcc/guard-abi.cpp',
'options/internal/generic/allocator.cpp',
'options/internal/generic/debug.cpp',
'options/rtdl/generic/main.cpp',
'options/rtdl/generic/linker.cpp',
'options/rtdl/x86_64/runtime.S',
'sysdeps/managarm/generic/ensure.cpp',
'sysdeps/managarm/generic/memory.cpp',
'sysdeps/managarm/rtdl-generic/support.cpp',
]
if get_option('ansi_option').enabled()
ansi_incl = include_directories('options/ansi/include')
ansi_sources = [
'options/ansi/generic/stdlib-stubs.cpp',
'options/ansi/generic/assert-stubs.cpp',
'options/ansi/generic/ctype-stubs.cpp',
'options/ansi/generic/errno-stubs.cpp',
'options/ansi/generic/fenv-stubs.cpp',
'options/ansi/generic/file-io.cpp',
'options/ansi/generic/inttypes-stubs.cpp',
'options/ansi/generic/locale-stubs.cpp',
'options/ansi/generic/signal-stubs.cpp',
'options/ansi/generic/stdio-stubs.cpp',
'options/ansi/generic/stdlib-stubs.cpp',
'options/ansi/generic/string-stubs.cpp',
'options/ansi/generic/time-stubs.cpp',
'options/ansi/generic/wchar-stubs.cpp',
'options/ansi/generic/wctype.cpp',
'options/ansi/musl-generic-math/acos.c',
'options/ansi/musl-generic-math/acosf.c',
'options/ansi/musl-generic-math/acosh.c',
'options/ansi/musl-generic-math/acoshf.c',
'options/ansi/musl-generic-math/acoshl.c',
'options/ansi/musl-generic-math/acosl.c',
'options/ansi/musl-generic-math/asin.c',
'options/ansi/musl-generic-math/asinf.c',
'options/ansi/musl-generic-math/asinh.c',
'options/ansi/musl-generic-math/asinhf.c',
'options/ansi/musl-generic-math/asinhl.c',
'options/ansi/musl-generic-math/asinl.c',
'options/ansi/musl-generic-math/atan2.c',
'options/ansi/musl-generic-math/atan2f.c',
'options/ansi/musl-generic-math/atan2l.c',
'options/ansi/musl-generic-math/atan.c',
'options/ansi/musl-generic-math/atanf.c',
'options/ansi/musl-generic-math/atanh.c',
'options/ansi/musl-generic-math/atanhf.c',
'options/ansi/musl-generic-math/atanhl.c',
'options/ansi/musl-generic-math/atanl.c',
'options/ansi/musl-generic-math/cbrt.c',
'options/ansi/musl-generic-math/cbrtf.c',
'options/ansi/musl-generic-math/cbrtl.c',
'options/ansi/musl-generic-math/ceil.c',
'options/ansi/musl-generic-math/ceilf.c',
'options/ansi/musl-generic-math/ceill.c',
'options/ansi/musl-generic-math/copysign.c',
'options/ansi/musl-generic-math/copysignf.c',
'options/ansi/musl-generic-math/copysignl.c',
'options/ansi/musl-generic-math/__cos.c',
'options/ansi/musl-generic-math/cos.c',
'options/ansi/musl-generic-math/__cosdf.c',
'options/ansi/musl-generic-math/cosf.c',
'options/ansi/musl-generic-math/cosh.c',
'options/ansi/musl-generic-math/coshf.c',
'options/ansi/musl-generic-math/coshl.c',
'options/ansi/musl-generic-math/__cosl.c',
'options/ansi/musl-generic-math/cosl.c',
'options/ansi/musl-generic-math/erf.c',
'options/ansi/musl-generic-math/erff.c',
'options/ansi/musl-generic-math/erfl.c',
'options/ansi/musl-generic-math/exp10.c',
'options/ansi/musl-generic-math/exp10f.c',
'options/ansi/musl-generic-math/exp10l.c',
'options/ansi/musl-generic-math/exp2.c',
'options/ansi/musl-generic-math/exp2f.c',
'options/ansi/musl-generic-math/exp2l.c',
'options/ansi/musl-generic-math/exp.c',
'options/ansi/musl-generic-math/expf.c',
'options/ansi/musl-generic-math/expl.c',
'options/ansi/musl-generic-math/expm1.c',
'options/ansi/musl-generic-math/expm1f.c',
'options/ansi/musl-generic-math/expm1l.c',
'options/ansi/musl-generic-math/__expo2.c',
'options/ansi/musl-generic-math/__expo2f.c',
'options/ansi/musl-generic-math/fabs.c',
'options/ansi/musl-generic-math/fabsf.c',
'options/ansi/musl-generic-math/fabsl.c',
'options/ansi/musl-generic-math/fdim.c',
'options/ansi/musl-generic-math/fdimf.c',
'options/ansi/musl-generic-math/fdiml.c',
'options/ansi/musl-generic-math/finite.c',
'options/ansi/musl-generic-math/finitef.c',
'options/ansi/musl-generic-math/floor.c',
'options/ansi/musl-generic-math/floorf.c',
'options/ansi/musl-generic-math/floorl.c',
'options/ansi/musl-generic-math/fma.c',
'options/ansi/musl-generic-math/fmax.c',
'options/ansi/musl-generic-math/fmaxf.c',
'options/ansi/musl-generic-math/fmaxl.c',
'options/ansi/musl-generic-math/fmin.c',
'options/ansi/musl-generic-math/fminf.c',
'options/ansi/musl-generic-math/fminl.c',
'options/ansi/musl-generic-math/fmod.c',
'options/ansi/musl-generic-math/fmodf.c',
'options/ansi/musl-generic-math/fmodl.c',
'options/ansi/musl-generic-math/__fpclassify.c',
'options/ansi/musl-generic-math/__fpclassifyf.c',
'options/ansi/musl-generic-math/__fpclassifyl.c',
'options/ansi/musl-generic-math/frexp.c',
'options/ansi/musl-generic-math/frexpf.c',
'options/ansi/musl-generic-math/frexpl.c',
'options/ansi/musl-generic-math/hypot.c',
'options/ansi/musl-generic-math/hypotf.c',
'options/ansi/musl-generic-math/hypotl.c',
'options/ansi/musl-generic-math/ilogb.c',
'options/ansi/musl-generic-math/ilogbf.c',
'options/ansi/musl-generic-math/ilogbl.c',
'options/ansi/musl-generic-math/__invtrigl.c',
'options/ansi/musl-generic-math/j0.c',
'options/ansi/musl-generic-math/j0f.c',
'options/ansi/musl-generic-math/j1.c',
'options/ansi/musl-generic-math/j1f.c',
'options/ansi/musl-generic-math/jn.c',
'options/ansi/musl-generic-math/jnf.c',
'options/ansi/musl-generic-math/ldexp.c',
'options/ansi/musl-generic-math/ldexpf.c',
'options/ansi/musl-generic-math/ldexpl.c',
'options/ansi/musl-generic-math/lgamma.c',
'options/ansi/musl-generic-math/lgammaf.c',
'options/ansi/musl-generic-math/lgammaf_r.c',
'options/ansi/musl-generic-math/lgammal.c',
'options/ansi/musl-generic-math/lgamma_r.c',
'options/ansi/musl-generic-math/llrint.c',
'options/ansi/musl-generic-math/llrintf.c',
'options/ansi/musl-generic-math/llround.c',
'options/ansi/musl-generic-math/llroundf.c',
'options/ansi/musl-generic-math/llroundl.c',
'options/ansi/musl-generic-math/log10.c',
'options/ansi/musl-generic-math/log10f.c',
'options/ansi/musl-generic-math/log10l.c',
'options/ansi/musl-generic-math/log1p.c',
'options/ansi/musl-generic-math/log1pf.c',
'options/ansi/musl-generic-math/log1pl.c',
'options/ansi/musl-generic-math/log2.c',
'options/ansi/musl-generic-math/log2f.c',
'options/ansi/musl-generic-math/log2l.c',
'options/ansi/musl-generic-math/logb.c',
'options/ansi/musl-generic-math/logbf.c',
'options/ansi/musl-generic-math/logbl.c',
'options/ansi/musl-generic-math/log.c',
'options/ansi/musl-generic-math/logf.c',
'options/ansi/musl-generic-math/logl.c',
'options/ansi/musl-generic-math/lrintf.c',
'options/ansi/musl-generic-math/lround.c',
'options/ansi/musl-generic-math/lroundf.c',
'options/ansi/musl-generic-math/lroundl.c',
'options/ansi/musl-generic-math/modf.c',
'options/ansi/musl-generic-math/modff.c',
'options/ansi/musl-generic-math/modfl.c',
'options/ansi/musl-generic-math/nan.c',
'options/ansi/musl-generic-math/nanf.c',
'options/ansi/musl-generic-math/nanl.c',
'options/ansi/musl-generic-math/nextafter.c',
'options/ansi/musl-generic-math/nextafterf.c',
'options/ansi/musl-generic-math/nextafterl.c',
'options/ansi/musl-generic-math/nexttoward.c',
'options/ansi/musl-generic-math/nexttowardf.c',
'options/ansi/musl-generic-math/nexttowardl.c',
'options/ansi/musl-generic-math/__polevll.c',
'options/ansi/musl-generic-math/pow.c',
'options/ansi/musl-generic-math/powf.c',
'options/ansi/musl-generic-math/powl.c',
'options/ansi/musl-generic-math/remainder.c',
'options/ansi/musl-generic-math/remainderf.c',
'options/ansi/musl-generic-math/remainderl.c',
'options/ansi/musl-generic-math/__rem_pio2.c',
'options/ansi/musl-generic-math/__rem_pio2f.c',
'options/ansi/musl-generic-math/__rem_pio2_large.c',
'options/ansi/musl-generic-math/__rem_pio2l.c',
'options/ansi/musl-generic-math/remquo.c',
'options/ansi/musl-generic-math/remquof.c',
'options/ansi/musl-generic-math/remquol.c',
'options/ansi/musl-generic-math/rint.c',
'options/ansi/musl-generic-math/rintf.c',
'options/ansi/musl-generic-math/rintl.c',
'options/ansi/musl-generic-math/round.c',
'options/ansi/musl-generic-math/roundf.c',
'options/ansi/musl-generic-math/roundl.c',
'options/ansi/musl-generic-math/scalb.c',
'options/ansi/musl-generic-math/scalbf.c',
'options/ansi/musl-generic-math/scalbln.c',
'options/ansi/musl-generic-math/scalblnf.c',
'options/ansi/musl-generic-math/scalblnl.c',
'options/ansi/musl-generic-math/scalbn.c',
'options/ansi/musl-generic-math/scalbnf.c',
'options/ansi/musl-generic-math/scalbnl.c',
'options/ansi/musl-generic-math/__signbit.c',
'options/ansi/musl-generic-math/__signbitf.c',
'options/ansi/musl-generic-math/__signbitl.c',
'options/ansi/musl-generic-math/signgam.c',
'options/ansi/musl-generic-math/significand.c',
'options/ansi/musl-generic-math/significandf.c',
'options/ansi/musl-generic-math/__sin.c',
'options/ansi/musl-generic-math/sin.c',
'options/ansi/musl-generic-math/sincos.c',
'options/ansi/musl-generic-math/sincosf.c',
'options/ansi/musl-generic-math/sincosl.c',
'options/ansi/musl-generic-math/__sindf.c',
'options/ansi/musl-generic-math/sinf.c',
'options/ansi/musl-generic-math/sinh.c',
'options/ansi/musl-generic-math/sinhf.c',
'options/ansi/musl-generic-math/sinhl.c',
'options/ansi/musl-generic-math/__sinl.c',
'options/ansi/musl-generic-math/sinl.c',
'options/ansi/musl-generic-math/sqrt.c',
'options/ansi/musl-generic-math/sqrtf.c',
'options/ansi/musl-generic-math/sqrtl.c',
'options/ansi/musl-generic-math/__tan.c',
'options/ansi/musl-generic-math/tan.c',
'options/ansi/musl-generic-math/__tandf.c',
'options/ansi/musl-generic-math/tanf.c',
'options/ansi/musl-generic-math/tanh.c',
'options/ansi/musl-generic-math/tanhf.c',
'options/ansi/musl-generic-math/tanhl.c',
'options/ansi/musl-generic-math/__tanl.c',
'options/ansi/musl-generic-math/tanl.c',
'options/ansi/musl-generic-math/tgamma.c',
'options/ansi/musl-generic-math/tgammaf.c',
'options/ansi/musl-generic-math/tgammal.c',
'options/ansi/musl-generic-math/trunc.c',
'options/ansi/musl-generic-math/truncf.c',
'options/ansi/musl-generic-math/truncl.c',
]
else
ansi_incl = include_directories()
ansi_sources = [ ]
endif
posix_incl = include_directories('options/posix/include')
posix_sources = [
'options/posix/generic/arpa-inet-stubs.cpp',
'options/posix/generic/dirent-stubs.cpp',
'options/posix/generic/dlfcn-stubs.cpp',
'options/posix/generic/environment.cpp',
'options/posix/generic/fcntl-stubs.cpp',
'options/posix/generic/ftw-stubs.cpp',
'options/posix/generic/glob-stubs.cpp',
'options/posix/generic/grp-stubs.cpp',
'options/posix/generic/langinfo-stubs.cpp',
'options/posix/generic/libgen-stubs.cpp',
'options/posix/generic/netdb-stubs.cpp',
'options/posix/generic/net-if-stubs.cpp',
'options/posix/generic/posix_signal.cpp',
'options/posix/generic/posix_stdio.cpp',
'options/posix/generic/posix_stdlib.cpp',
'options/posix/generic/posix_string.cpp',
'options/posix/generic/pthread-stubs.cpp',
'options/posix/generic/pwd-stubs.cpp',
'options/posix/generic/sched-stubs.cpp',
'options/posix/generic/spawn-stubs.cpp',
'options/posix/generic/strings-stubs.cpp',
'options/posix/generic/sys-file-stubs.cpp',
'options/posix/generic/syslog-stubs.cpp',
'options/posix/generic/sys-mman-stubs.cpp',
'options/posix/generic/sys-resource-stubs.cpp',
'options/posix/generic/sys-select-stubs.cpp',
'options/posix/generic/sys-socket-stubs.cpp',
'options/posix/generic/sys-statfs-stubs.cpp',
'options/posix/generic/sys-stat-stubs.cpp',
'options/posix/generic/sys-statvfs-stubs.cpp',
'options/posix/generic/sys-time-stubs.cpp',
'options/posix/generic/sys-uio.cpp',
'options/posix/generic/sys-utsname-stubs.cpp',
'options/posix/generic/sys-wait-stubs.cpp',
'options/posix/generic/termios-stubs.cpp',
'options/posix/generic/unistd-stubs.cpp',
'options/posix/musl-generic/fnmatch.cpp',
]
lsb_incl = include_directories('options/lsb/include')
lsb_sources= [
'options/lsb/generic/auxv.cpp',
'options/lsb/generic/dso_exit.cpp',
'options/lsb/generic/tls.cpp',
]
linux_incl = include_directories('options/linux/include')
linux_sources= [
'options/linux/generic/getopt-stubs.cpp',
'options/linux/generic/mntent-stubs.cpp',
'options/linux/generic/poll-stubs.cpp',
'options/linux/generic/pty-stubs.cpp',
'options/linux/generic/stdio_ext-stubs.cpp',
'options/linux/generic/sys-epoll.cpp',
'options/linux/generic/sys-inotify-stubs.cpp',
'options/linux/generic/sys-ioctl.cpp',
'options/linux/generic/sys-mount.cpp',
'options/linux/generic/sys-prctl-stubs.cpp',
'options/linux/generic/sys-ptrace-stubs.cpp',
'options/linux/generic/sys-random-stubs.cpp',
'options/linux/generic/sys-sendfile-stubs.cpp',
'options/linux/generic/sys-signalfd.cpp',
'options/linux/generic/sys-timerfd.cpp',
]
frigg_pb = find_program('frigg_pb')
posix_gen = generator(protoc, arguments: [
'--plugin=protoc-gen-frigg=' + frigg_pb.path(),
'--frigg_out=@BUILD_DIR@',
'--proto_path=@SOURCE_DIR@/subprojects/managarm/bragi/proto',
'@INPUT@'
],
output: '@BASENAME@.frigg_pb.hpp')
fs_pb = posix_gen.process('subprojects/managarm/bragi/proto/fs.proto')
posix_pb = posix_gen.process('subprojects/managarm/bragi/proto/posix.proto')
sysdeps_incl = include_directories('sysdeps/managarm/include')
sysdeps_sources = [
'sysdeps/managarm/generic/ensure.cpp',
'sysdeps/managarm/generic/entry.cpp',
'sysdeps/managarm/generic/file.cpp',
'sysdeps/managarm/generic/fork-exec.cpp',
'sysdeps/managarm/generic/frigg-support.cpp',
'sysdeps/managarm/generic/memory.cpp',
'sysdeps/managarm/generic/mount.cpp',
'sysdeps/managarm/generic/signals.cpp',
'sysdeps/managarm/generic/socket.cpp',
'sysdeps/managarm/generic/time.cpp',
'sysdeps/managarm/x86_64/signals.S',
fs_pb,
posix_pb,
]
gccdir = run_command('/bin/sh', '-c',
'x86_64-managarm-gcc -print-search-dirs | sed -n -e "s/install: \(.*\)/\\1/p"',
check: true).stdout().strip()
add_project_arguments('-nostdinc', '-fno-builtin', language: ['c', 'cpp'])
add_project_arguments('-std=c++17', language: 'cpp')
add_project_arguments('-fno-rtti', '-fno-exceptions', language: 'cpp')
add_project_link_arguments('-nostdlib', language: ['c', 'cpp'])
ldso_lib = shared_library('ld',
[
rtdl_sources,
fs_pb,
posix_pb,
],
name_prefix: '',
cpp_args: ['-fvisibility=hidden', '-DMLIBC_BUILDING_RTDL', '-DFRIGG_HAVE_LIBC'],
include_directories: [
managarm_incl,
internal_incl,
ansi_incl,
posix_incl,
linux_incl,
include_directories(gccdir + '/include'),
],
dependencies: [cxxshim_dep, frigg_dep],
install: true)
shared_library('c',
[
internal_sources,
ansi_sources,
posix_sources,
lsb_sources,
linux_sources,
sysdeps_sources,
],
cpp_args: ['-DFRIGG_HAVE_LIBC'],
include_directories: [
managarm_incl,
internal_incl,
ansi_incl,
posix_incl,
lsb_incl,
linux_incl,
sysdeps_incl,
drm_incl,
include_directories(gccdir + '/include'),
],
dependencies: [cxxshim_dep, frigg_dep],
link_with: [ldso_lib],
install: true)