CMakeLists.txt 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # Create a static library for Catch2s main so that we can reduce
  2. # compiling time. Each unit test will link to this
  3. cmake_minimum_required(VERSION 3.13)
  4. ################################################################################
  5. # If the conan file exists, include it
  6. ################################################################################
  7. if( EXISTS ${PROJECT_BINARY_DIR}/conanbuildinfo.cmake )
  8. include(${PROJECT_BINARY_DIR}/conanbuildinfo.cmake)
  9. conan_basic_setup(NO_OUTPUT_DIRS TARGETS)
  10. else()
  11. message("")
  12. message("")
  13. message("*************WARNING******************************")
  14. message("Could Not find ${PROJECT_BINARY_DIR}/conanbuildinfo.cmake.")
  15. message("Cannot build unit tests. ")
  16. message("Execute the following to build the unit tests")
  17. message(" cd ${PROJECT_BINARY_DIR}")
  18. message(" conan install ${PROJECT_SOURCE_DIR}")
  19. message("**************************************************")
  20. message("")
  21. message("")
  22. return()
  23. endif()
  24. ################################################################################
  25. add_library(${PROJECT_NAME}-catchmain STATIC ${CMAKE_CURRENT_SOURCE_DIR}/catch-main.cpp)
  26. target_include_directories(${PROJECT_NAME}-catchmain PUBLIC third_party)
  27. target_compile_features(${PROJECT_NAME}-catchmain PUBLIC cxx_std_17)
  28. target_link_libraries( ${PROJECT_NAME}-catchmain PUBLIC CONAN_PKG::catch2)
  29. set_coverage_flags(${PROJECT_NAME}-catchmain)
  30. get_filename_component(folder_name ${CMAKE_CURRENT_SOURCE_DIR} NAME)
  31. string(REPLACE " " "_" folder_name ${folder_name})
  32. enable_testing()
  33. find_package(Threads REQUIRED)
  34. file(GLOB files "unit-*.cpp")
  35. foreach(file ${files})
  36. # Replace any files named test_XXXXX with XXXX
  37. get_filename_component(file_basename ${file} NAME_WE)
  38. string(REGEX REPLACE "unit-([^$]+)" "\\1" testcase ${file_basename})
  39. set(FILE_SUFFIX_NAME ${testcase} )
  40. set(EXE_NAME unit-${FILE_SUFFIX_NAME} )
  41. set(TEST_NAME test-${FILE_SUFFIX_NAME} )
  42. set(SRC_NAME unit-${FILE_SUFFIX_NAME}.cpp )
  43. set(exeCmd ${EXE_NAME} )
  44. set(envVar "" )
  45. add_executable( ${EXE_NAME} ${SRC_NAME} )
  46. target_link_libraries( ${EXE_NAME}
  47. PUBLIC
  48. ${UNIT_TEST_LINK_TARGETS}
  49. ${LINKED_TARGETS})
  50. target_link_libraries( ${EXE_NAME}
  51. PRIVATE
  52. -lstdc++fs
  53. ${PROJECT_NAME}-catchmain
  54. ${PROJECT_NAME}
  55. Threads::Threads
  56. CONAN_PKG::nlohmann_json
  57. CONAN_PKG::glm
  58. CONAN_PKG::stb)
  59. target_compile_definitions(${EXE_NAME}
  60. PRIVATE
  61. CMAKE_SOURCE_DIR="${CMAKE_SOURCE_DIR}")
  62. add_test( NAME ${TEST_NAME}
  63. COMMAND ${exeCmd}
  64. )
  65. set_tests_properties(${TEST_NAME}
  66. PROPERTIES
  67. ENVIRONMENT
  68. "${envVar}")
  69. message("--------------------------------------------------")
  70. message("Unit Test Added: ${TEST_NAME}")
  71. message("--------------------------------------------------")
  72. message("Souce File : ${SRC_NAME}")
  73. message("Working Directory: ${CMAKE_CURRENT_BINARY_DIR}")
  74. message("Env Variables : ${envVar}")
  75. message("Command : ${exeCmd}")
  76. #set_coverage_flags(${EXE_NAME})
  77. #set_project_warnings(${EXE_NAME})
  78. endforeach()
  79. return()