components-build-system.sh (7247B)
1 # components-build-system.sh 2 # 3 # Copyright The Mbed TLS Contributors 4 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 5 6 # This file contains test components that are executed by all.sh 7 8 ################################################################ 9 #### Build System Testing 10 ################################################################ 11 12 component_test_make_shared () { 13 msg "build/test: make shared" # ~ 40s 14 make SHARED=1 TEST_CPP=1 all check 15 ldd programs/util/strerror | grep libmbedcrypto 16 $FRAMEWORK/tests/programs/dlopen_demo.sh 17 } 18 19 component_test_cmake_shared () { 20 msg "build/test: cmake shared" # ~ 2min 21 cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On . 22 make 23 ldd programs/util/strerror | grep libmbedcrypto 24 make test 25 $FRAMEWORK/tests/programs/dlopen_demo.sh 26 } 27 28 support_test_cmake_out_of_source () { 29 distrib_id="" 30 distrib_ver="" 31 distrib_ver_minor="" 32 distrib_ver_major="" 33 34 # Attempt to parse lsb-release to find out distribution and version. If not 35 # found this should fail safe (test is supported). 36 if [[ -f /etc/lsb-release ]]; then 37 38 while read -r lsb_line; do 39 case "$lsb_line" in 40 "DISTRIB_ID"*) distrib_id=${lsb_line/#DISTRIB_ID=};; 41 "DISTRIB_RELEASE"*) distrib_ver=${lsb_line/#DISTRIB_RELEASE=};; 42 esac 43 done < /etc/lsb-release 44 45 distrib_ver_major="${distrib_ver%%.*}" 46 distrib_ver="${distrib_ver#*.}" 47 distrib_ver_minor="${distrib_ver%%.*}" 48 fi 49 50 # Running the out of source CMake test on Ubuntu 16.04 using more than one 51 # processor (as the CI does) can create a race condition whereby the build 52 # fails to see a generated file, despite that file actually having been 53 # generated. This problem appears to go away with 18.04 or newer, so make 54 # the out of source tests unsupported on Ubuntu 16.04. 55 [ "$distrib_id" != "Ubuntu" ] || [ "$distrib_ver_major" -gt 16 ] 56 } 57 58 component_test_cmake_out_of_source () { 59 # Remove existing generated files so that we use the ones cmake 60 # generates 61 make neat 62 63 msg "build: cmake 'out-of-source' build" 64 MBEDTLS_ROOT_DIR="$PWD" 65 mkdir "$OUT_OF_SOURCE_DIR" 66 cd "$OUT_OF_SOURCE_DIR" 67 # Note: Explicitly generate files as these are turned off in releases 68 cmake -D CMAKE_BUILD_TYPE:String=Check -D GEN_FILES=ON -D TEST_CPP=1 "$MBEDTLS_ROOT_DIR" 69 make 70 71 msg "test: cmake 'out-of-source' build" 72 make test 73 # Check that ssl-opt.sh can find the test programs. 74 # Also ensure that there are no error messages such as 75 # "No such file or directory", which would indicate that some required 76 # file is missing (ssl-opt.sh tolerates the absence of some files so 77 # may exit with status 0 but emit errors). 78 ./tests/ssl-opt.sh -f 'Default' >ssl-opt.out 2>ssl-opt.err 79 grep PASS ssl-opt.out 80 cat ssl-opt.err >&2 81 # If ssl-opt.err is non-empty, record an error and keep going. 82 [ ! -s ssl-opt.err ] 83 rm ssl-opt.out ssl-opt.err 84 cd "$MBEDTLS_ROOT_DIR" 85 rm -rf "$OUT_OF_SOURCE_DIR" 86 } 87 88 component_test_cmake_as_subdirectory () { 89 # Remove existing generated files so that we use the ones CMake 90 # generates 91 make neat 92 93 msg "build: cmake 'as-subdirectory' build" 94 cd programs/test/cmake_subproject 95 # Note: Explicitly generate files as these are turned off in releases 96 cmake -D GEN_FILES=ON . 97 make 98 ./cmake_subproject 99 } 100 101 support_test_cmake_as_subdirectory () { 102 support_test_cmake_out_of_source 103 } 104 105 component_test_cmake_as_package () { 106 # Remove existing generated files so that we use the ones CMake 107 # generates 108 make neat 109 110 msg "build: cmake 'as-package' build" 111 root_dir="$(pwd)" 112 cd programs/test/cmake_package 113 build_variant_dir="$(pwd)" 114 cmake . 115 make 116 ./cmake_package 117 if [[ "$OSTYPE" == linux* ]]; then 118 PKG_CONFIG_PATH="${build_variant_dir}/mbedtls/pkgconfig" \ 119 ${root_dir}/framework/scripts/pkgconfig.sh \ 120 mbedtls mbedx509 mbedcrypto 121 # These are the EXPECTED package names. Renaming these could break 122 # consumers of pkg-config, consider carefully. 123 fi 124 } 125 126 support_test_cmake_as_package () { 127 support_test_cmake_out_of_source 128 } 129 130 component_test_cmake_as_package_install () { 131 # Remove existing generated files so that we use the ones CMake 132 # generates 133 make neat 134 135 msg "build: cmake 'as-installed-package' build" 136 cd programs/test/cmake_package_install 137 cmake . 138 make 139 ./cmake_package_install 140 } 141 142 support_test_cmake_as_package_install () { 143 support_test_cmake_out_of_source 144 } 145 146 component_build_cmake_custom_config_file () { 147 # Make a copy of config file to use for the in-tree test 148 cp "$CONFIG_H" include/mbedtls_config_in_tree_copy.h 149 150 MBEDTLS_ROOT_DIR="$PWD" 151 mkdir "$OUT_OF_SOURCE_DIR" 152 cd "$OUT_OF_SOURCE_DIR" 153 154 # Build once to get the generated files (which need an intact config file) 155 cmake "$MBEDTLS_ROOT_DIR" 156 make 157 158 msg "build: cmake with -DMBEDTLS_CONFIG_FILE" 159 scripts/config.py -w full_config.h full 160 echo '#error "cmake -DMBEDTLS_CONFIG_FILE is not working."' > "$MBEDTLS_ROOT_DIR/$CONFIG_H" 161 cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h "$MBEDTLS_ROOT_DIR" 162 make 163 164 msg "build: cmake with -DMBEDTLS_CONFIG_FILE + -DMBEDTLS_USER_CONFIG_FILE" 165 # In the user config, disable one feature (for simplicity, pick a feature 166 # that nothing else depends on). 167 echo '#undef MBEDTLS_NIST_KW_C' >user_config.h 168 169 cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h -DMBEDTLS_USER_CONFIG_FILE=user_config.h "$MBEDTLS_ROOT_DIR" 170 make 171 not programs/test/query_compile_time_config MBEDTLS_NIST_KW_C 172 173 rm -f user_config.h full_config.h 174 175 cd "$MBEDTLS_ROOT_DIR" 176 rm -rf "$OUT_OF_SOURCE_DIR" 177 178 # Now repeat the test for an in-tree build: 179 180 # Restore config for the in-tree test 181 mv include/mbedtls_config_in_tree_copy.h "$CONFIG_H" 182 183 # Build once to get the generated files (which need an intact config) 184 cmake . 185 make 186 187 msg "build: cmake (in-tree) with -DMBEDTLS_CONFIG_FILE" 188 scripts/config.py -w full_config.h full 189 echo '#error "cmake -DMBEDTLS_CONFIG_FILE is not working."' > "$MBEDTLS_ROOT_DIR/$CONFIG_H" 190 cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h . 191 make 192 193 msg "build: cmake (in-tree) with -DMBEDTLS_CONFIG_FILE + -DMBEDTLS_USER_CONFIG_FILE" 194 # In the user config, disable one feature (for simplicity, pick a feature 195 # that nothing else depends on). 196 echo '#undef MBEDTLS_NIST_KW_C' >user_config.h 197 198 cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h -DMBEDTLS_USER_CONFIG_FILE=user_config.h . 199 make 200 not programs/test/query_compile_time_config MBEDTLS_NIST_KW_C 201 202 rm -f user_config.h full_config.h 203 } 204 205 support_build_cmake_custom_config_file () { 206 support_test_cmake_out_of_source 207 } 208 209 component_build_cmake_programs_no_testing () { 210 # Verify that the type of builds performed by oss-fuzz don't get accidentally broken 211 msg "build: cmake with -DENABLE_PROGRAMS=ON and -DENABLE_TESTING=OFF" 212 cmake -DENABLE_PROGRAMS=ON -DENABLE_TESTING=OFF . 213 make 214 } 215 216 support_build_cmake_programs_no_testing () { 217 support_test_cmake_out_of_source 218 }