From 42b3c58afc0a27ce25a45b102c2964cb32270e05 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Fri, 16 Feb 2024 23:48:38 +0100 Subject: [PATCH] misc: Depend on 'cshim', if available, instead of host freestanding hdrs --- meson.build | 56 ++++++++++++++++++++--------------- options/ansi/include/limits.h | 47 +++++++++++++++++++++++++++++ options/ansi/meson.build | 1 + options/posix/meson.build | 1 + subprojects/cshim.wrap | 4 +++ tests/meson.build | 2 +- tests/rtdl/meson.build | 2 +- 7 files changed, 87 insertions(+), 26 deletions(-) create mode 100644 subprojects/cshim.wrap diff --git a/meson.build b/meson.build index 21af1e473c..045a9e1272 100644 --- a/meson.build +++ b/meson.build @@ -43,6 +43,12 @@ internal_conf = configuration_data() mlibc_conf = configuration_data() if not headers_only + cshim_dep = dependency('cshim', + required: false, + fallback: ['cshim', 'cshim_dep']) + libc_deps += cshim_dep + rtdl_deps += cshim_dep + cxxshim_dep = dependency('cxxshim', required: false, fallback: ['cxxshim', 'cxxshim_dep']) @@ -62,40 +68,42 @@ if not headers_only cpp_compiler = meson.get_compiler('cpp') add_project_arguments('-Wno-unused-function', '-D__MLIBC_BUILDING_MLIBC', language: ['c', 'cpp']) - add_project_arguments('-nostdinc', '-fno-builtin', language: ['c', 'cpp']) + add_project_arguments('-nostdinc', '-fno-builtin', '-ffreestanding', language: ['c', 'cpp']) add_project_arguments('-Werror=misleading-indentation', language: ['c', 'cpp']) add_project_arguments('-fno-rtti', '-fno-exceptions', language: 'cpp') add_project_link_arguments('-nostdlib', language: ['c', 'cpp']) - searchdirs = run_command(c_compiler.cmd_array(), '-print-search-dirs', - check: true).stdout() - searchdirs_arr = searchdirs.split('\n') - searchline = 'install: ' - ccdir = '' - if c_compiler.get_id() == 'clang' - searchline = 'libraries: =' - endif + if not cshim_dep.found() + searchdirs = run_command(c_compiler.cmd_array(), '-print-search-dirs', + check: true).stdout() + searchdirs_arr = searchdirs.split('\n') + searchline = 'install: ' + ccdir = '' + if c_compiler.get_id() == 'clang' + searchline = 'libraries: =' + endif - foreach line : searchdirs_arr - if line.startswith(searchline) - ccdir = line.strip(searchline) - ccdir = ccdir.split(':')[0] - break + foreach line : searchdirs_arr + if line.startswith(searchline) + ccdir = line.strip(searchline) + ccdir = ccdir.split(':')[0] + break + endif + endforeach + + if ccdir == '' + error('could not find compiler-specific header directory') endif - endforeach - if ccdir == '' - error('could not find compiler-specific header directory') - endif + if c_compiler.get_id() == 'gcc' and fs.exists(ccdir / 'include-fixed') + rtdl_include_dirs += include_directories(ccdir / 'include-fixed') + libc_include_dirs += include_directories(ccdir / 'include-fixed') + endif - if c_compiler.get_id() == 'gcc' and fs.exists(ccdir / 'include-fixed') - rtdl_include_dirs += include_directories(ccdir / 'include-fixed') - libc_include_dirs += include_directories(ccdir / 'include-fixed') + rtdl_include_dirs += include_directories(ccdir / 'include') + libc_include_dirs += include_directories(ccdir / 'include') endif - rtdl_include_dirs += include_directories(ccdir / 'include') - libc_include_dirs += include_directories(ccdir / 'include') - if not cxxshim_dep.found() cplusplus_include_path = [] diff --git a/options/ansi/include/limits.h b/options/ansi/include/limits.h index 9f4ad8cfca..86b786efd1 100644 --- a/options/ansi/include/limits.h +++ b/options/ansi/include/limits.h @@ -3,6 +3,10 @@ #define CHAR_BIT 8 +#ifndef MB_LEN_MAX +# define MB_LEN_MAX 4 +#endif + #ifdef LONG_MAX # ifdef LONG_MAX == INT32_MAX # define LONG_BIT 32 @@ -21,17 +25,60 @@ # error "Unsupported configuration, please define either LONG_MAX or __LONG_MAX__" #endif +#undef SCHAR_MIN +#undef SCHAR_MAX +#undef CHAR_MIN +#undef CHAR_MAX +#undef UCHAR_MAX +#undef SHRT_MIN +#undef SHRT_MAX +#undef USHRT_MAX #undef INT_MIN #undef INT_MAX #undef UINT_MAX +#undef LONG_MIN +#undef LONG_MAX +#undef ULONG_MAX #undef LLONG_MIN #undef LLONG_MAX #undef ULLONG_MAX +#define SCHAR_MIN (-__SCHAR_MAX__ - 1) +#define SCHAR_MAX __SCHAR_MAX__ +#if __SCHAR_MAX__ == __INT_MAX__ +# define UCHAR_MAX (__SCHAR_MAX__ * 2U + 1U) +#else +# define UCHAR_MAX (__SCHAR_MAX__ * 2 + 1) +#endif + +#ifdef __CHAR_UNSIGNED__ +# define CHAR_MAX UCHAR_MAX +# if __SCHAR_MAX__ == __INT_MAX__ +# define CHAR_MIN 0U +# else +# define CHAR_MIN 0 +# endif +#else +# define CHAR_MAX SCHAR_MAX +# define CHAR_MIN SCHAR_MIN +#endif + +#define SHRT_MIN (-__SHRT_MAX__ - 1) +#define SHRT_MAX __SHRT_MAX__ +#if __SHRT_MAX_ == __INT_MAX__ +# define USHRT_MAX (__SHRT_MAX__ * 2U + 1U) +#else +# define USHRT_MAX (__SHRT_MAX__ * 2 + 1) +#endif + #define INT_MIN (-__INT_MAX__ - 1) #define INT_MAX __INT_MAX__ #define UINT_MAX (__INT_MAX__ * 2 + 1) +#define LONG_MIN (-__LONG_MAX__ - 1L) +#define LONG_MAX __LONG_MAX__ +#define ULONG_MAX (__LONG_MAX__ * 2UL + 1UL) + #define LLONG_MIN (-__LONG_LONG_MAX__ - 1LL) #define LLONG_MAX __LONG_LONG_MAX__ #define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) diff --git a/options/ansi/meson.build b/options/ansi/meson.build index 04e88f4d0e..ae1d3ad540 100644 --- a/options/ansi/meson.build +++ b/options/ansi/meson.build @@ -321,5 +321,6 @@ if not headers_only 'musl-generic-math/truncl.c', pic: true, include_directories: libc_include_dirs, + dependencies: libc_deps, c_args: ['-Wno-unused', '-Wno-implicit', '-Wno-parentheses', '-Wno-sign-compare', '-Wno-attributes', '-Wno-unknown-pragmas', '-Wno-maybe-uninitialized']) endif diff --git a/options/posix/meson.build b/options/posix/meson.build index 28c561ec26..ad68600117 100644 --- a/options/posix/meson.build +++ b/options/posix/meson.build @@ -68,6 +68,7 @@ if not headers_only 'musl-generic-regex/tre-mem.c', pic: true, include_directories: libc_include_dirs, + dependencies: libc_deps, c_args: ['-Wno-unused', '-Wno-implicit', '-Wno-parentheses', '-Wno-sign-compare', '-Wno-attributes', '-Wno-unknown-pragmas', '-Wno-implicit-fallthrough'] ) endif diff --git a/subprojects/cshim.wrap b/subprojects/cshim.wrap new file mode 100644 index 0000000000..fca9a2a645 --- /dev/null +++ b/subprojects/cshim.wrap @@ -0,0 +1,4 @@ +[wrap-git] +directory = cshim +url = https://github.com/managarm/cshim.git +revision = trunk diff --git a/tests/meson.build b/tests/meson.build index daa11c8467..8841847801 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -202,7 +202,7 @@ foreach test_name : all_test_cases should_fail = fail_test_cases.contains(test_name) exec = executable(test_exec_name, [test_name + '.c', test_sources], link_with: libc, include_directories: libc_include_dirs, - dependencies: rtlib_deps, + dependencies: rtdl_deps + rtlib_deps, build_rpath: meson.build_root(), override_options: test_override_options, c_args: test_c_args, diff --git a/tests/rtdl/meson.build b/tests/rtdl/meson.build index 53cddb74e0..1a075bef03 100644 --- a/tests/rtdl/meson.build +++ b/tests/rtdl/meson.build @@ -31,7 +31,7 @@ foreach test_name : rtdl_test_cases exec = executable('rtdl-' + test_name, [test_name / 'test.c', test_sources], link_with: test_link_with + libc, include_directories: libc_include_dirs, - dependencies: rtlib_deps, + dependencies: rtdl_deps + rtlib_deps, build_rpath: test_rpath, override_options: test_override_options, c_args: test_c_args,