GLdc/tests/CMakeLists.txt
2026-06-22 09:05:44 +01:00

62 lines
2.0 KiB
CMake

FILE(GLOB GL_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/test_*.h)
# The allocator tests are host-side unit tests for the standalone block
# allocator: they assert exact heap addresses and allocate multi-megabyte
# scratch pools, neither of which is meaningful (or safe) under KOS. Exclude
# them from the Dreamcast build; the allocator is still exercised on hardware
# indirectly through the texture tests.
if(PLATFORM_DREAMCAST)
list(REMOVE_ITEM GL_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/test_allocator.h)
endif()
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
SET(TEST_GENERATOR_BIN ${CMAKE_SOURCE_DIR}/tools/test_generator.py)
SET(TEST_MAIN_FILENAME ${CMAKE_CURRENT_BINARY_DIR}/main.cpp)
ADD_CUSTOM_COMMAND(
OUTPUT ${TEST_MAIN_FILENAME}
COMMAND ${TEST_GENERATOR_BIN} --output ${TEST_MAIN_FILENAME} ${TEST_FILES} ${GL_TESTS}
DEPENDS ${TEST_FILES} ${GL_TESTS} ${TEST_GENERATOR_BIN}
)
add_executable(gldc_tests ${TEST_FILES} ${TEST_SOURCES} ${TEST_MAIN_FILENAME})
target_link_libraries(gldc_tests GL)
# Directory holding the committed golden reference images.
#
# On the desktop the tests read/write them straight from the source tree. On
# the Dreamcast the goldens are read through the dcload host-filesystem mount
# (KOS mounts it at /pc), so we point at /pc/goldens and copy the references
# next to the .elf so that running the emulator with `-C .` from the build
# directory exposes them as /pc/goldens.
if(PLATFORM_DREAMCAST)
set(GLDC_GOLDEN_DIR "/pc/goldens")
add_custom_command(
TARGET gldc_tests POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_SOURCE_DIR}/goldens
${CMAKE_CURRENT_BINARY_DIR}/goldens
COMMENT "Copying golden reference images next to gldc_tests.elf"
)
else()
set(GLDC_GOLDEN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/goldens")
endif()
target_compile_definitions(
gldc_tests PRIVATE
GLDC_GOLDEN_DIR="${GLDC_GOLDEN_DIR}"
)
if(NOT PLATFORM_DREAMCAST)
set_target_properties(
gldc_tests
PROPERTIES
COMPILE_OPTIONS "-m32"
LINK_OPTIONS "-m32"
)
endif()