CMakeLists.txt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. ###################################################################################
  2. # #
  3. # NAME: CMakeLists.txt #
  4. # #
  5. # AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
  6. # WRITTEN BY: Michael Brockus. #
  7. # #
  8. # License: MIT #
  9. # #
  10. ###################################################################################
  11. cmake_minimum_required(VERSION 3.12)
  12. # Read src/unity.h file and get project version from it
  13. set(UNITY_HEADER "src/unity.h")
  14. file(STRINGS "${UNITY_HEADER}" UNITY_HEADER_CONTENT
  15. REGEX "^#define UNITY_VERSION_(MAJOR|MINOR|BUILD) +[0-9]+$"
  16. )
  17. set(UNITY_HEADER_VERSION_MAJOR 0)
  18. set(UNITY_HEADER_VERSION_MINOR 0)
  19. set(UNITY_HEADER_VERSION_BUILD 0)
  20. foreach(VERSION_LINE IN LISTS UNITY_HEADER_CONTENT)
  21. foreach(VERSION_PART MAJOR MINOR BUILD)
  22. string(CONCAT REGEX_STRING "#define UNITY_VERSION_"
  23. "${VERSION_PART}"
  24. " +([0-9]+)"
  25. )
  26. if(VERSION_LINE MATCHES "${REGEX_STRING}")
  27. set(UNITY_HEADER_VERSION_${VERSION_PART} "${CMAKE_MATCH_1}")
  28. endif()
  29. endforeach()
  30. endforeach()
  31. project(unity
  32. VERSION ${UNITY_HEADER_VERSION_MAJOR}.${UNITY_HEADER_VERSION_MINOR}.${UNITY_HEADER_VERSION_BUILD}
  33. LANGUAGES C
  34. DESCRIPTION "C Unit testing framework."
  35. )
  36. # Options to Build With Extras -------------------------------------------------
  37. option(UNITY_EXTENSION_FIXTURE "Compiles Unity with the \"fixture\" extension." OFF)
  38. option(UNITY_EXTENSION_MEMORY "Compiles Unity with the \"memory\" extension." OFF)
  39. set(UNITY_EXTENSION_FIXTURE_ENABLED $<BOOL:${UNITY_EXTENSION_FIXTURE}>)
  40. set(UNITY_EXTENSION_MEMORY_ENABLED $<OR:${UNITY_EXTENSION_FIXTURE_ENABLED},$<BOOL:${UNITY_EXTENSION_MEMORY}>>)
  41. if(${UNITY_EXTENSION_FIXTURE})
  42. message(STATUS "Unity: Building with the fixture extension.")
  43. endif()
  44. if(${UNITY_EXTENSION_MEMORY})
  45. message(STATUS "Unity: Building with the memory extension.")
  46. endif()
  47. # Main target ------------------------------------------------------------------
  48. add_library(${PROJECT_NAME} STATIC)
  49. add_library(${PROJECT_NAME}::framework ALIAS ${PROJECT_NAME})
  50. # Includes ---------------------------------------------------------------------
  51. include(GNUInstallDirs)
  52. include(CMakePackageConfigHelpers)
  53. target_sources(${PROJECT_NAME}
  54. PRIVATE
  55. src/unity.c
  56. $<$<BOOL:${UNITY_EXTENSION_FIXTURE_ENABLED}>:extras/fixture/src/unity_fixture.c>
  57. $<$<BOOL:${UNITY_EXTENSION_MEMORY_ENABLED}>:extras/memory/src/unity_memory.c>
  58. )
  59. target_include_directories(${PROJECT_NAME}
  60. PUBLIC
  61. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
  62. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
  63. $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}>
  64. $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  65. $<BUILD_INTERFACE:$<$<BOOL:${UNITY_EXTENSION_MEMORY_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/memory/src>>
  66. $<BUILD_INTERFACE:$<$<BOOL:${UNITY_EXTENSION_FIXTURE_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/fixture/src>>
  67. )
  68. set(${PROJECT_NAME}_PUBLIC_HEADERS
  69. src/unity.h
  70. src/unity_internals.h
  71. $<$<BOOL:${UNITY_EXTENSION_FIXTURE_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/fixture/src/unity_fixture.h>
  72. $<$<BOOL:${UNITY_EXTENSION_FIXTURE_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/fixture/src/unity_fixture_internals.h>
  73. $<$<BOOL:${UNITY_EXTENSION_MEMORY_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/memory/src/unity_memory.h>
  74. )
  75. set_target_properties(${PROJECT_NAME}
  76. PROPERTIES
  77. C_STANDARD 11
  78. C_STANDARD_REQUIRED ON
  79. C_EXTENSIONS OFF
  80. PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HEADERS}"
  81. EXPORT_NAME framework
  82. )
  83. target_compile_options(${PROJECT_NAME}
  84. PRIVATE
  85. # Clang
  86. $<$<C_COMPILER_ID:Clang>:
  87. -Wcast-align
  88. -Wcast-qual
  89. -Wconversion
  90. -Wexit-time-destructors
  91. -Wglobal-constructors
  92. -Wmissing-noreturn
  93. -Wmissing-prototypes
  94. -Wno-missing-braces
  95. -Wold-style-cast
  96. -Wshadow
  97. -Wweak-vtables
  98. -Werror
  99. -Wall
  100. $<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,8.0.0>:-Wextra-semi-stmt>
  101. >
  102. # GCC
  103. $<$<C_COMPILER_ID:GNU>:
  104. -Waddress
  105. -Waggregate-return
  106. -Wformat-nonliteral
  107. -Wformat-security
  108. -Wformat
  109. -Winit-self
  110. -Wmissing-declarations
  111. -Wmissing-include-dirs
  112. -Wno-multichar
  113. -Wno-parentheses
  114. -Wno-type-limits
  115. -Wno-unused-parameter
  116. -Wunreachable-code
  117. -Wwrite-strings
  118. -Wpointer-arith
  119. -Werror
  120. -Wall
  121. >
  122. # MSVC
  123. $<$<C_COMPILER_ID:MSVC>:
  124. /Wall
  125. >
  126. )
  127. write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake
  128. VERSION ${PROJECT_VERSION}
  129. COMPATIBILITY SameMajorVersion
  130. )
  131. ## Target installation
  132. install(TARGETS ${PROJECT_NAME}
  133. EXPORT ${PROJECT_NAME}Targets
  134. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  135. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  136. PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
  137. COMPONENT library
  138. )
  139. ## Target's cmake files: targets export
  140. install(EXPORT ${PROJECT_NAME}Targets
  141. NAMESPACE ${PROJECT_NAME}::
  142. DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
  143. )
  144. ## Target's cmake files: config and version config for find_package()
  145. install(FILES ${PROJECT_NAME}Config.cmake
  146. ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
  147. DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
  148. )