FEXLinuxTests: Build 32-bit and 64-bit test variants separately

This allows to use different toolchain files for each and it reduces
build system repetition in test target setup.

The "tests-32" directories has been integrated into the "tests" one. Tests
that should only run on 32-bit are detected by their filename ending with
".32.cpp" now.
This commit is contained in:
Tony Wasserka committed 2022-09-16 11:24:18 +02:00
1 parent acddc0323b
commit e4c84542ea
4 files changed
+56 -72

No files matched your search

+40 -35
View File
@@ -6,26 +6,33 @@ ExternalProject_Add(FEXLinuxTests
CMAKE_ARGS
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
"-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${X86_TOOLCHAIN_FILE}"
"-DBITNESS=64"
INSTALL_COMMAND ""
BUILD_ALWAYS ON
)
ExternalProject_Add(FEXLinuxTests_32
PREFIX FEXLinuxTests_32
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests-32"
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/FEXLinuxTests_32"
CMAKE_ARGS
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
"-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${X86_TOOLCHAIN_FILE}"
"-DBITNESS=32"
INSTALL_COMMAND ""
BUILD_ALWAYS ON
)
# this kind of sucks, but reglob
file(GLOB_RECURSE TESTS CONFIGURE_DEPENDS tests/*.cpp)
file(GLOB_RECURSE TESTS_32 CONFIGURE_DEPENDS tests-32/*.cpp)
file(GLOB_RECURSE TESTS_32_ONLY CONFIGURE_DEPENDS tests/*.32.cpp)
function(AddTests Tests BinDirectory BitnessList)
set(TESTS_32 ${TESTS})
# Apply bitness-specific exclude lists
list(REMOVE_ITEM TESTS ${TESTS_32_ONLY})
function(AddTests Tests BinDirectory Bitness)
foreach(TEST ${Tests})
get_filename_component(TEST_NAME ${TEST} NAME_WLE)
@@ -48,47 +55,45 @@ function(AddTests Tests BinDirectory BitnessList)
endif()
foreach(VARIATION ${VARIATIONS})
foreach(BITNESS ${BitnessList})
string(REGEX REPLACE ":" ";" VARIATION "${VARIATION}")
list(GET VARIATION 0 VARIATION_NAME)
list(GET VARIATION 1 VARIATION_ARG)
set(BIN_PATH "${CMAKE_CURRENT_BINARY_DIR}/${BinDirectory}/${TEST_NAME}.${BITNESS}")
string(REGEX REPLACE ":" ";" VARIATION "${VARIATION}")
list(GET VARIATION 0 VARIATION_NAME)
list(GET VARIATION 1 VARIATION_ARG)
set(BIN_PATH "${CMAKE_CURRENT_BINARY_DIR}/${BinDirectory}/${TEST_NAME}.${Bitness}")
set(TEST_CASE "${VARIATION_NAME}.${BITNESS}")
set(TEST_CASE "${VARIATION_NAME}.${Bitness}")
# Add jit test case
add_test(NAME "${TEST_CASE}.jit.flt"
# Add jit test case
add_test(NAME "${TEST_CASE}.jit.flt"
COMMAND "python3" "${CMAKE_SOURCE_DIR}/Scripts/guest_test_runner.py"
"${CMAKE_CURRENT_SOURCE_DIR}/Known_Failures"
"${CMAKE_CURRENT_SOURCE_DIR}/Expected_Output"
"${CMAKE_CURRENT_SOURCE_DIR}/Disabled_Tests"
"${CMAKE_CURRENT_SOURCE_DIR}/Flake_Tests"
"${TEST_CASE}"
"guest"
"$<TARGET_FILE:FEXLoader>"
"--no-silent" "-c" "irjit" "-n" "500" "--"
"${BIN_PATH}"
"${VARIATION_ARG}")
if (_M_X86_64)
# Add host test case
add_test(NAME "${TEST_CASE}.host.flt"
COMMAND "python3" "${CMAKE_SOURCE_DIR}/Scripts/guest_test_runner.py"
"${CMAKE_CURRENT_SOURCE_DIR}/Known_Failures"
"${CMAKE_CURRENT_SOURCE_DIR}/Known_Failures_Host"
"${CMAKE_CURRENT_SOURCE_DIR}/Expected_Output"
"${CMAKE_CURRENT_SOURCE_DIR}/Disabled_Tests"
"${CMAKE_CURRENT_SOURCE_DIR}/Disabled_Tests_Host"
"${CMAKE_CURRENT_SOURCE_DIR}/Flake_Tests"
"${TEST_CASE}"
"guest"
"$<TARGET_FILE:FEXLoader>"
"--no-silent" "-c" "irjit" "-n" "500" "--"
"host"
"${BIN_PATH}"
"${VARIATION_ARG}")
if (_M_X86_64)
# Add host test case
add_test(NAME "${TEST_CASE}.host.flt"
COMMAND "python3" "${CMAKE_SOURCE_DIR}/Scripts/guest_test_runner.py"
"${CMAKE_CURRENT_SOURCE_DIR}/Known_Failures_Host"
"${CMAKE_CURRENT_SOURCE_DIR}/Expected_Output"
"${CMAKE_CURRENT_SOURCE_DIR}/Disabled_Tests_Host"
"${CMAKE_CURRENT_SOURCE_DIR}/Flake_Tests"
"${TEST_CASE}"
"host"
"${BIN_PATH}"
"${VARIATION_ARG}")
endif()
endforeach()
endif()
endforeach()
endforeach()
endfunction()
AddTests("${TESTS}" "FEXLinuxTests" "32;64")
AddTests("${TESTS_32}" "FEXLinuxTests_32" "32")
AddTests("${TESTS}" "FEXLinuxTests" 64)
AddTests("${TESTS_32}" "FEXLinuxTests_32" 32)
execute_process(COMMAND "nproc" OUTPUT_VARIABLE CORES)
string(STRIP ${CORES} CORES)
@@ -99,7 +104,7 @@ add_custom_target(
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
USES_TERMINAL
COMMAND "ctest" "--timeout" "30" "-j${CORES}" "-R" "\.*\.jit\.flt$$" "--output-on-failure"
DEPENDS FEXLinuxTests FEXLoader
DEPENDS FEXLinuxTests FEXLinuxTests_32 FEXLoader
)
# Only host
@@ -108,7 +113,7 @@ add_custom_target(
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
USES_TERMINAL
COMMAND "ctest" "--timeout" "30" "-j${CORES}" "-R" "\.*\.host\.flt$$" "--output-on-failure"
DEPENDS FEXLinuxTests
DEPENDS FEXLinuxTests FEXLinuxTests_32
)
# Both host and emulated
@@ -117,5 +122,5 @@ add_custom_target(
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
USES_TERMINAL
COMMAND "ctest" "--timeout" "30" "-j${CORES}" "-R" "\.*\.flt$$" "--output-on-failure"
DEPENDS FEXLinuxTests FEXLoader
DEPENDS FEXLinuxTests FEXLinuxTests_32 FEXLoader
)
@@ -1,18 +0,0 @@
cmake_minimum_required(VERSION 3.14)
project(FEXLinuxTests_32)
set(CMAKE_CXX_STANDARD 17)
unset (CMAKE_C_FLAGS)
unset (CMAKE_CXX_FLAGS)
set(GENERATE_GUEST_INSTALL_TARGETS TRUE)
file(GLOB_RECURSE TESTS CONFIGURE_DEPENDS *.cpp)
foreach(TEST ${TESTS})
get_filename_component(TEST_NAME ${TEST} NAME_WLE)
add_executable(${TEST_NAME}.32 ${TEST})
target_compile_options(${TEST_NAME}.32 PRIVATE -m32)
target_link_options(${TEST_NAME}.32 PRIVATE -m32)
endforeach()
+16 -19
View File
@@ -9,34 +9,31 @@ unset (CMAKE_CXX_FLAGS)
set(GENERATE_GUEST_INSTALL_TARGETS TRUE)
file(GLOB_RECURSE TESTS CONFIGURE_DEPENDS *.cpp)
if(BITNESS EQUAL 64)
file(GLOB_RECURSE TESTS_32_ONLY CONFIGURE_DEPENDS *.32.cpp)
list(REMOVE_ITEM TESTS ${TESTS_32_ONLY})
endif()
foreach(TEST ${TESTS})
get_filename_component(TEST_NAME ${TEST} NAME_WLE)
add_executable(${TEST_NAME}.32 ${TEST})
target_compile_options(${TEST_NAME}.32 PRIVATE -m32)
target_link_options(${TEST_NAME}.32 PRIVATE -m32)
add_executable(${TEST_NAME}.64 ${TEST})
add_executable(${TEST_NAME}.${BITNESS} ${TEST})
if(BITNESS EQUAL 32)
target_compile_options(${TEST_NAME}.${BITNESS} PRIVATE -m32)
target_link_options(${TEST_NAME}.${BITNESS} PRIVATE -m32)
endif()
endforeach()
target_link_libraries(pthread_cancel.32 PRIVATE pthread)
target_link_libraries(pthread_cancel.64 PRIVATE pthread)
target_link_libraries(pthread_cancel.${BITNESS} PRIVATE pthread)
target_link_options(smc-1-dynamic.32 PRIVATE -z execstack)
target_link_options(smc-1-dynamic.64 PRIVATE -z execstack)
target_link_options(smc-1-dynamic.${BITNESS} PRIVATE -z execstack)
target_link_libraries(smc-mt-1.32 PRIVATE pthread)
target_link_libraries(smc-mt-1.64 PRIVATE pthread)
target_link_libraries(smc-mt-1.${BITNESS} PRIVATE pthread)
target_link_libraries(smc-mt-2.32 PRIVATE pthread)
target_link_libraries(smc-mt-2.64 PRIVATE pthread)
target_link_libraries(smc-mt-2.${BITNESS} PRIVATE pthread)
target_link_libraries(smc-shared-1.32 PRIVATE rt pthread)
target_link_libraries(smc-shared-1.64 PRIVATE rt pthread)
target_link_libraries(smc-shared-1.${BITNESS} PRIVATE rt pthread)
target_link_libraries(smc-shared-2.32 PRIVATE rt pthread)
target_link_libraries(smc-shared-2.64 PRIVATE rt pthread)
target_link_libraries(smc-shared-2.${BITNESS} PRIVATE rt pthread)
target_link_libraries(timer-sigev-thread.32 PRIVATE rt pthread)
target_link_libraries(timer-sigev-thread.64 PRIVATE rt pthread)
target_link_libraries(timer-sigev-thread.${BITNESS} PRIVATE rt pthread)