/ externals / biscuit / src / CMakeLists.txt
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)