Skip to content

Commit

Permalink
Add support for building the tests with CMake
Browse files Browse the repository at this point in the history
* Requires a present bake repository in test/
  • Loading branch information
Naios committed Sep 17, 2023
1 parent ca73ed2 commit ee66fa6
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 0 deletions.
6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ project(flecs LANGUAGES C)
option(FLECS_STATIC "Build static flecs lib" ON)
option(FLECS_SHARED "Build shared flecs lib" ON)
option(FLECS_PIC "Compile static flecs lib with position independent code (PIC)" ON)
option(FLECS_TESTS "Build flecs tests" OFF)

include(cmake/target_default_compile_warnings.cmake)
include(cmake/target_default_compile_options.cmake)
Expand Down Expand Up @@ -69,6 +70,11 @@ if(FLECS_STATIC)
target_compile_definitions(flecs_static PUBLIC flecs_STATIC)
endif()

if(FLECS_TESTS)
enable_testing()
add_subdirectory(test)
endif()

message(STATUS "Targets: ${FLECS_TARGETS}")

# define the install steps
Expand Down
1 change: 1 addition & 0 deletions test/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bake/
79 changes: 79 additions & 0 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
project(flecs_tests LANGUAGES C CXX)

if(NOT BAKE_DIRECTORY)
set(BAKE_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/bake")
endif()

if(NOT IS_DIRECTORY "${BAKE_DIRECTORY}")
message(FATAL_ERROR "The CMake tests require a bake repository "
"at '${BAKE_DIRECTORY}'.")
endif()

macro(add_flecs_test DIRECTORY)
get_filename_component(TEST_NAME_WE ${DIRECTORY} NAME_WE)

file(
GLOB_RECURSE TEST_SOURCES CONFIGURE_DEPENDS
LIST_DIRECTORIES false
"${DIRECTORY}/*.cpp" "${DIRECTORY}/*.c" "${DIRECTORY}/*.h")

foreach(CURRENT_FLECS_TARGET IN LISTS FLECS_TARGETS)
set(TEST_NAME "test_${TEST_NAME_WE}_${CURRENT_FLECS_TARGET}")
set(CTEST_NAME "flecs_${TEST_NAME_WE}_test_${CURRENT_FLECS_TARGET}")

message(STATUS "Adding test ${TEST_NAME}")

add_executable("${TEST_NAME}" ${TEST_SOURCES})

target_link_libraries("${TEST_NAME}" PUBLIC bake_base
${CURRENT_FLECS_TARGET})

if(IS_DIRECTORY "${DIRECTORY}/include")
target_include_directories(${TEST_NAME} PUBLIC "${DIRECTORY}/include")
endif()

set_target_properties(
${TEST_NAME}
PROPERTIES VS_DEBUGGER_COMMAND_ARGUMENTS "-j 1"
VS_DEBUGGER_ENVIRONMENT
"BAKE_TEST_INPLACE=1\nBAKE_VERBOSITY=OK")

add_test(NAME ${CTEST_NAME} COMMAND $<TARGET_FILE:${TEST_NAME}>)

endforeach()
endmacro()

# Polyfill for bake
file(
GLOB_RECURSE BAKE_SOURCES CONFIGURE_DEPENDS
LIST_DIRECTORIES false
"${BAKE_DIRECTORY}/src/*.c"
"${BAKE_DIRECTORY}/src/*.h"
"${BAKE_DIRECTORY}/drivers/test/src/*.c"
"${BAKE_DIRECTORY}/drivers/test/src/*.h"
"${BAKE_DIRECTORY}/util/src/*.c"
"${BAKE_DIRECTORY}/util/src/*.h")

if(WIN32)
list(FILTER BAKE_SOURCES EXCLUDE REGEX "src/posix")
else()
list(FILTER BAKE_SOURCES EXCLUDE REGEX "src/win")
endif()

add_library(bake_base SHARED ${BAKE_SOURCES})
target_include_directories(
bake_base PUBLIC "${BAKE_DIRECTORY}/include" "${BAKE_DIRECTORY}/util/include"
"${BAKE_DIRECTORY}/drivers/test/include")
target_compile_definitions(
bake_base
PUBLIC __BAKE__=1
PRIVATE bake_test_EXPORTS=1 UT_IMPL=1)

if(WIN32)
target_link_libraries(bake_base PUBLIC Dbghelp Shlwapi Ws2_32)
endif()

add_flecs_test("${CMAKE_CURRENT_LIST_DIR}/addons")
add_flecs_test("${CMAKE_CURRENT_LIST_DIR}/api")
add_flecs_test("${CMAKE_CURRENT_LIST_DIR}/collections")
add_flecs_test("${CMAKE_CURRENT_LIST_DIR}/cpp_api")

0 comments on commit ee66fa6

Please sign in to comment.