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