CMakeLists.txt (4343B)
1 # Main library 2 3 add_library(biscuit 4 # Source files 5 assembler.cpp 6 assembler_crypto.cpp 7 assembler_vector.cpp 8 code_buffer.cpp 9 cpuinfo.cpp 10 11 # Headers 12 "${PROJECT_SOURCE_DIR}/include/biscuit/assembler.hpp" 13 "${PROJECT_SOURCE_DIR}/include/biscuit/assert.hpp" 14 "${PROJECT_SOURCE_DIR}/include/biscuit/code_buffer.hpp" 15 "${PROJECT_SOURCE_DIR}/include/biscuit/csr.hpp" 16 "${PROJECT_SOURCE_DIR}/include/biscuit/isa.hpp" 17 "${PROJECT_SOURCE_DIR}/include/biscuit/label.hpp" 18 "${PROJECT_SOURCE_DIR}/include/biscuit/registers.hpp" 19 "${PROJECT_SOURCE_DIR}/include/biscuit/vector.hpp" 20 "${PROJECT_SOURCE_DIR}/include/biscuit/cpuinfo.hpp" 21 ) 22 add_library(biscuit::biscuit ALIAS biscuit) 23 24 target_include_directories(biscuit 25 PUBLIC 26 $<INSTALL_INTERFACE:include> 27 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> 28 29 PRIVATE 30 ${CMAKE_CURRENT_SOURCE_DIR} 31 ) 32 33 target_compile_features(biscuit 34 PRIVATE 35 cxx_std_20 36 ) 37 38 if (MSVC) 39 target_compile_options(biscuit 40 PRIVATE 41 /MP 42 /Zi 43 /Zo 44 /permissive- 45 /EHsc 46 /utf-8 47 /volatile:iso 48 /Zc:externConstexpr 49 /Zc:inline 50 /Zc:throwingNew 51 52 # Warnings 53 /W4 54 /we4062 # enumerator 'identifier' in a switch of enum 'enumeration' is not handled 55 /we4101 # 'identifier': unreferenced local variable 56 /we4265 # 'class': class has virtual functions, but destructor is not virtual 57 /we4287 # 'operator' : unsigned/negative constant mismatch 58 /we4365 # 'action' : conversion from 'type_1' to 'type_2', signed/unsigned mismatch 59 /we4388 # signed/unsigned mismatch 60 /we4547 # 'operator' : operator before comma has no effect; expected operator with side-effect 61 /we4549 # 'operator1': operator before comma has no effect; did you intend 'operator2'? 62 /we4555 # Expression has no effect; expected expression with side-effect 63 /we4715 # 'function': not all control paths return a value 64 /we4834 # Discarding return value of function with 'nodiscard' attribute 65 /we5038 # data member 'member1' will be initialized after data member 'member2' 66 ) 67 elseif (("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")) 68 target_compile_options(biscuit 69 PRIVATE 70 -Wall 71 -Wextra 72 -Wconversion 73 -Wsign-conversion 74 75 -Werror=array-bounds 76 -Werror=cast-qual 77 -Werror=ignored-qualifiers 78 -Werror=implicit-fallthrough 79 -Werror=sign-compare 80 -Werror=reorder 81 -Werror=uninitialized 82 -Werror=unused-function 83 -Werror=unused-result 84 -Werror=unused-variable 85 ) 86 endif() 87 88 if (BISCUIT_CODE_BUFFER_MMAP) 89 target_compile_definitions(biscuit 90 PRIVATE 91 -DBISCUIT_CODE_BUFFER_MMAP 92 ) 93 endif() 94 95 # Install target 96 97 include(GNUInstallDirs) 98 set(BISCUIT_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/biscuit") 99 100 # Set install target and relevant includes. 101 install(TARGETS biscuit 102 EXPORT biscuit-targets 103 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" 104 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" 105 ) 106 install( 107 DIRECTORY "${PROJECT_SOURCE_DIR}/include/" 108 DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" 109 ) 110 111 # Export targets to a script 112 install(EXPORT biscuit-targets 113 FILE 114 biscuit-targets.cmake 115 NAMESPACE 116 biscuit:: 117 DESTINATION 118 "${BISCUIT_INSTALL_CONFIGDIR}" 119 ) 120 121 # Now create the config version script 122 include(CMakePackageConfigHelpers) 123 write_basic_package_version_file( 124 "${CMAKE_CURRENT_BINARY_DIR}/biscuit-config-version.cmake" 125 VERSION 126 ${PROJECT_VERSION} 127 COMPATIBILITY 128 SameMajorVersion 129 ) 130 131 configure_package_config_file( 132 "${PROJECT_SOURCE_DIR}/cmake/biscuit-config.cmake.in" 133 "${CMAKE_CURRENT_BINARY_DIR}/biscuit-config.cmake" 134 135 INSTALL_DESTINATION "${BISCUIT_INSTALL_CONFIGDIR}" 136 ) 137 138 # Now install the config and version files. 139 install(FILES 140 "${CMAKE_CURRENT_BINARY_DIR}/biscuit-config.cmake" 141 "${CMAKE_CURRENT_BINARY_DIR}/biscuit-config-version.cmake" 142 143 DESTINATION "${BISCUIT_INSTALL_CONFIGDIR}" 144 ) 145 146 # Export library from the build tree. 147 export(EXPORT biscuit-targets 148 FILE 149 "${CMAKE_CURRENT_BINARY_DIR}/biscuit-targets.cmake" 150 NAMESPACE 151 biscuit:: 152 ) 153 export(PACKAGE biscuit)