1# 2# SPDX-License-Identifier: BSD-3-Clause 3# 4# Copyright © 2019 Keith Packard 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 10# 1. Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# 13# 2. Redistributions in binary form must reproduce the above 14# copyright notice, this list of conditions and the following 15# disclaimer in the documentation and/or other materials provided 16# with the distribution. 17# 18# 3. Neither the name of the copyright holder nor the names of its 19# contributors may be used to endorse or promote products derived 20# from this software without specific prior written permission. 21# 22# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 25# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 27# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 29# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 31# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 32# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 33# OF THE POSSIBILITY OF SUCH DAMAGE. 34# 35libc_tests_common = [ 36 'basename', 37 'dirname', 38 'fnmatch', 39 'qsort', 40 'snprintf', 41 'sscanf', 42 'string', 43 'strtol', 44] 45 46libc_tests_picolibc = libc_tests_common 47 48if (tinystdio and io_float_exact) or newlib_io_float 49 libc_tests_picolibc += ['strtod'] 50endif 51 52foreach target : targets 53 value = get_variable('target_' + target) 54 55 _libs = [get_variable('lib_c' + target)] 56 if is_variable('lib_semihost' + target) 57 _libs += [get_variable('lib_semihost' + target)] 58 endif 59 60 if is_variable('crt0_hosted' + target) 61 _objs = [get_variable('crt0_hosted'+ target)] 62 else 63 _objs = [] 64 endif 65 66 _lib_files=[] 67 foreach _lib : _libs 68 _lib_files += _lib.full_path() 69 endforeach 70 71 _c_args = value[1] + get_variable('test_c_args_' + target, test_c_args) 72 _link_args = value[1] + _lib_files + get_variable('test_link_args_' + target, test_link_args) 73 _link_depends = get_variable('test_link_depends_' + target, test_link_depends) + _libs 74 75 foreach t1 : libc_tests_picolibc 76 t1_src = t1 + '.c' 77 if target == '' 78 t1_name = t1 79 else 80 t1_name = t1 + '_' + target 81 endif 82 83 timeout = 30 84 if t1 == 'snprintf' 85 # snprintf has one test which is really slow 86 timeout = 900 87 endif 88 89 test(t1_name, 90 executable(t1_name, [t1_src], 91 c_args: double_printf_compile_args + _c_args, 92 link_args: double_printf_link_args + _link_args, 93 objects: _objs, 94 link_depends: _link_depends, 95 include_directories: inc), 96 depends: bios_bin, 97 timeout: timeout, 98 env: test_env) 99 endforeach 100endforeach 101 102if enable_native_tests 103 104 libc_tests_native = libc_tests_common 105 libc_tests_native_dependencies = [] 106 107 if enable_native_math_tests 108 libc_tests_native += ['strtod'] 109 libc_tests_native_dependencies += native_lib_m 110 endif 111 112 foreach t1 : libc_tests_native 113 t1_src = t1 + '.c' 114 t1_name = t1 + '-native' 115 116 test(t1_name, 117 executable(t1_name, t1_src, 118 c_args: native_c_args, 119 link_args: native_c_args, 120 dependencies: libc_tests_native_dependencies)) 121 endforeach 122 123endif 124 125