CMakeLists.txt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #
  2. # Tests configuration
  3. #
  4. include(FetchContent)
  5. set(THREADS_PREFER_PTHREAD_FLAG ON)
  6. find_package(Threads REQUIRED)
  7. if(FIND_GTEST_PACKAGE)
  8. find_package(GTest REQUIRED)
  9. else()
  10. FetchContent_Declare(
  11. googletest
  12. GIT_REPOSITORY https://github.com/google/googletest.git
  13. GIT_TAG master
  14. GIT_SHALLOW 1
  15. )
  16. FetchContent_GetProperties(googletest)
  17. if(NOT googletest_POPULATED)
  18. FetchContent_Populate(googletest)
  19. set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
  20. add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
  21. endif()
  22. add_library(GTest::Main ALIAS gtest_main)
  23. endif()
  24. include_directories($<TARGET_PROPERTY:EnTT,INTERFACE_INCLUDE_DIRECTORIES>)
  25. add_compile_options($<TARGET_PROPERTY:EnTT,INTERFACE_COMPILE_OPTIONS>)
  26. function(SETUP_TARGET TARGET_NAME)
  27. set_target_properties(${TARGET_NAME} PROPERTIES CXX_EXTENSIONS OFF)
  28. target_link_libraries(${TARGET_NAME} PRIVATE EnTT)
  29. target_compile_options(
  30. ${TARGET_NAME}
  31. PRIVATE
  32. $<$<AND:$<CONFIG:Debug>,$<NOT:$<PLATFORM_ID:Windows>>>:-O0 -g -pedantic -Wall -Wshadow -fvisibility=hidden>
  33. $<$<AND:$<CONFIG:Release>,$<NOT:$<PLATFORM_ID:Windows>>>:-O2 -pedantic -Wall -Wshadow -fvisibility=hidden>
  34. $<$<AND:$<CONFIG:Debug>,$<PLATFORM_ID:Windows>>:/EHsc /W1>
  35. $<$<AND:$<CONFIG:Release>,$<PLATFORM_ID:Windows>>:/EHsc /W1 /O2>
  36. )
  37. endfunction()
  38. add_library(odr OBJECT odr.cpp)
  39. SETUP_TARGET(odr)
  40. function(SETUP_BASIC_TEST TEST_NAME TEST_SOURCES)
  41. add_executable(${TEST_NAME} $<TARGET_OBJECTS:odr> ${TEST_SOURCES})
  42. target_link_libraries(${TEST_NAME} PRIVATE GTest::Main Threads::Threads)
  43. SETUP_TARGET(${TEST_NAME})
  44. add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME})
  45. endfunction()
  46. function(SETUP_LIB_TEST TEST_NAME)
  47. add_library(_${TEST_NAME} SHARED lib/${TEST_NAME}/lib.cpp)
  48. SETUP_TARGET(_${TEST_NAME})
  49. SETUP_BASIC_TEST(lib_${TEST_NAME} lib/${TEST_NAME}/main.cpp)
  50. target_compile_definitions(_${TEST_NAME} PRIVATE ENTT_API_EXPORT ${ARGV1})
  51. target_compile_definitions(lib_${TEST_NAME} PRIVATE ENTT_API_IMPORT ${ARGV1})
  52. target_link_libraries(lib_${TEST_NAME} PRIVATE _${TEST_NAME})
  53. endfunction()
  54. function(SETUP_PLUGIN_TEST TEST_NAME)
  55. add_library(_${TEST_NAME} MODULE lib/${TEST_NAME}/plugin.cpp)
  56. SETUP_TARGET(_${TEST_NAME})
  57. SETUP_BASIC_TEST(lib_${TEST_NAME} lib/${TEST_NAME}/main.cpp)
  58. target_include_directories(_${TEST_NAME} PRIVATE ${cr_INCLUDE_DIR})
  59. target_include_directories(lib_${TEST_NAME} PRIVATE ${cr_INCLUDE_DIR})
  60. target_compile_definitions(lib_${TEST_NAME} PRIVATE NOMINMAX PLUGIN="$<TARGET_FILE:_${TEST_NAME}>" ${ARGV1})
  61. target_compile_definitions(_${TEST_NAME} PRIVATE NOMINMAX ${ARGV1})
  62. target_link_libraries(lib_${TEST_NAME} PRIVATE ${CMAKE_DL_LIBS})
  63. endfunction()
  64. # Test benchmark
  65. if(BUILD_BENCHMARK)
  66. SETUP_BASIC_TEST(benchmark benchmark/benchmark.cpp)
  67. endif()
  68. # Test lib
  69. if(BUILD_LIB)
  70. FetchContent_Declare(
  71. cr
  72. GIT_REPOSITORY https://github.com/fungos/cr.git
  73. GIT_TAG master
  74. GIT_SHALLOW 1
  75. )
  76. FetchContent_GetProperties(cr)
  77. if(NOT cr_POPULATED)
  78. FetchContent_Populate(cr)
  79. set(cr_INCLUDE_DIR ${cr_SOURCE_DIR})
  80. endif()
  81. SETUP_LIB_TEST(dispatcher)
  82. SETUP_LIB_TEST(emitter)
  83. SETUP_LIB_TEST(meta)
  84. SETUP_LIB_TEST(registry)
  85. SETUP_LIB_TEST(dispatcher_std ENTT_STANDARD_CPP)
  86. SETUP_LIB_TEST(emitter_std ENTT_STANDARD_CPP)
  87. SETUP_LIB_TEST(meta_std ENTT_STANDARD_CPP)
  88. SETUP_LIB_TEST(registry_std ENTT_STANDARD_CPP)
  89. SETUP_PLUGIN_TEST(dispatcher_plugin)
  90. SETUP_PLUGIN_TEST(emitter_plugin)
  91. SETUP_PLUGIN_TEST(meta_plugin)
  92. SETUP_PLUGIN_TEST(registry_plugin)
  93. SETUP_PLUGIN_TEST(dispatcher_plugin_std ENTT_STANDARD_CPP)
  94. SETUP_PLUGIN_TEST(emitter_plugin_std ENTT_STANDARD_CPP)
  95. SETUP_PLUGIN_TEST(meta_plugin_std ENTT_STANDARD_CPP)
  96. SETUP_PLUGIN_TEST(registry_plugin_std ENTT_STANDARD_CPP)
  97. endif()
  98. # Test snapshot
  99. if(BUILD_SNAPSHOT)
  100. FetchContent_Declare(
  101. cereal
  102. GIT_REPOSITORY https://github.com/USCiLab/cereal.git
  103. GIT_TAG v1.2.2
  104. GIT_SHALLOW 1
  105. )
  106. FetchContent_GetProperties(cereal)
  107. if(NOT cereal_POPULATED)
  108. FetchContent_Populate(cereal)
  109. set(cereal_INCLUDE_DIR ${cereal_SOURCE_DIR}/include)
  110. endif()
  111. SETUP_BASIC_TEST(cereal snapshot/snapshot.cpp)
  112. target_include_directories(cereal PRIVATE ${cereal_INCLUDE_DIR})
  113. endif()
  114. # Test core
  115. SETUP_BASIC_TEST(algorithm entt/core/algorithm.cpp)
  116. SETUP_BASIC_TEST(family entt/core/family.cpp)
  117. SETUP_BASIC_TEST(hashed_string entt/core/hashed_string.cpp)
  118. SETUP_BASIC_TEST(ident entt/core/ident.cpp)
  119. SETUP_BASIC_TEST(monostate entt/core/monostate.cpp)
  120. SETUP_BASIC_TEST(type_info entt/core/type_info.cpp)
  121. SETUP_BASIC_TEST(type_traits entt/core/type_traits.cpp)
  122. SETUP_BASIC_TEST(utility entt/core/utility.cpp)
  123. # Test entity
  124. SETUP_BASIC_TEST(actor entt/entity/actor.cpp)
  125. SETUP_BASIC_TEST(entity entt/entity/entity.cpp)
  126. SETUP_BASIC_TEST(group entt/entity/group.cpp)
  127. SETUP_BASIC_TEST(helper entt/entity/helper.cpp)
  128. SETUP_BASIC_TEST(observer entt/entity/observer.cpp)
  129. SETUP_BASIC_TEST(registry entt/entity/registry.cpp)
  130. SETUP_BASIC_TEST(runtime_view entt/entity/runtime_view.cpp)
  131. SETUP_BASIC_TEST(snapshot entt/entity/snapshot.cpp)
  132. SETUP_BASIC_TEST(sparse_set entt/entity/sparse_set.cpp)
  133. SETUP_BASIC_TEST(storage entt/entity/storage.cpp)
  134. SETUP_BASIC_TEST(view entt/entity/view.cpp)
  135. # Test locator
  136. SETUP_BASIC_TEST(locator entt/locator/locator.cpp)
  137. # Test meta
  138. SETUP_BASIC_TEST(meta entt/meta/meta.cpp)
  139. # Test process
  140. SETUP_BASIC_TEST(process entt/process/process.cpp)
  141. SETUP_BASIC_TEST(scheduler entt/process/scheduler.cpp)
  142. # Test resource
  143. SETUP_BASIC_TEST(resource entt/resource/resource.cpp)
  144. # Test signal
  145. SETUP_BASIC_TEST(delegate entt/signal/delegate.cpp)
  146. SETUP_BASIC_TEST(dispatcher entt/signal/dispatcher.cpp)
  147. SETUP_BASIC_TEST(emitter entt/signal/emitter.cpp)
  148. SETUP_BASIC_TEST(sigh entt/signal/sigh.cpp)