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: Bulding with the fixture extension.") 53endif() 54 55if(${UNITY_EXTENSION_MEMORY}) 56 message(STATUS "Unity: Bulding 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 $<BUILD_INTERFACE:$<$<BOOL:${UNITY_EXTENSION_MEMORY_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/memory/src>> 80 $<BUILD_INTERFACE:$<$<BOOL:${UNITY_EXTENSION_FIXTURE_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/fixture/src>> 81) 82 83set(${PROJECT_NAME}_PUBLIC_HEADERS 84 src/unity.h 85 src/unity_internals.h 86 $<$<BOOL:${UNITY_EXTENSION_FIXTURE_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/fixture/src/unity_fixture.h> 87 $<$<BOOL:${UNITY_EXTENSION_FIXTURE_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/fixture/src/unity_fixture_internals.h> 88 $<$<BOOL:${UNITY_EXTENSION_MEMORY_ENABLED}>:${CMAKE_CURRENT_SOURCE_DIR}/extras/memory/src/unity_memory.h> 89) 90 91set_target_properties(${PROJECT_NAME} 92 PROPERTIES 93 C_STANDARD 11 94 C_STANDARD_REQUIRED ON 95 C_EXTENSIONS OFF 96 PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HEADERS}" 97 EXPORT_NAME framework 98) 99 100target_compile_options(${PROJECT_NAME} 101 PRIVATE 102 $<$<C_COMPILER_ID:Clang>:-Wcast-align 103 -Wcast-qual 104 -Wconversion 105 -Wexit-time-destructors 106 -Wglobal-constructors 107 -Wmissing-noreturn 108 -Wmissing-prototypes 109 -Wno-missing-braces 110 -Wold-style-cast 111 -Wshadow 112 -Wweak-vtables 113 -Werror 114 -Wall> 115 $<$<C_COMPILER_ID:GNU>:-Waddress 116 -Waggregate-return 117 -Wformat-nonliteral 118 -Wformat-security 119 -Wformat 120 -Winit-self 121 -Wmissing-declarations 122 -Wmissing-include-dirs 123 -Wno-multichar 124 -Wno-parentheses 125 -Wno-type-limits 126 -Wno-unused-parameter 127 -Wunreachable-code 128 -Wwrite-strings 129 -Wpointer-arith 130 -Werror 131 -Wall> 132 $<$<C_COMPILER_ID:MSVC>:/Wall> 133) 134 135write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake 136 VERSION ${PROJECT_VERSION} 137 COMPATIBILITY SameMajorVersion 138) 139 140## Target installation 141install(TARGETS ${PROJECT_NAME} 142 EXPORT ${PROJECT_NAME}Targets 143 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 144 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 145 PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} 146 COMPONENT library 147) 148 149## Target's cmake files: targets export 150install(EXPORT ${PROJECT_NAME}Targets 151 NAMESPACE ${PROJECT_NAME}:: 152 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 153) 154 155## Target's cmake files: config and version config for find_package() 156install(FILES ${PROJECT_NAME}Config.cmake 157 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake 158 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} 159) 160