summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2020-04-17 20:57:17 +0100
committerColin Watson <cjwatson@debian.org>2020-04-17 20:57:17 +0100
commit75073d0a8478441cc97a6efa10b566c5fb1dac81 (patch)
treeb73bff259e1b16829ed8b19ee92df2bbbf36ef7d /CMakeLists.txt
parentc923f422b1e455bdd8ec3bdb10d005e3bfbacfe0 (diff)
New upstream version 1.4.0
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt80
1 files changed, 63 insertions, 17 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9481c46..0bb2e87 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,14 +19,19 @@ set(CMAKE_VERBOSE_MAKEFILE on)
19set(CMAKE_POSITION_INDEPENDENT_CODE ON) 19set(CMAKE_POSITION_INDEPENDENT_CODE ON)
20 20
21set(FIDO_MAJOR "1") 21set(FIDO_MAJOR "1")
22set(FIDO_MINOR "3") 22set(FIDO_MINOR "4")
23set(FIDO_PATCH "1") 23set(FIDO_PATCH "0")
24set(FIDO_VERSION ${FIDO_MAJOR}.${FIDO_MINOR}.${FIDO_PATCH}) 24set(FIDO_VERSION ${FIDO_MAJOR}.${FIDO_MINOR}.${FIDO_PATCH})
25 25
26add_definitions(-D_FIDO_MAJOR=${FIDO_MAJOR}) 26add_definitions(-D_FIDO_MAJOR=${FIDO_MAJOR})
27add_definitions(-D_FIDO_MINOR=${FIDO_MINOR}) 27add_definitions(-D_FIDO_MINOR=${FIDO_MINOR})
28add_definitions(-D_FIDO_PATCH=${FIDO_PATCH}) 28add_definitions(-D_FIDO_PATCH=${FIDO_PATCH})
29 29
30if(CYGWIN OR MSYS)
31 set(WIN32 1)
32 add_definitions(-DWINVER=0x0a00)
33endif()
34
30if(WIN32) 35if(WIN32)
31 add_definitions(-DWIN32_LEAN_AND_MEAN) 36 add_definitions(-DWIN32_LEAN_AND_MEAN)
32endif() 37endif()
@@ -36,11 +41,6 @@ if(APPLE)
36 "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") 41 "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
37endif() 42endif()
38 43
39# /dev/urandom
40if(UNIX)
41 add_definitions(-DHAS_DEV_URANDOM)
42endif()
43
44# Observe OpenBSD's library versioning scheme. 44# Observe OpenBSD's library versioning scheme.
45if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") 45if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
46 set(LIB_VERSION ${FIDO_MAJOR}.${FIDO_MINOR}) 46 set(LIB_VERSION ${FIDO_MAJOR}.${FIDO_MINOR})
@@ -79,7 +79,7 @@ if(MSVC)
79else() 79else()
80 include(FindPkgConfig) 80 include(FindPkgConfig)
81 pkg_search_module(CBOR libcbor) 81 pkg_search_module(CBOR libcbor)
82 pkg_search_module(CRYPTO libcrypto REQUIRED) 82 pkg_search_module(CRYPTO libcrypto)
83 83
84 # XXX workaround libcbor's missing .pc file 84 # XXX workaround libcbor's missing .pc file
85 if(NOT CBOR_FOUND) 85 if(NOT CBOR_FOUND)
@@ -90,12 +90,24 @@ else()
90 set(CBOR_LIBRARIES "cbor") 90 set(CBOR_LIBRARIES "cbor")
91 endif() 91 endif()
92 92
93 # XXX workaround libcrypto's missing .pc file
94 if(NOT CRYPTO_FOUND)
95 check_include_files(openssl/opensslv.h HAVE_OPENSSLV_H)
96 if(NOT HAVE_OPENSSLV_H)
97 message(FATAL_ERROR "could not find crypto header files")
98 endif()
99 set(CRYPTO_LIBRARIES "crypto")
100 endif()
101
93 if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 102 if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
94 pkg_search_module(UDEV libudev REQUIRED) 103 pkg_search_module(UDEV libudev REQUIRED)
95 set(UDEV_NAME "udev") 104 set(UDEV_NAME "udev")
96 # Define be32toh(). 105 # Define be32toh().
97 add_definitions(-D_GNU_SOURCE) 106 add_definitions(-D_GNU_SOURCE)
98 elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") 107 # If using hidapi, use hidapi-hidraw.
108 set(HIDAPI_SUFFIX -hidraw)
109 elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR
110 CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
99 set(BASE_LIBRARIES usbhid) 111 set(BASE_LIBRARIES usbhid)
100 endif() 112 endif()
101 113
@@ -103,6 +115,15 @@ else()
103 # MinGW is stuck with a flavour of C89. 115 # MinGW is stuck with a flavour of C89.
104 add_definitions(-DFIDO_NO_DIAGNOSTIC) 116 add_definitions(-DFIDO_NO_DIAGNOSTIC)
105 add_definitions(-DWC_ERR_INVALID_CHARS=0x80) 117 add_definitions(-DWC_ERR_INVALID_CHARS=0x80)
118 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
119 endif()
120
121 if(USE_HIDAPI)
122 add_definitions(-DUSE_HIDAPI)
123 pkg_search_module(HIDAPI hidapi${HIDAPI_SUFFIX} REQUIRED)
124 if(HIDAPI_FOUND)
125 set(HIDAPI_LIBRARIES hidapi${HIDAPI_SUFFIX})
126 endif()
106 endif() 127 endif()
107 128
108 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") 129 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
@@ -114,7 +135,12 @@ else()
114 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wbad-function-cast") 135 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wbad-function-cast")
115 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic") 136 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic")
116 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic-errors") 137 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic-errors")
117 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-all") 138 check_c_compiler_flag("-fstack-protector-all" HAVE_STACK_PROTECTOR_ALL)
139 if(HAVE_STACK_PROTECTOR_ALL)
140 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-all")
141 endif()
142
143 add_definitions(-D_DEFAULT_SOURCE)
118 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") 144 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
119 145
120 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g2") 146 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g2")
@@ -123,6 +149,7 @@ else()
123 if(FUZZ) 149 if(FUZZ)
124 if(LIBFUZZER) 150 if(LIBFUZZER)
125 set(FUZZ_LDFLAGS "-fsanitize=fuzzer") 151 set(FUZZ_LDFLAGS "-fsanitize=fuzzer")
152 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=fuzzer-no-link")
126 endif() 153 endif()
127 add_definitions(-DFIDO_FUZZ) 154 add_definitions(-DFIDO_FUZZ)
128 endif() 155 endif()
@@ -192,6 +219,12 @@ if(HAVE_SIGNAL_H)
192 add_definitions(-DHAVE_SIGNAL_H) 219 add_definitions(-DHAVE_SIGNAL_H)
193endif() 220endif()
194 221
222# sys/random.h
223check_include_files(sys/random.h HAVE_SYS_RANDOM_H)
224if(HAVE_SYS_RANDOM_H)
225 add_definitions(-DHAVE_SYS_RANDOM_H)
226endif()
227
195# strlcpy 228# strlcpy
196check_function_exists(strlcpy HAVE_STRLCPY) 229check_function_exists(strlcpy HAVE_STRLCPY)
197if(HAVE_STRLCPY) 230if(HAVE_STRLCPY)
@@ -289,21 +322,32 @@ if(HAVE_ARC4RANDOM_BUF)
289 add_definitions(-DHAVE_ARC4RANDOM_BUF) 322 add_definitions(-DHAVE_ARC4RANDOM_BUF)
290endif() 323endif()
291 324
292# getentropy 325# getrandom
293check_function_exists(getentropy HAVE_GETENTROPY) 326check_function_exists(getrandom HAVE_GETRANDOM)
294if(HAVE_GETENTROPY) 327if(HAVE_GETRANDOM)
295 add_definitions(-DHAVE_GETENTROPY) 328 add_definitions(-DHAVE_GETRANDOM)
329endif()
330
331# /dev/urandom
332if(UNIX)
333 add_definitions(-DHAVE_DEV_URANDOM)
296endif() 334endif()
297 335
298# export list 336# export list
299if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang") 337if(APPLE AND (CMAKE_C_COMPILER_ID STREQUAL "Clang" OR
338 CMAKE_C_COMPILER_ID STREQUAL "AppleClang"))
300 # clang + lld 339 # clang + lld
301 string(CONCAT CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} 340 string(CONCAT CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS}
302 " -exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/src/export.llvm") 341 " -exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/src/export.llvm")
303elseif(NOT MSVC) 342elseif(NOT MSVC)
304 # clang/gcc + gnu ld 343 # clang/gcc + gnu ld
305 string(CONCAT CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} 344 if(FUZZ)
306 " -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/src/export.gnu") 345 string(CONCAT CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS}
346 " -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/fuzz/export.gnu")
347 else()
348 string(CONCAT CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS}
349 " -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/src/export.gnu")
350 endif()
307 if(NOT WIN32) 351 if(NOT WIN32)
308 string(CONCAT CMAKE_SHARED_LINKER_FLAGS 352 string(CONCAT CMAKE_SHARED_LINKER_FLAGS
309 ${CMAKE_SHARED_LINKER_FLAGS} 353 ${CMAKE_SHARED_LINKER_FLAGS}
@@ -344,6 +388,7 @@ message(STATUS "CRYPTO_INCLUDE_DIRS: ${CRYPTO_INCLUDE_DIRS}")
344message(STATUS "CRYPTO_LIBRARY_DIRS: ${CRYPTO_LIBRARY_DIRS}") 388message(STATUS "CRYPTO_LIBRARY_DIRS: ${CRYPTO_LIBRARY_DIRS}")
345message(STATUS "CRYPTO_LIBRARIES: ${CRYPTO_LIBRARIES}") 389message(STATUS "CRYPTO_LIBRARIES: ${CRYPTO_LIBRARIES}")
346message(STATUS "BASE_LIBRARIES: ${BASE_LIBRARIES}") 390message(STATUS "BASE_LIBRARIES: ${BASE_LIBRARIES}")
391message(STATUS "HIDAPI_LIBRARIES: ${HIDAPI_LIBRARIES}")
347message(STATUS "VERSION: ${FIDO_VERSION}") 392message(STATUS "VERSION: ${FIDO_VERSION}")
348message(STATUS "LIB_VERSION: ${LIB_VERSION}") 393message(STATUS "LIB_VERSION: ${LIB_VERSION}")
349message(STATUS "LIB_SOVERSION: ${LIB_SOVERSION}") 394message(STATUS "LIB_SOVERSION: ${LIB_SOVERSION}")
@@ -354,6 +399,7 @@ message(STATUS "ASAN: ${ASAN}")
354message(STATUS "MSAN: ${MSAN}") 399message(STATUS "MSAN: ${MSAN}")
355message(STATUS "COVERAGE: ${COVERAGE}") 400message(STATUS "COVERAGE: ${COVERAGE}")
356message(STATUS "TLS: ${TLS}") 401message(STATUS "TLS: ${TLS}")
402message(STATUS "USE_HIDAPI: ${USE_HIDAPI}")
357 403
358if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 404if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
359 message(STATUS "UDEV_INCLUDE_DIRS: ${UDEV_INCLUDE_DIRS}") 405 message(STATUS "UDEV_INCLUDE_DIRS: ${UDEV_INCLUDE_DIRS}")