UNPKG

aws-crt

Version:

NodeJS bindings to the aws-c-* libraries

110 lines (85 loc) 4.04 kB
cmake_minimum_required(VERSION 3.1) option(BUILD_DEPS "Builds aws common runtime dependencies as part of build, only do this if you don't want to control your dependency chain." ON) # ensure that the release build has symbols if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo) endif() if (UNIX AND NOT APPLE) include(GNUInstallDirs) elseif(NOT DEFINED CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR "lib") endif() if (${CMAKE_INSTALL_LIBDIR} STREQUAL "lib64") set(FIND_LIBRARY_USE_LIB64_PATHS true) endif() if (BUILD_DEPS) set(AWS_DEPS_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/deps CACHE STRING "If BUILD_DEPS is on, aws common runtime dependencies build in this directory.") set(AWS_DEPS_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/deps/install) list(APPEND CMAKE_PREFIX_PATH ${AWS_DEPS_INSTALL_DIR}) string(REPLACE ";" "|" CMAKE_PREFIX_PATH_BAR "${CMAKE_PREFIX_PATH}") file(MAKE_DIRECTORY ${AWS_DEPS_BUILD_DIR}) execute_process( COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTARGET_ARCH=${TARGET_ARCH} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_BAR} -DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR} -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_CURRENT_BINARY_DIR}/bin -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/aws-common-runtime WORKING_DIRECTORY ${AWS_DEPS_BUILD_DIR} RESULT_VARIABLE BUILD_AWSCRT_EXIT_CODE ) if (NOT ${BUILD_AWSCRT_EXIT_CODE} EQUAL 0) message(FATAL_ERROR "Failed to configure aws crt libraries.") endif() execute_process(COMMAND ${CMAKE_COMMAND} --build ${AWS_DEPS_BUILD_DIR} --config ${CMAKE_BUILD_TYPE} RESULT_VARIABLE BUILD_AWSCRT_EXIT_CODE) if (NOT ${BUILD_AWSCRT_EXIT_CODE} EQUAL 0) message(FATAL_ERROR "Failed to build aws crt libraries.") endif() #the following two lines are done in this branch intentionally, don't move it. project() does some magic that #we don't want happening until we're done with the above code. list(APPEND CMAKE_PREFIX_PATH "${AWS_DEPS_INSTALL_DIR}") project(aws-crt-nodejs C) else() #the following two lines are done in this branch intentionally, don't move it. project() does some magic that #we want happening exactly right now. project(aws-crt-nodejs C) endif() if (POLICY CMP0069) cmake_policy(SET CMP0069 NEW) # Enable LTO/IPO if available in the compiler, see AwsCFlags endif() set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/dist") list(APPEND CMAKE_MODULE_PATH "${CMAKE_PREFIX_PATH}/${CMAKE_INSTALL_LIBDIR}/cmake") include(AwsCFlags) include(AwsSharedLibSetup) include(AwsSanitizers) file(GLOB AWS_CRT_SRC "source/*.c" ) add_library(${CMAKE_PROJECT_NAME} SHARED ${AWS_CRT_SRC}) aws_set_common_properties(${CMAKE_PROJECT_NAME}) aws_prepare_symbol_visibility_args(${CMAKE_PROJECT_NAME} "AWS_CRT_NODEJS") aws_add_sanitizers(${CMAKE_PROJECT_NAME}) # Gives our library file a .node extension without any "lib" prefix set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include> ${CMAKE_JS_INC}) find_package(aws-c-http REQUIRED) find_package(aws-c-mqtt REQUIRED) find_package(aws-c-auth REQUIRED) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_JS_LIB} AWS::aws-c-auth AWS::aws-c-http AWS::aws-c-mqtt) if (CMAKE_JS_PLATFORM AND CMAKE_JS_ARCH) # When run from build.ts, these are set set(destination bin/${CMAKE_JS_PLATFORM}-${CMAKE_JS_ARCH}) else() # If not, default to "native" set(destination bin/native) endif() install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/aws-crt-nodejs.node" DESTINATION ${destination})