tools/corrosion/test/ConfigureAndBuild.cmake
branchtransitional_engine
changeset 16021 6a3dc15b78b9
child 16038 d903f8d2395a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/corrosion/test/ConfigureAndBuild.cmake	Wed Aug 28 15:31:51 2024 +0200
@@ -0,0 +1,114 @@
+# CMake script to configure and build a test project
+
+set(TEST_ARG_LIST)
+
+# Expect actual arguments to start at index 3 (cmake -P <script_name>)
+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()
+
+