CMakeLists.txt 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. include(FetchContent)
  2. include(CTest)
  3. find_program(
  4. RUBY_EXECUTABLE
  5. NAME
  6. ruby
  7. PATHS ENV
  8. PATH
  9. REQUIRED)
  10. if(MSVC)
  11. message(STATUS "MSVC environment")
  12. find_file(
  13. MSVC_DIRENT
  14. "dirent.h"
  15. REQUIRED)
  16. message(STATUS "MSVC_DIRENT: ${MSVC_DIRENT}")
  17. get_filename_component(
  18. MSVC_DIRENT_INCLUDE_DIR
  19. ${MSVC_DIRENT}
  20. DIRECTORY)
  21. message(STATUS "MSVC_DIRENT_INCLUDE_DIR: ${MSVC_DIRENT_INCLUDE_DIR}")
  22. include_directories(${MSVC_DIRENT_INCLUDE_DIR})
  23. endif()
  24. set(FETCHCONTENT_QUIET OFF)
  25. FetchContent_Declare(
  26. unity
  27. GIT_REPOSITORY "https://github.com/throwtheswitch/unity.git"
  28. GIT_PROGRESS TRUE
  29. PATCH_COMMAND ${CMAKE_COMMAND} -E copy
  30. ${CMAKE_CURRENT_LIST_DIR}/unity_config.h ./src/)
  31. FetchContent_MakeAvailable(unity)
  32. target_compile_definitions(unity PUBLIC UNITY_INCLUDE_CONFIG_H)
  33. function(create_test_runner)
  34. set(options)
  35. set(oneValueArgs NAME)
  36. set(multiValueArgs)
  37. cmake_parse_arguments(
  38. TEST_RUNNER
  39. "${options}"
  40. "${oneValueArgs}"
  41. "${multiValueArgs}"
  42. ${ARGN})
  43. message(STATUS "Creating test_${TEST_RUNNER_NAME}")
  44. add_custom_command(
  45. OUTPUT test_${TEST_RUNNER_NAME}_runner.c
  46. COMMAND
  47. ${RUBY_EXECUTABLE} ${unity_SOURCE_DIR}/auto/generate_test_runner.rb
  48. ${CMAKE_CURRENT_SOURCE_DIR}/test_${TEST_RUNNER_NAME}.c
  49. test_${TEST_RUNNER_NAME}_runner.c
  50. DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/test_${TEST_RUNNER_NAME}.c
  51. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  52. BYPRODUCTS test_${TEST_RUNNER_NAME}_runner.c)
  53. add_executable(test_${TEST_RUNNER_NAME} test_${TEST_RUNNER_NAME}.c
  54. test_${TEST_RUNNER_NAME}_runner.c)
  55. # Prevent MSVC from creating Debug or Release subdirectories for test
  56. # executables
  57. set_target_properties(
  58. test_${TEST_RUNNER_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
  59. ${CMAKE_CURRENT_BINARY_DIR}/$<0:>)
  60. foreach(TARGET_TYPE ${TARGET_TYPES})
  61. # if BUILD_STATIC_LIBS=ON shared takes precedence
  62. target_link_libraries(
  63. test_${TEST_RUNNER_NAME}
  64. ${PROJECT_NAME}-${TARGET_TYPE}
  65. unity)
  66. endforeach()
  67. endfunction()
  68. file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/ressources
  69. DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  70. create_test_runner(NAME ${PROJECT_NAME})
  71. message(STATUS "Adding test test_${PROJECT_NAME}")
  72. add_test(
  73. NAME test_${PROJECT_NAME}
  74. COMMAND test_${PROJECT_NAME}
  75. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
  76. create_test_runner(NAME dictionary)
  77. message(STATUS "Adding test test_dictionary")
  78. add_test(
  79. NAME test_dictionary
  80. COMMAND test_dictionary
  81. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})