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