diff options
Diffstat (limited to 'lib/mlibc/tests/meson.build')
-rw-r--r-- | lib/mlibc/tests/meson.build | 261 |
1 files changed, 261 insertions, 0 deletions
diff --git a/lib/mlibc/tests/meson.build b/lib/mlibc/tests/meson.build new file mode 100644 index 0000000..b7d65ca --- /dev/null +++ b/lib/mlibc/tests/meson.build @@ -0,0 +1,261 @@ +timeout_sec = 10 + +all_test_cases = [ + 'ansi/alloc', + 'ansi/sscanf', + 'ansi/sprintf', + 'ansi/snprintf', + 'ansi/utf8', + 'ansi/strtol', + 'ansi/strtof', + 'ansi/abs', + 'ansi/longjmp', + 'ansi/mbrtoc32', + 'ansi/strverscmp', + 'ansi/strftime', + 'ansi/strchr', + 'ansi/strrchr', + 'ansi/wcsrtombs', + 'ansi/wmemcmp', + 'ansi/timegm', + 'ansi/ungetc', + 'ansi/wcsdup', + 'ansi/wcsncasecmp', + 'ansi/fopen', + 'ansi/memmem', + 'ansi/creal-cimag', + 'ansi/fenv', + 'ansi/qsort', + 'ansi/freopen', + 'ansi/strxfrm', + 'ansi/calloc', + 'bsd/ns_get_put', + 'bsd/reallocarray', + 'bsd/strl', + 'bsd/sbrk', + 'posix/inet_ntop', + 'posix/inet_pton', + 'posix/access', + 'posix/pthread_barrier', + 'posix/pthread_rwlock', + 'posix/pthread_cond', + 'posix/pthread_create', + 'posix/pthread_cancel', + 'posix/pthread_atfork', + 'posix/pthread_cleanup', + 'posix/pthread_kill', + 'posix/pthread_mutex', + 'posix/pthread_key', + 'posix/pthread_thread_local', + 'posix/pthread_attr', + 'posix/pthread_schedparam', + 'posix/pwd', + 'posix/fdopen', + 'posix/fopencookie', + 'posix/fmemopen', + 'posix/getaddrinfo', + 'posix/getdelim', + 'posix/getnameinfo', + 'posix/getservbyname', + 'posix/getservbyport', + 'posix/grp', + 'posix/dprintf', + 'posix/posix_memalign', + 'posix/posix_spawn', + 'posix/index', + 'posix/rindex', + 'posix/search', + 'posix/open_memstream', + 'posix/popen', + 'posix/system', # This test should be in the ANSI tests, but it depends on sys/wait.h + 'posix/sigsuspend', + 'posix/sigaltstack', + 'posix/time', + 'posix/realpath', + 'posix/ffs', + 'posix/getcwd', + 'posix/memrchr', + 'posix/wordexp', + 'posix/rlimits', + 'posix/accept4', + 'posix/setpriority', + 'posix/alarm', + 'posix/abort', # This test should be in the ANSI tests, but it depends on sigaction + 'posix/timer', + 'posix/vfork', + 'posix/wcwidth', + 'posix/pause', + 'posix/flockfile', + 'posix/basename', + 'posix/regex', + 'posix/sigtimedwait', + 'posix/if_indextoname', + 'posix/readv-writev', + 'posix/posix-timer', + 'posix/strdupa', + 'posix/mkstemp', + 'posix/waitid', + 'glibc/getopt', + 'glibc/ffsl-ffsll', + 'glibc/error_message_count', + 'glibc/error_one_per_line', + 'glibc/error_print_progname', + 'glibc/error_expect_fail', + 'glibc/error', + 'glibc/error_at_line', + 'linux/xattr', + 'linux/pthread_setname_np', + 'linux/pthread_attr', + 'linux/cpuset', + 'linux/malloc-usable-size', +] + +if host_machine.system() == 'linux' + all_test_cases += 'glibc/linux-syscall' +endif + +fail_test_cases = [ + 'posix/abort', + 'glibc/error_expect_fail', +] + +wrapped_test_cases = [ + 'glibc/error', + 'glibc/error_at_line', +] + +host_libc_excluded_test_cases = [ + 'bsd/strl', # These functions do not exist on Linux. +] +host_libc_noasan_test_cases = [ + 'posix/pthread_cancel', + 'posix/pthread_attr', # does some stack overflowing to check stack size + 'posix/posix_memalign', + 'posix/search', # requires tdelete (#351) + 'ansi/calloc', # does some overflowing + 'linux/pthread_attr', # encounters memory leaks +] + +extra_cflags_test_cases = { + 'ansi/calloc': ['-Wno-alloc-size-larger-than'], +} + +test_sources = [] +test_link_args = [] +test_c_args = [] +use_pie = false + +test_c_args = [] +test_link_args = [] + +# Our ubsan implementation can't be used by the tests themselves, +# since it is internal to libc.so and ld.so. +test_override_options = ['b_sanitize=none'] + +if library_type == 'static' + libc_dep = declare_dependency( + include_directories: libc_include_dirs, + link_with: libc_static, + dependencies: [libc_deps, rtlib_deps] + ) + use_pie = false + test_c_args += '-no-pie' + test_link_args += ['-no-pie', '-static'] + test_sources += [ + '../options/internal' / host_machine.cpu_family() / 'mlibc_crtbegin.S', + '../options/internal' / host_machine.cpu_family() / 'mlibc_crtend.S', + crt, + ] +else + libc_dep = declare_dependency( + include_directories: libc_include_dirs, + link_with: libc_shared, + dependencies: [libc_deps, rtlib_deps] + ) + test_link_args += ['-Wl,--dynamic-linker=' + meson.build_root() + '/ld.so'] + + if host_machine.system() in ['linux'] + use_pie = true + test_sources += crt_pie + else + use_pie = false + test_sources += crt + + # Meson doesn't set these for us (issue #4651). + test_c_args += '-no-pie' + test_link_args += '-no-pie' + endif + + # Add the rtdl tests. + if not disable_posix_option + subdir('rtdl') + endif +endif + +py = import('python').find_installation('python3') + +foreach test_name : all_test_cases + test_subdir = test_name.split('/')[0] + test_short_name = test_name.split('/')[1] + test_exec_name = test_name.replace('/', '-') + + if test_subdir == 'ansi' and disable_ansi_option + continue + elif test_subdir == 'bsd' and disable_bsd_option + continue + elif test_subdir == 'glibc' and disable_glibc_option + continue + elif test_subdir == 'posix' and disable_posix_option + continue + elif test_subdir == 'linux' and disable_linux_option + continue + endif + + should_fail = fail_test_cases.contains(test_name) + exec = executable(test_exec_name, [test_name + '.c', test_sources], + dependencies: libc_dep, + build_rpath: meson.build_root(), + override_options: test_override_options, + c_args: test_c_args, + link_args: test_link_args, + pie: use_pie, + ) + + if wrapped_test_cases.contains(test_name) + test(test_short_name, + py, + suite: test_subdir, + should_fail: should_fail, + args: [ + meson.source_root() + '/tests/' + test_name + '.py', + exec + ], + timeout: timeout_sec, + ) + else + test(test_short_name, exec, suite: test_subdir, should_fail: should_fail, timeout: timeout_sec) + endif + + if build_tests_host_libc and not host_libc_excluded_test_cases.contains(test_name) + if test_name in host_libc_noasan_test_cases + host_libc_sanitize_options = 'b_sanitize=undefined' + else + host_libc_sanitize_options = 'b_sanitize=address,undefined' + endif + + if test_name in extra_cflags_test_cases + extra_cflags = extra_cflags_test_cases[test_name] + else + extra_cflags = [] + endif + + exec = executable('host-libc-' + test_exec_name, test_name + '.c', + build_rpath: meson.build_root(), + override_options: host_libc_sanitize_options, + c_args: ['-D_GNU_SOURCE', '-DUSE_HOST_LIBC', '-pthread', extra_cflags], + link_args: ['-lresolv', '-ldl', '-pthread', '-lm', '-lrt'], + native: true, + ) + test(test_short_name, exec, suite: ['host-libc', test_subdir], should_fail: should_fail, timeout: timeout_sec) + endif +endforeach |