UNPKG

aws-crt

Version:

NodeJS bindings to the aws-c-* libraries

241 lines (194 loc) 7.71 kB
cmake_minimum_required (VERSION 3.0) project (s2n C) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(INSTALL_LIB_DIR lib CACHE PATH "Installaction directory for libraries") set(INSTALL_INCLUDE_DIR include CACHE PATH "installaction directory for header files") set(INSTALL_CMAKE_DIR lib/cmake CACHE PATH "Installation directory for cmake files") ##header files file(GLOB API_HEADERS "api/*.h" ) file(GLOB CRYPTO_HEADERS "crypto/*.h" ) file(GLOB ERROR_HEADERS "error/*.h" ) file(GLOB PQ_HEADERS "pq-crypto/*.h" "pq-crypto/bike/*.h" "pq-crypto/sike/*.h" ) file(GLOB STUFFER_HEADERS "stuffer/*.h" ) file(GLOB_RECURSE TLS_HEADERS "tls/*.h" ) file(GLOB UTILS_HEADERS "utils/*.h" ) ##source files file(GLOB CRYPTO_SRC "crypto/*.c" ) file(GLOB ERROR_SRC "error/*.c" ) # The SIKE code #includes .c files directly, including all sike/*.c breaks the build due to duplicates file(GLOB PQ_SRC "pq-crypto/*.c" "pq-crypto/bike/*.c" "pq-crypto/sike/fp_generic.c" "pq-crypto/sike/P503.c" "pq-crypto/sike/sike_p503_kem.c" "pq-crypto/sike/fips202.c" ) file(GLOB STUFFER_SRC "stuffer/*.c" ) file(GLOB_RECURSE TLS_SRC "tls/*.c" ) file(GLOB UTILS_SRC "utils/*.c" ) ##be nice to visual studio users if(MSVC) source_group("Header Files\\s2n\\api" FILES ${API_HEADERS}) source_group("Header Files\\s2n\\crypto" FILES ${CRYPTO_HEADERS}) source_group("Header Files\\s2n\\error" FILES ${ERROR_HEADERS}) source_group("Header Files\\s2n\\pq-crypto" FILES ${PQ_HEADERS}) source_group("Header Files\\s2n\\stuffer" FILES ${STUFFER_HEADERS}) source_group("Header Files\\s2n\\tls" FILES ${TLS_HEADERS}) source_group("Header Files\\s2n\\utils" FILES ${UTILS_HEADERS}) source_group("Source Files\\crypto" FILES ${CRYPTO_SRC}) source_group("Source Files\\error" FILES ${ERROR_SRC}) source_group("Source Files\\pq-crypto" FILES ${PQ_SRC}) source_group("Source Files\\stuffer" FILES ${STUFFER_SRC}) source_group("Source Files\\tls" FILES ${TLS_SRC}) source_group("Source Files\\utils" FILES ${UTILS_SRC}) else() set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) endif() if(APPLE) set(OS_LIBS c Threads::Threads) elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") set(OS_LIBS thr) elseif(CMAKE_SYSTEM_NAME STREQUAL "NetBSD") set(OS_LIBS Threads::Threads) else() set(OS_LIBS Threads::Threads dl rt) endif() file(GLOB S2N_HEADERS ${API_HEADERS} ${CRYPTO_HEADERS} ${ERROR_HEADERS} ${PQ_HEADERS} ${STUFFER_HEADERS} ${TLS_HEADERS} ${UTILS_HEADERS} ) file(GLOB S2N_SRC ${CRYPTO_SRC} ${ERROR_SRC} ${PQ_SRC} ${STUFFER_SRC} ${TLS_SRC} ${UTILS_SRC} ) add_library(${CMAKE_PROJECT_NAME} ${S2N_HEADERS} ${S2N_SRC}) set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C) set(CMAKE_C_FLAGS_DEBUGOPT "") target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -pedantic -std=c99 -Wall -Werror -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings -Wno-deprecated-declarations -Wno-unknown-pragmas -Wformat-security -Wno-missing-braces) target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC -fPIC) target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE -D_POSIX_C_SOURCE=200809L) if(CMAKE_BUILD_TYPE MATCHES Release) target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE -D_FORTIFY_SOURCE=2) endif() if(NO_STACK_PROTECTOR) target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -Wstack-protector -fstack-protector-all) endif() if(S2N_UNSAFE_FUZZING_MODE) target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -fsanitize-coverage=trace-pc-guard -fsanitize=address,undefined,leak) endif() set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) find_package(LibCrypto REQUIRED) target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC LibCrypto::Crypto ${OS_LIBS} m) target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/api> $<INSTALL_INTERFACE:include>) target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC $<TARGET_PROPERTY:LibCrypto::Crypto,INTERFACE_INCLUDE_DIRECTORIES>) include(CTest) if (BUILD_TESTING) enable_testing() file(GLOB TESTLIB_SRC "tests/testlib/*.c") file(GLOB TESTLIB_HEADERS "tests/testlib/*.h" "tests/s2n_test.h") add_library(testss2n ${TESTLIB_HEADERS} ${TESTLIB_SRC}) target_include_directories(testss2n PRIVATE tests) target_compile_options(testss2n PRIVATE -std=c99) target_link_libraries(testss2n PUBLIC ${CMAKE_PROJECT_NAME}) #run unit tests file (GLOB TEST_LD_PRELOAD "tests/LD_PRELOAD/*.c") add_library(allocator_overrides SHARED ${TEST_LD_PRELOAD}) file(GLOB UNITTESTS_SRC "tests/unit/*.c") foreach(test_case ${UNITTESTS_SRC}) string(REGEX REPLACE ".+\\/(.+)\\.c" "\\1" test_case_name ${test_case}) add_executable(${test_case_name} ${test_case}) target_link_libraries(${test_case_name} PRIVATE testss2n m pthread) target_include_directories(${test_case_name} PRIVATE api) target_include_directories(${test_case_name} PRIVATE ./) target_include_directories(${test_case_name} PRIVATE tests) target_compile_options(${test_case_name} PRIVATE -Wno-implicit-function-declaration -D_POSIX_C_SOURCE=200809L -std=c99) add_test(NAME ${test_case_name} COMMAND $<TARGET_FILE:${test_case_name}> WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests/unit) set_property( TEST ${test_case_name} PROPERTY ENVIRONMENT LD_PRELOAD=$<TARGET_FILE:allocator_overrides>) endforeach(test_case) add_executable(s2nc "bin/s2nc.c" "bin/echo.c") target_link_libraries(s2nc ${CMAKE_PROJECT_NAME}) target_include_directories(s2nc PRIVATE api) target_compile_options(s2nc PRIVATE -std=c99 -D_POSIX_C_SOURCE=200112L) add_executable(s2nd "bin/s2nd.c" "bin/echo.c") target_link_libraries(s2nd ${CMAKE_PROJECT_NAME}) target_include_directories(s2nd PRIVATE api) target_compile_options(s2nd PRIVATE -std=c99 -D_POSIX_C_SOURCE=200112L) endif() #install the s2n files install(FILES ${API_HEADERS} DESTINATION "include/" COMPONENT Development) if (UNIX AND NOT APPLE) include(GNUInstallDirs) elseif(NOT DEFINED CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR "lib") endif() install( TARGETS ${CMAKE_PROJECT_NAME} EXPORT ${CMAKE_PROJECT_NAME}-targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Development LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime ) configure_file("cmake/${CMAKE_PROJECT_NAME}-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-config.cmake" @ONLY) if (BUILD_SHARED_LIBS) set (TARGET_DIR "shared") else() set (TARGET_DIR "static") endif() install(EXPORT "${CMAKE_PROJECT_NAME}-targets" DESTINATION "${CMAKE_INSTALL_LIBDIR}/${CMAKE_PROJECT_NAME}/cmake/${TARGET_DIR}" NAMESPACE AWS:: COMPONENT Development) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-config.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/${CMAKE_PROJECT_NAME}/cmake/" COMPONENT Development) install(FILES "cmake/modules/FindLibCrypto.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" COMPONENT Development)