configs/azure_c_shared_utilityFunctions.cmake (675 lines of code) (raw):

#Copyright (c) Microsoft. All rights reserved. #Licensed under the MIT license. See LICENSE file in the project root for full license information. function(target_link_libraries_with_arg_prefix arg_prefix whatIsBuilding lib) if(${arg_prefix} STREQUAL "debug") target_link_libraries(${whatIsBuilding} debug ${lib}) elseif(${arg_prefix} STREQUAL "optimized") target_link_libraries(${whatIsBuilding} optimized ${lib}) elseif(${arg_prefix} STREQUAL "general") target_link_libraries(${whatIsBuilding} general ${lib}) else() target_link_libraries(${whatIsBuilding} ${lib}) endif() endfunction() function(set_test_target_folder whatIsBuilding ext) if("${whatIsBuilding}" MATCHES ".*e2e.*") set_target_properties(${whatIsBuilding}_${ext} PROPERTIES FOLDER "tests/E2ETests") else() set_target_properties(${whatIsBuilding}_${ext} PROPERTIES FOLDER "tests/UnitTests") endif() endfunction() function(windows_unittests_add_dll whatIsBuilding) link_directories(${whatIsBuilding}_dll $ENV{VCInstallDir}UnitTest/lib) add_library(${whatIsBuilding}_dll SHARED ${${whatIsBuilding}_cpp_files} ${${whatIsBuilding}_h_files} ${${whatIsBuilding}_c_files} ${logging_files} ) set_test_target_folder(${whatIsBuilding} "dll") set(PARSING_ADDITIONAL_LIBS OFF) set(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER) set(ARG_PREFIX "none") foreach(f ${ARGN}) set(skip_to_next FALSE) if(${f} STREQUAL "ADDITIONAL_LIBS") SET(PARSING_ADDITIONAL_LIBS ON) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(ARG_PREFIX "none") #also unset all the other states set(skip_to_next TRUE) elseif(${f} STREQUAL "VALGRIND_SUPPRESSIONS_FILE") SET(PARSING_ADDITIONAL_LIBS OFF) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE ON) set(skip_to_next TRUE) endif() if(NOT skip_to_next) if(PARSING_ADDITIONAL_LIBS) if((${f} STREQUAL "debug") OR (${f} STREQUAL "optimized") OR (${f} STREQUAL "general")) SET(ARG_PREFIX ${f}) else() target_link_libraries_with_arg_prefix(${ARG_PREFIX} ${whatIsBuilding}_dll ${f}) set(ARG_PREFIX "none") endif() endif() endif() endforeach() target_include_directories(${whatIsBuilding}_dll PUBLIC ${sharedutil_include_directories} $ENV{VCInstallDir}UnitTest/include) target_compile_definitions(${whatIsBuilding}_dll PUBLIC -DCPP_UNITTEST) target_link_libraries(${whatIsBuilding}_dll micromock_cpp_unittest umock_c ctest testrunnerswitcher) endfunction() function(windows_unittests_add_exe whatIsBuilding) add_executable(${whatIsBuilding}_exe ${${whatIsBuilding}_cpp_files} ${${whatIsBuilding}_h_files} ${${whatIsBuilding}_c_files} ${CMAKE_CURRENT_LIST_DIR}/main.c ${logging_files} ) set_test_target_folder(${whatIsBuilding} "exe") set(PARSING_ADDITIONAL_LIBS OFF) set(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER) set(ARG_PREFIX "none") foreach(f ${ARGN}) set(skip_to_next FALSE) if(${f} STREQUAL "ADDITIONAL_LIBS") SET(PARSING_ADDITIONAL_LIBS ON) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(ARG_PREFIX "none") #also unset all the other states set(skip_to_next TRUE) elseif(${f} STREQUAL "VALGRIND_SUPPRESSIONS_FILE") SET(PARSING_ADDITIONAL_LIBS OFF) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE ON) set(skip_to_next TRUE) endif() if(NOT skip_to_next) if(PARSING_ADDITIONAL_LIBS) if((${f} STREQUAL "debug") OR (${f} STREQUAL "optimized") OR (${f} STREQUAL "general")) SET(ARG_PREFIX ${f}) else() target_link_libraries_with_arg_prefix(${ARG_PREFIX} ${whatIsBuilding}_exe ${f}) set(ARG_PREFIX "none") endif() endif() endif() endforeach() target_compile_definitions(${whatIsBuilding}_exe PUBLIC -DUSE_CTEST) target_include_directories(${whatIsBuilding}_exe PUBLIC ${sharedutil_include_directories}) target_link_libraries(${whatIsBuilding}_exe micromock_ctest umock_c ctest testrunnerswitcher) add_test(NAME ${whatIsBuilding} COMMAND ${whatIsBuilding}_exe) endfunction() #this function takes more than the 1 mandatory argument (whatIsBuilding) #the parameters are separated by "known" separators #for example, ADDITIONAL_LIBS starts a list of needed libraries function(linux_unittests_add_exe whatIsBuilding) add_executable(${whatIsBuilding}_exe ${${whatIsBuilding}_cpp_files} ${${whatIsBuilding}_h_files} ${${whatIsBuilding}_c_files} ${CMAKE_CURRENT_LIST_DIR}/main.c ${logging_files} ) set_test_target_folder(${whatIsBuilding} "exe") target_compile_definitions(${whatIsBuilding}_exe PUBLIC -DUSE_CTEST) target_include_directories(${whatIsBuilding}_exe PUBLIC ${sharedutil_include_directories}) #this part detects # - the additional libraries that might be needed. # additional libraries are started by ADDITIONAL_LIBS parameter and ended by any other known parameter (or end of variable arguments) # - a valgrind suppression file (VALGRIND_SUPPRESSIONS_FILE) for memcheck # the file name follows immediately after set(PARSING_ADDITIONAL_LIBS OFF) set(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER) set(ARG_PREFIX "none") foreach(f ${ARGN}) set(skip_to_next FALSE) if(${f} STREQUAL "ADDITIONAL_LIBS") SET(PARSING_ADDITIONAL_LIBS ON) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(ARG_PREFIX "none") set(skip_to_next TRUE) #also unset all the other states elseif(${f} STREQUAL "VALGRIND_SUPPRESSIONS_FILE") SET(PARSING_ADDITIONAL_LIBS OFF) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE ON) set(skip_to_next TRUE) endif() if(NOT skip_to_next) if(PARSING_ADDITIONAL_LIBS) if((${f} STREQUAL "debug") OR (${f} STREQUAL "optimized") OR (${f} STREQUAL "general")) SET(ARG_PREFIX ${f}) else() target_link_libraries_with_arg_prefix(${ARG_PREFIX} ${whatIsBuilding}_exe ${f}) set(ARG_PREFIX "none") endif() elseif(PARSING_VALGRIND_SUPPRESSIONS_FILE) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER "--suppressions=${f}") endif() endif() endforeach() target_link_libraries(${whatIsBuilding}_exe micromock_ctest umock_c ctest) add_test(NAME ${whatIsBuilding} COMMAND $<TARGET_FILE:${whatIsBuilding}_exe>) if(${run_valgrind}) find_program(VALGRIND_FOUND NAMES valgrind) if(${VALGRIND_FOUND} STREQUAL VALGRIND_FOUND-NOTFOUND) message(WARNING "run_valgrind was TRUE, but valgrind was not found - there will be no tests run under valgrind") else() add_test(NAME ${whatIsBuilding}_valgrind COMMAND valgrind --num-callers=100 --error-exitcode=1 --leak-check=full --track-origins=yes ${VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER} $<TARGET_FILE:${whatIsBuilding}_exe>) add_test(NAME ${whatIsBuilding}_helgrind COMMAND valgrind --tool=helgrind --num-callers=100 --error-exitcode=1 ${VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER} $<TARGET_FILE:${whatIsBuilding}_exe>) add_test(NAME ${whatIsBuilding}_drd COMMAND valgrind --tool=drd --num-callers=100 --error-exitcode=1 ${VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER} $<TARGET_FILE:${whatIsBuilding}_exe>) endif() endif() endfunction() function(build_test_artifacts whatIsBuilding use_gballoc) #the first argument is what is building #the second argument is whether the tests should be build with gballoc #defines or not #the following arguments are a list of libraries to link with if(${use_gballoc}) add_definitions(-DGB_MEASURE_MEMORY_FOR_THIS -DGB_DEBUG_ALLOC) else() endif() #setting #defines if(WIN32) add_definitions(-D_CRT_SECURE_NO_WARNINGS) else() endif() #setting includes set(sharedutil_include_directories ${sharedutil_include_directories} ${TESTRUNNERSWITCHER_INCLUDES} ${CTEST_INCLUDES} ${UMOCK_C_INCLUDES} ${AZURE_C_SHARED_UTILITY_INCLUDES}) set(sharedutil_include_directories ${sharedutil_include_directories} ${MICROMOCK_INC_FOLDER} ${TESTRUNNERSWITCHER_INC_FOLDER} ${CTEST_INC_FOLDER} ${SAL_INC_FOLDER} ${SHARED_UTIL_INC_FOLDER} ${SHARED_UTIL_SRC_FOLDER}) if(WIN32) else() include_directories(${sharedutil_include_directories}) endif() #setting logging_files add_definitions(-DLOGGER_DISABLE_PAL) if(DEFINED SHARED_UTIL_SRC_FOLDER) set(logging_files ${XLOGGING_C_FILE} ${LOGGING_C_FILE}) elseif(DEFINED SHARED_UTIL_FOLDER) set(logging_files ${XLOGGING_C_FILE} ${LOGGING_C_FILE}) else() message(FATAL_ERROR "No Shared Utility folder defined for src.") endif() #setting output type if(WIN32) if( (("${whatIsBuilding}" MATCHES ".*ut.*") AND ${run_unittests}) OR (("${whatIsBuilding}" MATCHES ".*e2e.*") AND ${run_e2e_tests}) OR (("${whatIsBuilding}" MATCHES ".*int.*") AND ${run_int_tests}) ) windows_unittests_add_exe(${whatIsBuilding} ${ARGN}) if (${use_cppunittest}) windows_unittests_add_dll(${whatIsBuilding} ${ARGN}) endif() else() if( (("${whatIsBuilding}" MATCHES ".*e2e.*") AND ${nuget_e2e_tests}) ) windows_unittests_add_exe(${whatIsBuilding}_nuget ${ARGN}) else() #do nothing endif() endif() else() if( (("${whatIsBuilding}" MATCHES ".*ut.*") AND ${run_unittests}) OR (("${whatIsBuilding}" MATCHES ".*e2e.*") AND ${run_e2e_tests}) OR (("${whatIsBuilding}" MATCHES ".*int.*") AND ${run_int_tests}) ) linux_unittests_add_exe(${whatIsBuilding} ${ARGN}) endif() endif() endfunction(build_test_artifacts) function(c_windows_unittests_add_dll whatIsBuilding folder) link_directories(${whatIsBuilding}_dll $ENV{VCInstallDir}UnitTest/lib) add_library(${whatIsBuilding}_testsonly_lib STATIC ${${whatIsBuilding}_test_files} ) SET(VAR 1) foreach(file ${${whatIsBuilding}_test_files}) set_source_files_properties(${file} PROPERTIES COMPILE_FLAGS -DCPPUNITTEST_SYMBOL=some_symbol_for_cppunittest_${VAR}) MATH(EXPR VAR "${VAR}+1") endforeach() set_target_properties(${whatIsBuilding}_testsonly_lib PROPERTIES FOLDER ${folder} ) target_include_directories(${whatIsBuilding}_testsonly_lib PUBLIC ${sharedutil_include_directories} $ENV{VCInstallDir}UnitTest/include) target_compile_definitions(${whatIsBuilding}_testsonly_lib PUBLIC -DCPP_UNITTEST) target_compile_options(${whatIsBuilding}_testsonly_lib PUBLIC /TP /EHsc) add_library(${whatIsBuilding}_dll SHARED ${${whatIsBuilding}_cpp_files} ${${whatIsBuilding}_h_files} ${${whatIsBuilding}_c_files} ${logging_files} ) set_target_properties(${whatIsBuilding}_dll PROPERTIES FOLDER ${folder}) set_source_files_properties(${${whatIsBuilding}_c_files} ${logging_files} PROPERTIES COMPILE_FLAGS /TC) set_source_files_properties(${${whatIsBuilding}_cpp_files} PROPERTIES COMPILE_FLAGS /TP) target_link_libraries(${whatIsBuilding}_dll umock_c ctest testrunnerswitcher ${whatIsBuilding}_testsonly_lib ) set(PARSING_ADDITIONAL_LIBS OFF) set(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER) set(ARG_PREFIX "none") foreach(f ${ARGN}) set(skip_to_next FALSE) if(${f} STREQUAL "ADDITIONAL_LIBS") SET(PARSING_ADDITIONAL_LIBS ON) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(ARG_PREFIX "none") #also unset all the other states set(skip_to_next TRUE) elseif(${f} STREQUAL "VALGRIND_SUPPRESSIONS_FILE") SET(PARSING_ADDITIONAL_LIBS OFF) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE ON) set(skip_to_next TRUE) endif() if(NOT skip_to_next) if(PARSING_ADDITIONAL_LIBS) if((${f} STREQUAL "debug") OR (${f} STREQUAL "optimized") OR (${f} STREQUAL "general")) SET(ARG_PREFIX ${f}) else() target_link_libraries_with_arg_prefix(${ARG_PREFIX} ${whatIsBuilding}_dll ${f}) target_link_libraries_with_arg_prefix(${ARG_PREFIX} ${whatIsBuilding}_testsonly_lib ${f}) set(ARG_PREFIX "none") endif() endif() endif() endforeach() SET(SPACES " ") SET(VAR 1) foreach(file ${${whatIsBuilding}_test_files}) # for x64 the underscore is not needed if (ARCHITECTURE STREQUAL "x86_64" OR ARCHITECTURE STREQUAL "ARM") set_property(TARGET ${whatIsBuilding}_dll APPEND_STRING PROPERTY LINK_FLAGS ${SPACES}/INCLUDE:"some_symbol_for_cppunittest_${VAR}") else() set_property(TARGET ${whatIsBuilding}_dll APPEND_STRING PROPERTY LINK_FLAGS ${SPACES}/INCLUDE:"_some_symbol_for_cppunittest_${VAR}") endif() MATH(EXPR VAR "${VAR}+1") endforeach() endfunction() function(c_windows_unittests_add_exe whatIsBuilding folder) add_executable(${whatIsBuilding}_exe ${${whatIsBuilding}_test_files} ${${whatIsBuilding}_cpp_files} ${${whatIsBuilding}_h_files} ${${whatIsBuilding}_c_files} ${CMAKE_CURRENT_LIST_DIR}/main.c ${logging_files} ) set_target_properties(${whatIsBuilding}_exe PROPERTIES FOLDER ${folder}) target_compile_definitions(${whatIsBuilding}_exe PUBLIC -DUSE_CTEST) target_include_directories(${whatIsBuilding}_exe PUBLIC ${sharedutil_include_directories}) target_link_libraries(${whatIsBuilding}_exe umock_c ctest testrunnerswitcher) set(PARSING_ADDITIONAL_LIBS OFF) set(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER) set(ARG_PREFIX "none") foreach(f ${ARGN}) set(skip_to_next FALSE) if(${f} STREQUAL "ADDITIONAL_LIBS") SET(PARSING_ADDITIONAL_LIBS ON) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(ARG_PREFIX "none") #also unset all the other states set(skip_to_next TRUE) elseif(${f} STREQUAL "VALGRIND_SUPPRESSIONS_FILE") SET(PARSING_ADDITIONAL_LIBS OFF) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE ON) set(skip_to_next TRUE) endif() if(NOT skip_to_next) if(PARSING_ADDITIONAL_LIBS) if((${f} STREQUAL "debug") OR (${f} STREQUAL "optimized") OR (${f} STREQUAL "general")) SET(ARG_PREFIX ${f}) else() target_link_libraries_with_arg_prefix(${ARG_PREFIX} ${whatIsBuilding}_exe ${f}) set(ARG_PREFIX "none") endif() endif() endif() endforeach() add_test(NAME ${whatIsBuilding} COMMAND ${whatIsBuilding}_exe) endfunction() #this function takes more than the 1 mandatory argument (whatIsBuilding) #the parameters are separated by "known" separators #for example, ADDITIONAL_LIBS starts a list of needed libraries function(c_linux_unittests_add_exe whatIsBuilding folder) add_executable(${whatIsBuilding}_exe ${${whatIsBuilding}_test_files} ${${whatIsBuilding}_cpp_files} ${${whatIsBuilding}_h_files} ${${whatIsBuilding}_c_files} ${CMAKE_CURRENT_LIST_DIR}/main.c ${logging_files} ) set_target_properties(${whatIsBuilding}_exe PROPERTIES FOLDER ${folder}) target_compile_definitions(${whatIsBuilding}_exe PUBLIC -DUSE_CTEST) target_include_directories(${whatIsBuilding}_exe PUBLIC ${sharedutil_include_directories}) #this part detects # - the additional libraries that might be needed. # additional libraries are started by ADDITIONAL_LIBS parameter and ended by any other known parameter (or end of variable arguments) # - a valgrind suppression file (VALGRIND_SUPPRESSIONS_FILE) for memcheck # the file name follows immediately after set(PARSING_ADDITIONAL_LIBS OFF) set(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER) set(ARG_PREFIX "none") foreach(f ${ARGN}) set(skip_to_next FALSE) if(${f} STREQUAL "ADDITIONAL_LIBS") SET(PARSING_ADDITIONAL_LIBS ON) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(ARG_PREFIX "none") #also unset all the other states set(skip_to_next TRUE) elseif(${f} STREQUAL "VALGRIND_SUPPRESSIONS_FILE") SET(PARSING_ADDITIONAL_LIBS OFF) SET(PARSING_VALGRIND_SUPPRESSIONS_FILE ON) set(skip_to_next TRUE) endif() if(NOT skip_to_next) if(PARSING_ADDITIONAL_LIBS) if((${f} STREQUAL "debug") OR (${f} STREQUAL "optimized") OR (${f} STREQUAL "general")) SET(ARG_PREFIX ${f}) else() target_link_libraries_with_arg_prefix(${ARG_PREFIX} ${whatIsBuilding}_exe ${f}) set(ARG_PREFIX "none") endif() elseif(PARSING_VALGRIND_SUPPRESSIONS_FILE) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER "--suppressions=${f}") endif() endif() endforeach() target_link_libraries(${whatIsBuilding}_exe umock_c ctest m) add_test(NAME ${whatIsBuilding} COMMAND $<TARGET_FILE:${whatIsBuilding}_exe>) if(${run_valgrind}) find_program(VALGRIND_FOUND NAMES valgrind) if(${VALGRIND_FOUND} STREQUAL VALGRIND_FOUND-NOTFOUND) message(WARNING "run_valgrind was TRUE, but valgrind was not found - there will be no tests run under valgrind") else() add_test(NAME ${whatIsBuilding}_valgrind COMMAND valgrind --gen-suppressions=all --num-callers=100 --error-exitcode=1 --leak-check=full --track-origins=yes ${VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER} $<TARGET_FILE:${whatIsBuilding}_exe>) add_test(NAME ${whatIsBuilding}_helgrind COMMAND valgrind --tool=helgrind --gen-suppressions=all --num-callers=100 --error-exitcode=1 ${VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER} $<TARGET_FILE:${whatIsBuilding}_exe>) add_test(NAME ${whatIsBuilding}_drd COMMAND valgrind --tool=drd --gen-suppressions=all --num-callers=100 --error-exitcode=1 ${VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER} $<TARGET_FILE:${whatIsBuilding}_exe>) endif() endif() endfunction() function(build_c_test_artifacts whatIsBuilding use_gballoc folder) #the first argument is what is building #the second argument is whether the tests should be build with gballoc #defines or not #the following arguments are a list of libraries to link with if(${use_gballoc}) add_definitions(-DGB_MEASURE_MEMORY_FOR_THIS -DGB_DEBUG_ALLOC) else() endif() #setting #defines if(WIN32) add_definitions(-D_CRT_SECURE_NO_WARNINGS) else() endif() #setting includes set(sharedutil_include_directories ${sharedutil_include_directories} ${TESTRUNNERSWITCHER_INCLUDES} ${CTEST_INCLUDES} ${UMOCK_C_INCLUDES} ${AZURE_C_SHARED_UTILITY_INCLUDES}) set(sharedutil_include_directories ${sharedutil_include_directories} ${MICROMOCK_INC_FOLDER} ${UMOCK_C_INC_FOLDER} ${TESTRUNNERSWITCHER_INC_FOLDER} ${CTEST_INC_FOLDER} ${SAL_INC_FOLDER} ${SHARED_UTIL_INC_FOLDER} ${SHARED_UTIL_SRC_FOLDER}) if(WIN32) else() include_directories(${sharedutil_include_directories}) endif() add_definitions(-DLOGGER_DISABLE_PAL) #setting logging_files if(DEFINED SHARED_UTIL_SRC_FOLDER) set(logging_files ${XLOGGING_C_FILE} ${LOGGING_C_FILE}) elseif(DEFINED SHARED_UTIL_FOLDER) set(logging_files ${XLOGGING_C_FILE} ${LOGGING_C_FILE}) else() message(FATAL_ERROR "No Shared Utility folder defined for includes/src.") endif() #setting output type if(WIN32) if( (("${whatIsBuilding}" MATCHES ".*ut.*") AND ${run_unittests}) OR (("${whatIsBuilding}" MATCHES ".*e2e.*") AND ${run_e2e_tests}) OR (("${whatIsBuilding}" MATCHES ".*int.*") AND ${run_int_tests}) ) if (${use_cppunittest}) c_windows_unittests_add_dll(${whatIsBuilding} ${folder} ${ARGN}) endif() c_windows_unittests_add_exe(${whatIsBuilding} ${folder} ${ARGN}) else() if( (("${whatIsBuilding}" MATCHES ".*e2e.*") AND ${nuget_e2e_tests}) ) c_windows_unittests_add_exe(${whatIsBuilding}_nuget ${folder} ${ARGN}) else() #do nothing endif() endif() else() if( (("${whatIsBuilding}" MATCHES ".*ut.*") AND ${run_unittests}) OR (("${whatIsBuilding}" MATCHES ".*e2e.*") AND ${run_e2e_tests}) OR (("${whatIsBuilding}" MATCHES ".*int.*") AND ${run_int_tests}) ) c_linux_unittests_add_exe(${whatIsBuilding} ${folder} ${ARGN}) endif() endif() endfunction() function(compile_c_test_artifacts_as whatIsBuilding compileAsWhat) if(WIN32) if( (("${whatIsBuilding}" MATCHES ".*ut.*") AND ${run_unittests}) OR (("${whatIsBuilding}" MATCHES ".*e2e.*") AND ${run_e2e_tests}) OR (("${whatIsBuilding}" MATCHES ".*int.*") AND ${run_int_tests}) ) if (${use_cppunittest}) if(${compileAsWhat} STREQUAL "C99") compileTargetAsC99(${whatIsBuilding}_dll) compileTargetAsC99(${whatIsBuilding}_testsonly_lib) endif() if(${compileAsWhat} STREQUAL "C11") compileTargetAsC11(${whatIsBuilding}_dll) compileTargetAsC11(${whatIsBuilding}_testsonly_lib) endif() endif() if(${compileAsWhat} STREQUAL "C99") compileTargetAsC99(${whatIsBuilding}_exe) endif() if(${compileAsWhat} STREQUAL "C11") compileTargetAsC11(${whatIsBuilding}_exe) endif() else() if( (("${whatIsBuilding}" MATCHES ".*e2e.*") AND ${nuget_e2e_tests}) ) if(${compileAsWhat} STREQUAL "C99") compileTargetAsC99(${whatIsBuilding}_exe) endif() if(${compileAsWhat} STREQUAL "C11") compileTargetAsC11(${whatIsBuilding}_exe) endif() else() #do nothing endif() endif() else() if( (("${whatIsBuilding}" MATCHES ".*ut.*") AND ${run_unittests}) OR (("${whatIsBuilding}" MATCHES ".*e2e.*") AND ${run_e2e_tests}) OR (("${whatIsBuilding}" MATCHES ".*int.*") AND ${run_int_tests}) ) if(${compileAsWhat} STREQUAL "C99") compileTargetAsC99(${whatIsBuilding}_exe) endif() if(${compileAsWhat} STREQUAL "C11") compileTargetAsC11(${whatIsBuilding}_exe) endif() endif() endif() endfunction() function(build_c_test_longhaul_test test_name test_c_files test_h_files) set(test_c_files ${CMAKE_CURRENT_LIST_DIR}/../common_longhaul/iothub_client_statistics.c ${CMAKE_CURRENT_LIST_DIR}/../common_longhaul/iothub_client_common_longhaul.c ${test_c_files} ) set(test_h_files ${CMAKE_CURRENT_LIST_DIR}/../common_longhaul/iothub_client_statistics.h ${CMAKE_CURRENT_LIST_DIR}/../common_longhaul/iothub_client_common_longhaul.h ${test_h_files} ) IF(WIN32) #windows needs this define add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-DGB_MEASURE_MEMORY_FOR_THIS -DGB_DEBUG_ALLOC) ENDIF(WIN32) #Conditionally use the SDK trusted certs in the samples if(${set_trusted_cert_in_samples}) add_definitions(-DSET_TRUSTED_CERT_IN_SAMPLES) include_directories(${PROJECT_SOURCE_DIR}/certs) set(samples_cert_file ${PROJECT_SOURCE_DIR}/certs/certs.c) endif() include_directories(${IOTHUB_TEST_INC_FOLDER}) include_directories(${IOTHUB_SERVICE_CLIENT_INC_FOLDER}) include_directories(.) add_executable(${test_name} ${test_c_files} ${test_h_files} ${samples_cert_file}) set(PARSING_VALGRIND_SUPPRESSIONS_FILE OFF) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER) foreach(f ${ARGN}) set(skip_to_next FALSE) if(${f} STREQUAL "VALGRIND_SUPPRESSIONS_FILE") SET(PARSING_VALGRIND_SUPPRESSIONS_FILE ON) set(skip_to_next TRUE) endif() if(NOT skip_to_next) if(PARSING_VALGRIND_SUPPRESSIONS_FILE) set(VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER "--suppressions=${f}") endif() endif() endforeach() if(${run_valgrind}) find_program(VALGRIND_FOUND NAMES valgrind) if(${VALGRIND_FOUND} STREQUAL VALGRIND_FOUND-NOTFOUND) message(WARNING "run_valgrind was TRUE, but valgrind was not found - there will be no tests run under valgrind") else() # below are the longhaul tests running under valgrind # These are currently disabled because the longhaul containers are still Ubuntu 16 andd need s to upgraded to Ubuntu 18 #add_test(NAME ${test_name}_valgrind COMMAND valgrind --gen-suppressions=all --num-callers=100 --error-exitcode=1 --leak-check=full --track-origins=yes ${VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER} $<TARGET_FILE:${test_name}>) #add_test(NAME ${test_name}_helgrind COMMAND valgrind --tool=helgrind --gen-suppressions=all --num-callers=100 --error-exitcode=1 ${VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER} $<TARGET_FILE:${test_name}>) #add_test(NAME ${test_name}_drd COMMAND valgrind --tool=drd --gen-suppressions=all --num-callers=100 --error-exitcode=1 ${VALGRIND_SUPPRESSIONS_FILE_EXTRA_PARAMETER} $<TARGET_FILE:${test_name}>) #set_tests_properties(${test_name}_valgrind PROPERTIES TIMEOUT 1296000) #set_tests_properties(${test_name}_helgrind PROPERTIES TIMEOUT 1296000) #set_tests_properties(${test_name}_drd PROPERTIES TIMEOUT 1296000) # run the lonhaul without using valgrind add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>) set_tests_properties(${test_name} PROPERTIES TIMEOUT 1296000) endif() else() add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>) set_tests_properties(${test_name} PROPERTIES TIMEOUT 1296000) endif() target_link_libraries(${test_name} iothub_test iothub_client) set_target_properties(${test_name} PROPERTIES FOLDER "tests/LongHaul") endfunction() # This function focuses on setting files which are unique to a given hardware platform. # The choice of tlsio is not unique per-platform, and is set in the main CMakeLists.txt function(set_platform_files c_shared_dir) if(WIN32) if(${use_condition}) set(CONDITION_C_FILE ${c_shared_dir}/adapters/condition_win32.c PARENT_SCOPE) endif() if(${use_etw} STREQUAL "OFF") set(XLOGGING_C_FILE ${c_shared_dir}/src/xlogging.c PARENT_SCOPE) set(LOGGING_C_FILE ${c_shared_dir}/src/consolelogger.c PARENT_SCOPE) set(LOGGING_H_FILE ${c_shared_dir}/inc/azure_c_shared_utility/consolelogger.h PARENT_SCOPE) elseif(${use_etw} STREQUAL "TRACELOGGING") set(XLOGGING_C_FILE ${c_shared_dir}/src/etwxlogging.c PARENT_SCOPE) set(LOGGING_C_FILE ${c_shared_dir}/src/etwlogger_driver.c PARENT_SCOPE) set(LOGGING_H_FILE ${c_shared_dir}/inc/azure_c_shared_utility/etwlogger_driver.h PARENT_SCOPE) elseif(${use_etw} STREQUAL "TRACELOGGING_WITH_CONSOLE") set(XLOGGING_C_FILE ${c_shared_dir}/src/etwxlogging.c PARENT_SCOPE) set(LOGGING_C_FILE ${c_shared_dir}/src/etwlogger_driver.c ${c_shared_dir}/src/consolelogger.c PARENT_SCOPE) set(LOGGING_H_FILE ${c_shared_dir}/inc/azure_c_shared_utility/etwlogger_driver.h ${c_shared_dir}/inc/azure_c_shared_utility/consolelogger.h PARENT_SCOPE) endif() set(THREAD_C_FILE ${c_shared_dir}/adapters/threadapi_win32.c PARENT_SCOPE) set(LOCK_C_FILE ${c_shared_dir}/adapters/lock_win32.c PARENT_SCOPE) set(SRW_LOCK_C_FILE ${c_shared_dir}/adapters/srw_lock.c PARENT_SCOPE) set(TIMER_C_FILE ${c_shared_dir}/adapters/timer.c PARENT_SCOPE) set(STRING_UTILS_C_FILE ${c_shared_dir}/adapters/string_utils.c PARENT_SCOPE) set(RANDOM_C_FILE ${c_shared_dir}/adapters/random_stub.c PARENT_SCOPE) if (${use_builtin_httpapi}) set(HTTP_C_FILE ${c_shared_dir}/adapters/httpapi_compact.c PARENT_SCOPE) else() set(HTTP_C_FILE ${c_shared_dir}/adapters/httpapi_winhttp.c PARENT_SCOPE) endif() set(PLATFORM_C_FILE ${c_shared_dir}/adapters/platform_win32.c PARENT_SCOPE) if (${use_socketio}) set(SOCKETIO_C_FILE ${c_shared_dir}/adapters/socketio_win32.c PARENT_SCOPE) endif() set(TICKCOUTER_C_FILE ${c_shared_dir}/adapters/tickcounter_win32.c PARENT_SCOPE) if (${use_default_uuid}) set(UNIQUEID_C_FILE ${c_shared_dir}/adapters/uniqueid_stub.c PARENT_SCOPE) else() set(UNIQUEID_C_FILE ${c_shared_dir}/adapters/uniqueid_win32.c PARENT_SCOPE) endif() set(DNS_C_FILE ${c_shared_dir}/src/dns_resolver_sync.c PARENT_SCOPE) else() set(XLOGGING_C_FILE ${c_shared_dir}/src/xlogging.c PARENT_SCOPE) set(LOGGING_C_FILE ${c_shared_dir}/src/consolelogger.c PARENT_SCOPE) set(LOGGING_H_FILE ${c_shared_dir}/inc/azure_c_shared_utility/consolelogger.h PARENT_SCOPE) if(${use_condition}) set(CONDITION_C_FILE ${c_shared_dir}/adapters/condition_pthreads.c PARENT_SCOPE) endif() if (${use_builtin_httpapi}) set(HTTP_C_FILE ${c_shared_dir}/adapters/httpapi_compact.c PARENT_SCOPE) else() set(HTTP_C_FILE ${c_shared_dir}/adapters/httpapi_curl.c PARENT_SCOPE) endif() set(LOCK_C_FILE ${c_shared_dir}/adapters/lock_pthreads.c PARENT_SCOPE) if (use_applessl) set(PLATFORM_C_FILE ${c_shared_dir}/pal/ios-osx/platform_appleios.c PARENT_SCOPE) else() set(PLATFORM_C_FILE ${c_shared_dir}/adapters/platform_linux.c PARENT_SCOPE) endif() if (${use_socketio}) set(SOCKETIO_C_FILE ${c_shared_dir}/adapters/socketio_berkeley.c PARENT_SCOPE) endif() set(THREAD_C_FILE ${c_shared_dir}/adapters/threadapi_pthreads.c PARENT_SCOPE) set(TICKCOUTER_C_FILE ${c_shared_dir}/adapters/tickcounter_linux.c PARENT_SCOPE) if (${use_default_uuid}) set(UNIQUEID_C_FILE ${c_shared_dir}/adapters/uniqueid_stub.c PARENT_SCOPE) elseif(AZSPHERE) set(UNIQUEID_C_FILE ${c_shared_dir}/adapters/uniqueid_azsphere.c PARENT_SCOPE) else() set(UNIQUEID_C_FILE ${c_shared_dir}/adapters/uniqueid_linux.c PARENT_SCOPE) endif() if(${use_c_ares}) set(DNS_C_FILE ${c_shared_dir}/src/dns_resolver_ares.c PARENT_SCOPE) else() set(DNS_C_FILE ${c_shared_dir}/src/dns_resolver_sync.c PARENT_SCOPE) endif() if(UNIX AND NOT MACOSX) set(RANDOM_C_FILE ${c_shared_dir}/adapters/random_posix.c PARENT_SCOPE) else() set(RANDOM_C_FILE ${c_shared_dir}/adapters/random_stub.c PARENT_SCOPE) endif() endif() if(WIN32 OR MACOSX OR LINUX) set (ENVIRONMENT_VARIABLE_C_FILE ${c_shared_dir}/adapters/envvariable.c PARENT_SCOPE) endif() endfunction(set_platform_files)