# CMake script to configure and build a test project set(TEST_ARG_LIST) # Expect actual arguments to start at index 3 (cmake -P ) foreach(ARG_INDEX RANGE 3 ${CMAKE_ARGC}) list(APPEND TEST_ARG_LIST "${CMAKE_ARGV${ARG_INDEX}}") endforeach() set(options "USE_INSTALLED_CORROSION") set(oneValueArgs SOURCE_DIR BINARY_DIR GENERATOR GENERATOR_PLATFORM RUST_TOOLCHAIN CARGO_TARGET C_COMPILER CXX_COMPILER SYSTEM_NAME EXTERNAL_CORROSION_GENERATOR CARGO_PROFILE ) set(multiValueArgs "PASS_THROUGH_ARGS") cmake_parse_arguments(TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${TEST_ARG_LIST} ) if(TEST_CARGO_TARGET) set(TEST_Rust_CARGO_TARGET "-DRust_CARGO_TARGET=${TEST_CARGO_TARGET}") endif() if(TEST_USE_INSTALLED_CORROSION) set(TEST_CORROSION_INSTALL "-DCORROSION_TESTS_FIND_CORROSION=ON") endif() if(TEST_GENERATOR_PLATFORM) set(TEST_GENERATOR_PLATFORM "-A${TEST_GENERATOR_PLATFORM}") endif() if(TEST_C_COMPILER) set(TEST_C_COMPILER "-DCMAKE_C_COMPILER=${TEST_C_COMPILER}") endif() if(TEST_CXX_COMPILER) set(TEST_CXX_COMPILER "-DCMAKE_CXX_COMPILER=${TEST_CXX_COMPILER}") endif() if(TEST_SYSTEM_NAME) set(TEST_SYSTEM_NAME "-DCMAKE_SYSTEM_NAME=${TEST_SYSTEM_NAME}") endif() if(TEST_EXTERNAL_CORROSION_GENERATOR) set(TEST_EXTERNAL_CORROSION_GENERATOR "-DCORROSION_GENERATOR_EXECUTABLE=${TEST_EXTERNAL_CORROSION_GENERATOR}" ) endif() if(TEST_CARGO_PROFILE) set(TEST_CARGO_PROFILE "-DCARGO_PROFILE=${TEST_CARGO_PROFILE}") endif() # Remove old binary directory file(REMOVE_RECURSE "${TEST_BINARY_DIR}") file(MAKE_DIRECTORY "${TEST_BINARY_DIR}") message(STATUS "TEST_BINARY_DIRECTORY: ${TEST_BINARY_DIR}") execute_process( COMMAND "${CMAKE_COMMAND}" "-G${TEST_GENERATOR}" "-DRust_TOOLCHAIN=${TEST_RUST_TOOLCHAIN}" --log-level Debug ${TEST_Rust_CARGO_TARGET} ${TEST_CORROSION_INSTALL} ${TEST_GENERATOR_PLATFORM} ${TEST_C_COMPILER} ${TEST_CXX_COMPILER} ${TEST_SYSTEM_NAME} ${TEST_EXTERNAL_CORROSION_GENERATOR} ${TEST_CARGO_PROFILE} ${TEST_PASS_THROUGH_ARGS} -S "${TEST_SOURCE_DIR}" -B "${TEST_BINARY_DIR}" COMMAND_ECHO STDOUT RESULT_VARIABLE EXIT_CODE ) if (NOT "${EXIT_CODE}" EQUAL 0) message(FATAL_ERROR "Configure step failed. Exit code: `${EXIT_CODE}`") endif() if ("${TEST_GENERATOR}" STREQUAL "Ninja Multi-Config" OR "${TEST_GENERATOR}" MATCHES "Visual Studio" ) foreach(config Debug Release RelWithDebInfo) execute_process( COMMAND "${CMAKE_COMMAND}" --build "${TEST_BINARY_DIR}" --config "${config}" COMMAND_ECHO STDOUT RESULT_VARIABLE EXIT_CODE ) if (NOT "${EXIT_CODE}" EQUAL 0) message(FATAL_ERROR "Build step failed for config `${config}`. " "Exit code: `${EXIT_CODE}`") endif() endforeach() else() execute_process( COMMAND "${CMAKE_COMMAND}" --build "${TEST_BINARY_DIR}" COMMAND_ECHO STDOUT RESULT_VARIABLE EXIT_CODE ) if (NOT "${EXIT_CODE}" EQUAL 0) message(FATAL_ERROR "Build step failed. Exit code: `${EXIT_CODE}`") endif() endif()