2019-01-06 13:11:12 +01:00
|
|
|
project('mlibc')
|
2018-12-28 00:42:15 +01:00
|
|
|
|
2018-12-28 00:25:24 +01:00
|
|
|
rtdl_include_dirs = [
|
|
|
|
include_directories('options/internal/include'),
|
|
|
|
]
|
|
|
|
libc_include_dirs = [
|
|
|
|
include_directories('options/internal/include'),
|
2019-01-07 17:29:28 +01:00
|
|
|
include_directories('options/internal/x86_64-include'),
|
2018-12-28 00:25:24 +01:00
|
|
|
include_directories('options/elf/include'),
|
|
|
|
include_directories('options/lsb/include'),
|
|
|
|
include_directories('options/glibc/include'),
|
|
|
|
|
|
|
|
]
|
2018-11-10 09:41:08 +01:00
|
|
|
rtdl_sources = [ ]
|
|
|
|
libc_sources = [ ]
|
2018-12-28 00:42:15 +01:00
|
|
|
libc_sublibs = [ ]
|
2018-11-10 09:41:08 +01:00
|
|
|
|
2019-01-06 13:11:12 +01:00
|
|
|
headers_only = get_option('headers_only')
|
2018-12-16 18:04:58 +01:00
|
|
|
disable_ansi_option = false
|
2018-11-11 13:46:39 +01:00
|
|
|
disable_posix_option = false
|
|
|
|
disable_linux_option = false
|
2018-12-21 18:00:27 +01:00
|
|
|
internal_conf = configuration_data()
|
|
|
|
|
2019-01-06 13:11:12 +01:00
|
|
|
if not headers_only
|
|
|
|
cxxshim_dep = subproject('cxxshim').get_variable('cxxshim_dep')
|
|
|
|
frigg_dep = subproject('frigg').get_variable('frigg_dep')
|
|
|
|
|
|
|
|
add_languages('c', 'cpp')
|
|
|
|
c_compiler = meson.get_compiler('c')
|
|
|
|
|
|
|
|
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'])
|
|
|
|
|
|
|
|
gccdir = run_command('/bin/sh', '-c',
|
|
|
|
''.join(c_compiler.cmd_array())
|
|
|
|
+ ' -print-search-dirs | sed -n -e "s/install: \(.*\)/\\1/p"',
|
|
|
|
check: true).stdout().strip()
|
|
|
|
|
|
|
|
rtdl_include_dirs += include_directories(gccdir + '/include')
|
2019-01-11 21:55:37 +01:00
|
|
|
rtdl_include_dirs += include_directories(gccdir + '/include-fixed')
|
2019-01-06 13:11:12 +01:00
|
|
|
libc_include_dirs += include_directories(gccdir + '/include')
|
2019-01-11 21:55:37 +01:00
|
|
|
libc_include_dirs += include_directories(gccdir + '/include-fixed')
|
2019-01-06 13:11:12 +01:00
|
|
|
endif
|
|
|
|
|
2019-01-09 20:06:52 +01:00
|
|
|
internal_conf.set_quoted('MLIBC_SYSTEM_NAME', host_machine.system())
|
2018-12-21 18:00:27 +01:00
|
|
|
internal_conf.set('MLIBC_MAP_DSO_SEGMENTS', true)
|
2018-11-11 13:46:39 +01:00
|
|
|
|
2018-12-28 00:25:24 +01:00
|
|
|
#----------------------------------------------------------------------------------------
|
|
|
|
# Configuration based on sysdeps.
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
|
|
|
2018-11-17 16:05:57 +01:00
|
|
|
# Process sysdeps first, as sysdeps might want to disable unsupported options.
|
|
|
|
if host_machine.system() == 'managarm'
|
2018-12-28 00:25:24 +01:00
|
|
|
# TODO: Adopt the include_directories() commands from the managarm meson.build.
|
|
|
|
rtdl_include_dirs += include_directories('sysdeps/managarm/include')
|
|
|
|
libc_include_dirs += include_directories('sysdeps/managarm/include')
|
2018-11-17 16:05:57 +01:00
|
|
|
subdir('sysdeps/managarm')
|
|
|
|
elif host_machine.system() == 'qword'
|
2018-12-28 00:25:24 +01:00
|
|
|
disable_linux_option = true
|
|
|
|
internal_conf.set('MLIBC_MAP_DSO_SEGMENTS', false)
|
|
|
|
rtdl_include_dirs += include_directories('sysdeps/qword/include')
|
|
|
|
libc_include_dirs += include_directories('sysdeps/qword/include')
|
2018-11-17 16:05:57 +01:00
|
|
|
subdir('sysdeps/qword')
|
|
|
|
else
|
|
|
|
error('No sysdeps defined for OS: ' + host_machine.system())
|
|
|
|
endif
|
2018-10-14 16:45:07 +02:00
|
|
|
|
2018-12-28 00:25:24 +01:00
|
|
|
#----------------------------------------------------------------------------------------
|
|
|
|
# Configuration based on enabled options.
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
if not disable_ansi_option
|
|
|
|
rtdl_include_dirs += include_directories('options/ansi/include')
|
|
|
|
libc_include_dirs += include_directories('options/ansi/include')
|
|
|
|
endif
|
|
|
|
|
|
|
|
if not disable_posix_option
|
|
|
|
rtdl_include_dirs += include_directories('options/posix/include')
|
|
|
|
libc_include_dirs += include_directories('options/posix/include')
|
|
|
|
endif
|
|
|
|
|
|
|
|
rtdl_include_dirs += include_directories('options/linux/include')
|
|
|
|
libc_include_dirs += include_directories('options/linux/include')
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------------------------
|
|
|
|
|
2018-12-21 18:00:27 +01:00
|
|
|
configure_file(input: 'internal-config.h.in',
|
|
|
|
output: 'internal-config.h',
|
|
|
|
configuration: internal_conf)
|
|
|
|
|
2018-10-14 16:45:07 +02:00
|
|
|
internal_sources = [
|
|
|
|
'options/internal/generic/allocator.cpp',
|
2018-12-18 18:31:32 +01:00
|
|
|
'options/internal/generic/charcode.cpp',
|
2018-12-25 14:52:19 +01:00
|
|
|
'options/internal/generic/charset.cpp',
|
2018-10-14 16:45:07 +02:00
|
|
|
'options/internal/generic/debug.cpp',
|
2018-11-10 10:11:56 +01:00
|
|
|
'options/internal/generic/ensure.cpp',
|
|
|
|
'options/internal/generic/essential.cpp',
|
|
|
|
'options/internal/generic/frigg.cpp',
|
2018-11-05 20:15:53 +01:00
|
|
|
'options/internal/gcc/guard-abi.cpp',
|
2018-10-14 16:45:07 +02:00
|
|
|
'options/internal/gcc/initfini.cpp',
|
2018-12-29 13:21:37 +01:00
|
|
|
'options/internal/gcc-extra/cxxabi.cpp',
|
2018-10-14 16:45:07 +02:00
|
|
|
'options/internal/gcc-extra/mlibc_crtbegin.S',
|
|
|
|
'options/internal/gcc-extra/mlibc_crtend.S',
|
|
|
|
'options/internal/x86_64/setjmp.S',
|
|
|
|
]
|
2018-11-21 06:34:45 +01:00
|
|
|
install_headers(
|
|
|
|
'options/internal/include/stdint.h'
|
|
|
|
)
|
|
|
|
install_headers(
|
|
|
|
'options/internal/include/bits/wchar_t.h',
|
2018-12-15 11:05:31 +01:00
|
|
|
'options/internal/include/bits/wint_t.h',
|
2018-11-21 06:34:45 +01:00
|
|
|
'options/internal/include/bits/feature.h',
|
|
|
|
'options/internal/include/bits/size_t.h',
|
|
|
|
'options/internal/include/bits/types.h',
|
|
|
|
'options/internal/include/bits/ensure.h',
|
|
|
|
'options/internal/include/bits/machine.h',
|
2018-12-20 12:06:55 +01:00
|
|
|
'options/internal/include/bits/mbstate.h',
|
2018-11-21 06:34:45 +01:00
|
|
|
'options/internal/include/bits/null.h',
|
|
|
|
subdir: 'bits'
|
|
|
|
)
|
2018-10-14 16:45:07 +02:00
|
|
|
|
2018-11-10 09:41:08 +01:00
|
|
|
rtdl_sources += [
|
2018-11-05 20:15:53 +01:00
|
|
|
'options/internal/gcc/guard-abi.cpp',
|
|
|
|
'options/internal/generic/allocator.cpp',
|
2018-10-30 19:50:50 +01:00
|
|
|
'options/internal/generic/debug.cpp',
|
2018-11-10 10:11:56 +01:00
|
|
|
'options/internal/generic/ensure.cpp',
|
|
|
|
'options/internal/generic/essential.cpp',
|
|
|
|
'options/internal/generic/frigg.cpp',
|
2018-10-28 14:43:01 +01:00
|
|
|
'options/rtdl/generic/main.cpp',
|
|
|
|
'options/rtdl/generic/linker.cpp',
|
2018-11-10 09:41:08 +01:00
|
|
|
'options/rtdl/x86_64/runtime.S'
|
2018-10-28 14:43:01 +01:00
|
|
|
]
|
|
|
|
|
2018-12-15 21:47:52 +01:00
|
|
|
subdir('options/elf')
|
2018-11-10 09:41:08 +01:00
|
|
|
subdir('options/ansi')
|
|
|
|
subdir('options/posix')
|
|
|
|
subdir('options/lsb')
|
2018-12-08 11:09:22 +01:00
|
|
|
subdir('options/glibc')
|
2018-11-10 09:41:08 +01:00
|
|
|
subdir('options/linux')
|
2018-10-14 16:45:07 +02:00
|
|
|
|
2019-01-06 13:11:12 +01:00
|
|
|
if not headers_only
|
|
|
|
ldso_lib = shared_library('ld', rtdl_sources,
|
|
|
|
name_prefix: '',
|
|
|
|
cpp_args: ['-fvisibility=hidden', '-DMLIBC_BUILDING_RTDL', '-DFRIGG_HAVE_LIBC'],
|
|
|
|
include_directories: rtdl_include_dirs,
|
|
|
|
dependencies: [cxxshim_dep, frigg_dep],
|
|
|
|
install: true)
|
|
|
|
|
|
|
|
shared_library('c',
|
|
|
|
[
|
|
|
|
libc_sources,
|
|
|
|
internal_sources,
|
|
|
|
ansi_sources,
|
|
|
|
lsb_sources,
|
|
|
|
],
|
|
|
|
cpp_args: ['-DFRIGG_HAVE_LIBC'],
|
|
|
|
include_directories: libc_include_dirs,
|
|
|
|
dependencies: [cxxshim_dep, frigg_dep],
|
|
|
|
link_with: [ldso_lib],
|
|
|
|
link_whole: libc_sublibs,
|
|
|
|
install: true)
|
|
|
|
|
|
|
|
shared_library('dl', 'libdl/src/dummy.cpp', install: true)
|
|
|
|
shared_library('m', 'libm/src/dummy.cpp', install: true)
|
|
|
|
shared_library('pthread', 'libpthread/src/dummy.cpp', install: true)
|
|
|
|
shared_library('rt', 'librt/src/dummy.cpp', install: true)
|
|
|
|
shared_library('util', 'libutil/src/dummy.cpp', install: true)
|
|
|
|
endif
|