diff options
author | Szczepan Zalega <szczepan@nitrokey.com> | 2017-03-11 17:18:59 +0100 |
---|---|---|
committer | Szczepan Zalega <szczepan@nitrokey.com> | 2017-03-11 17:18:59 +0100 |
commit | 22d05ce647281056d71fbd3c31df3bcd6396188d (patch) | |
tree | 90208930f54c47987bfd5ffcf0a0acaaad2510da /CMakeLists.txt | |
parent | ed5044da43172d86a1aa475473561a4818b7c69c (diff) | |
parent | ac6b9c18ef55f4cd36e85069cf0cf82c14e04404 (diff) | |
download | libnitrokey-22d05ce647281056d71fbd3c31df3bcd6396188d.tar.gz libnitrokey-22d05ce647281056d71fbd3c31df3bcd6396188d.tar.bz2 |
Merge branch 'libnitrokey_3'
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 123 |
1 files changed, 105 insertions, 18 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c324067..46405a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,41 @@ -cmake_minimum_required(VERSION 3.5) -project(libnitrokey) +cmake_minimum_required(VERSION 3.1) +IF (UNIX) + OPTION(USE_CLANG "Use CLang" FALSE) + IF(USE_CLANG) + set(CMAKE_CXX_COMPILER "/usr/bin/clang++" CACHE string "clang++ compiler" FORCE) + ELSE() + set(CMAKE_CXX_COMPILER) + ENDIF() + OPTION(ADD_ASAN "Use ASAN to show memory issues" FALSE) + OPTION(ADD_TSAN "Use TSAN to show thread issues" FALSE) + IF(ADD_ASAN) + SET(EXTRA_LIBS ${EXTRA_LIBS} asan ) + ADD_DEFINITIONS(-fsanitize=address -fno-omit-frame-pointer) + ENDIF() + IF(ADD_TSAN) + SET(EXTRA_LIBS ${EXTRA_LIBS} tsan ) + SET(USE_CLANG TRUE) + ADD_DEFINITIONS(-fsanitize=thread -fno-omit-frame-pointer -fPIC -g) #use with clang + ENDIF() + IF(ADD_TSAN AND ADD_ASAN) + message(FATAL_ERROR "TSAN and ASAN cannot be used at the same time") + ENDIF() +ENDIF() -set(CMAKE_CXX_COMPILER "/usr/bin/clang++-3.8" CACHE string "clang++ compiler" FORCE) +project(libnitrokey) +SET(PROJECT_VERSION "3.0-alpha") +set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wno-gnu-variable-sized-type-not-at-end -g3" ) -SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lhidapi-libusb" ) +OPTION(LIBNITROKEY_STATIC "Build libnitrokey statically" TRUE) -include_directories(include unittest/Catch/include) +OPTION(COMPILE_TESTS "Compile tests" FALSE) +IF (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo) +ENDIF() +MESSAGE("${PROJECT_NAME}: Build type: ${CMAKE_BUILD_TYPE}") +include_directories(hidapi) +include_directories(include) set(SOURCE_FILES include/command.h include/command_id.h @@ -22,19 +49,79 @@ set(SOURCE_FILES include/NitrokeyManager.h include/stick10_commands.h include/stick20_commands.h - NK_C_API.h + include/CommandFailedException.h + include/LibraryException.h + include/LongOperationInProgressException.h + include/stick10_commands_0.8.h command_id.cc device.cc log.cc misc.cc NitrokeyManager.cc - NK_C_API.cc include/CommandFailedException.h include/LibraryException.h - unittest/test_C_API.cpp - unittest/catch_main.cpp - unittest/test2.cc - unittest/test3.cc - include/LongOperationInProgressException.h - include/stick10_commands_0.8.h - ) - -add_executable(libnitrokey ${SOURCE_FILES})
\ No newline at end of file + NK_C_API.h + NK_C_API.cc + DeviceCommunicationExceptions.cpp) + +IF(UNIX) +# add_library(hidapi-libusb STATIC hidapi/libusb/hid.c ) +ELSEIF(WIN32) + include_directories(hidapi/hidapi) + add_library(hidapi-libusb STATIC hidapi/windows/hid.c ) + target_link_libraries(hidapi-libusb setupapi) +ENDIF() + +IF (NOT LIBNITROKEY_STATIC) + add_library(nitrokey SHARED ${SOURCE_FILES}) + add_library(nitrokey-log SHARED ${SOURCE_FILES}) + install (TARGETS nitrokey DESTINATION "lib") + SET(LIBNAME nitrokey) +ELSE() + add_library(nitrokey-static STATIC ${SOURCE_FILES}) + add_library(nitrokey-static-log STATIC ${SOURCE_FILES}) + SET(LIBNAME nitrokey-static) +ENDIF() +target_link_libraries(${LIBNAME} hidapi-libusb) +target_link_libraries(${LIBNAME}-log hidapi-libusb) + +SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES COMPILE_DEFINITIONS "NO_LOG") + + +file(GLOB LIB_INCLUDES "include/libnitrokey/*.h") +install (FILES ${LIB_INCLUDES} DESTINATION "include") + +IF (COMPILE_TESTS) + include_directories(unittest/Catch/include) + + add_library(catch SHARED unittest/catch_main.cpp ) + + add_executable (test_C_API unittest/test_C_API.cpp) + target_link_libraries (test_C_API ${EXTRA_LIBS} ${LIBNAME} catch) + + add_executable (test2 unittest/test2.cc) + target_link_libraries (test2 ${EXTRA_LIBS} ${LIBNAME} catch) + + add_executable (test3 unittest/test3.cc) + target_link_libraries (test3 ${EXTRA_LIBS} ${LIBNAME} catch) + + add_executable (test_HOTP unittest/test_HOTP.cc) + target_link_libraries (test_HOTP ${EXTRA_LIBS} ${LIBNAME} catch) + + add_executable (test1 unittest/test.cc) + target_link_libraries (test1 ${EXTRA_LIBS} ${LIBNAME} catch) + + #run with 'make test' or 'ctest' + #needs connected PRO device for success + #warning: it may delete data on the device + include (CTest) + add_test (runs test_C_API) +ENDIF() + + +#SET(CPACK_GENERATOR +# "DEB;RPM") +# build a CPack driven installer package +include (InstallRequiredSystemLibraries) +set (CPACK_RESOURCE_FILE_LICENSE + "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") +set (CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") +include (CPack)
\ No newline at end of file |