1# Copyright (c) 2018 Yubico AB. All rights reserved. 2# Use of this source code is governed by a BSD-style 3# license that can be found in the LICENSE file. 4 5add_definitions(-D_FIDO_INTERNAL) 6 7list(APPEND FIDO_SOURCES 8 aes256.c 9 assert.c 10 authkey.c 11 bio.c 12 blob.c 13 buf.c 14 cbor.c 15 cred.c 16 credman.c 17 dev.c 18 ecdh.c 19 eddsa.c 20 err.c 21 es256.c 22 hid.c 23 info.c 24 io.c 25 iso7816.c 26 log.c 27 pin.c 28 reset.c 29 rs256.c 30 u2f.c 31) 32 33if(FUZZ) 34 list(APPEND FIDO_SOURCES ../fuzz/prng.c) 35 list(APPEND FIDO_SOURCES ../fuzz/uniform_random.c) 36 list(APPEND FIDO_SOURCES ../fuzz/wrap.c) 37endif() 38 39if(USE_HIDAPI) 40 list(APPEND FIDO_SOURCES hid_hidapi.c) 41elseif(WIN32) 42 list(APPEND FIDO_SOURCES hid_win.c) 43elseif(APPLE) 44 list(APPEND FIDO_SOURCES hid_osx.c) 45elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") 46 list(APPEND FIDO_SOURCES hid_linux.c) 47elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") 48 list(APPEND FIDO_SOURCES hid_openbsd.c) 49else() 50 message(FATAL_ERROR "please define a hid backend for your platform") 51endif() 52 53if(NOT MSVC) 54 set_source_files_properties(${FIDO_SOURCES} PROPERTIES COMPILE_FLAGS 55 "-Wconversion -Wsign-conversion") 56endif() 57 58list(APPEND COMPAT_SOURCES 59 ../openbsd-compat/bsd-getpagesize.c 60 ../openbsd-compat/explicit_bzero.c 61 ../openbsd-compat/explicit_bzero_win32.c 62 ../openbsd-compat/recallocarray.c 63 ../openbsd-compat/strlcat.c 64 ../openbsd-compat/timingsafe_bcmp.c 65) 66 67# static library 68add_library(fido2 STATIC ${FIDO_SOURCES} ${COMPAT_SOURCES}) 69target_link_libraries(fido2 ${CBOR_LIBRARIES} ${CRYPTO_LIBRARIES} 70 ${UDEV_LIBRARIES} ${BASE_LIBRARIES} ${HIDAPI_LIBRARIES}) 71if(WIN32) 72 if (MINGW) 73 target_link_libraries(fido2 wsock32 ws2_32 bcrypt setupapi hid) 74 else() 75 target_link_libraries(fido2 wsock32 ws2_32 bcrypt SetupAPI hid) 76 set_target_properties(fido2 PROPERTIES OUTPUT_NAME fido2_static) 77 endif() 78elseif(APPLE) 79 target_link_libraries(fido2 "-framework CoreFoundation" 80 "-framework IOKit") 81endif() 82install(TARGETS fido2 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 83 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) 84 85# dynamic library 86add_library(fido2_shared SHARED ${FIDO_SOURCES} ${COMPAT_SOURCES}) 87target_link_libraries(fido2_shared ${CBOR_LIBRARIES} ${CRYPTO_LIBRARIES} 88 ${UDEV_LIBRARIES} ${BASE_LIBRARIES} ${HIDAPI_LIBRARIES}) 89if(WIN32) 90 if (MINGW) 91 target_link_libraries(fido2_shared wsock32 ws2_32 bcrypt 92 setupapi hid) 93 else() 94 target_link_libraries(fido2_shared wsock32 ws2_32 bcrypt 95 SetupAPI hid) 96 endif() 97elseif(APPLE) 98 target_link_libraries(fido2_shared "-framework CoreFoundation" 99 "-framework IOKit") 100endif() 101set_target_properties(fido2_shared PROPERTIES OUTPUT_NAME fido2 102 VERSION ${FIDO_VERSION} SOVERSION ${FIDO_MAJOR}) 103install(TARGETS fido2_shared 104 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 105 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 106 RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}) 107 108install(FILES fido.h DESTINATION include) 109install(DIRECTORY fido DESTINATION include) 110 111if(NOT WIN32) 112 configure_file(libfido2.pc.in libfido2.pc @ONLY) 113 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libfido2.pc" 114 DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") 115endif() 116