|
| 1 | +cmake_minimum_required(VERSION 3.1) |
| 2 | +project(aws-crt-kotlin C) |
| 3 | +message(STATUS "CMake ${CMAKE_VERSION}") |
| 4 | + |
| 5 | +option(BUILD_DEPS "Builds aws common runtime dependencies as part of build. Turn off if you want to control your dependency chain." ON) |
| 6 | +option(BUILD_SHARED_LIBS "Build shared library for FFI: default: ON" ON) |
| 7 | + |
| 8 | +if (POLICY CMP0069) |
| 9 | + cmake_policy(SET CMP0069 NEW) # Enable LTO/IPO if available in the compiler |
| 10 | +endif() |
| 11 | + |
| 12 | +if (DEFINED CMAKE_PREFIX_PATH) |
| 13 | + file(TO_CMAKE_PATH "${CMAKE_PREFIX_PATH}" CMAKE_PREFIX_PATH) |
| 14 | +endif() |
| 15 | + |
| 16 | +if (NOT DEFINED CMAKE_INSTALL_LIBDIR) |
| 17 | + set(CMAKE_INSTALL_LIBDIR "lib") |
| 18 | +endif() |
| 19 | + |
| 20 | +if (UNIX AND NOT APPLE) |
| 21 | + set(FIND_LIBRARY_USE_LIB64_PATHS true) |
| 22 | +endif() |
| 23 | + |
| 24 | +# This is required in order to append /lib/cmake to each element in CMAKE_PREFIX_PATH |
| 25 | +set(AWS_MODULE_DIR "/${CMAKE_INSTALL_LIBDIR}/cmake") |
| 26 | +string(REPLACE ";" "${AWS_MODULE_DIR};" AWS_MODULE_PATH "${CMAKE_PREFIX_PATH}${AWS_MODULE_DIR}") |
| 27 | +# Append that generated list to the module search path |
| 28 | +list(APPEND CMAKE_MODULE_PATH ${AWS_MODULE_PATH}) |
| 29 | + |
| 30 | + |
| 31 | +if (BUILD_DEPS) |
| 32 | + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/crt/aws-c-common/cmake") |
| 33 | + |
| 34 | + include(AwsFindPackage) |
| 35 | + |
| 36 | + set(IN_SOURCE_BUILD ON) |
| 37 | + set(SEARCH_LIBCRYPTO OFF CACHE BOOL "Let S2N use libcrypto from AWS-LC.") |
| 38 | + |
| 39 | + # Don't compile tests in subdirectories. |
| 40 | + # Turn off using `option` instead of `set`, or CTest will declare |
| 41 | + # it as an option later and override the existing variable. |
| 42 | + set(BUILD_TESTING OFF) |
| 43 | + |
| 44 | + # Disable BUILD_SHARED_LIBS for all CRT libs |
| 45 | + set(SHARED_FFI_LIB ${BUILD_SHARED_LIBS}) |
| 46 | + set(BUILD_SHARED_LIBS OFF) |
| 47 | + |
| 48 | + # CRT Libraries |
| 49 | + add_subdirectory(crt/aws-c-common) |
| 50 | + if (UNIX AND NOT APPLE) |
| 51 | + if (NOT USE_OPENSSL) |
| 52 | + if (NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) AND |
| 53 | + NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l)) |
| 54 | + set(DISABLE_PERL ON) |
| 55 | + endif() |
| 56 | + if(CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS "5.0") |
| 57 | + set(DISABLE_PERL OFF CACHE BOOL "Build with Perl to avoid using pre-compiled binary with AVX512") |
| 58 | + set(MY_ASSEMBLER_IS_TOO_OLD_FOR_512AVX ON CACHE BOOL "Disable AVX512 on old GCC that not supports it") |
| 59 | + endif() |
| 60 | + set(DISABLE_GO ON) |
| 61 | + set(SEARCH_LIBCRYPTO OFF) |
| 62 | + set(BUILD_LIBSSL OFF) |
| 63 | + add_subdirectory(crt/aws-lc) |
| 64 | + else() |
| 65 | + set(SEARCH_LIBCRYPTO ON) |
| 66 | + # Find the system libcrypto and propagate its location to s2n's find script |
| 67 | + find_package(OpenSSL REQUIRED) |
| 68 | + set(LibCrypto_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR}) |
| 69 | + set(LibCrypto_LIBRARY ${OPENSSL_CRYPTO_LIBRARY}) |
| 70 | + if (LibCrypto_LIBRARY MATCHES ".so$") |
| 71 | + set(LibCrypto_SHARED_LIBRARY ${LibCrypto_LIBRARY}) |
| 72 | + else() |
| 73 | + set(LibCrypto_STATIC_LIBRARY ${LibCrypto_LIBRARY}) |
| 74 | + endif() |
| 75 | + endif() |
| 76 | + add_subdirectory(crt/s2n) |
| 77 | + endif() |
| 78 | + add_subdirectory(crt/aws-c-sdkutils) |
| 79 | + add_subdirectory(crt/aws-c-io) |
| 80 | + add_subdirectory(crt/aws-c-cal) |
| 81 | + add_subdirectory(crt/aws-c-compression) |
| 82 | + add_subdirectory(crt/aws-c-http) |
| 83 | + add_subdirectory(crt/aws-c-auth) |
| 84 | + add_subdirectory(crt/aws-checksums) |
| 85 | +else() |
| 86 | + include(AwsFindPackage) |
| 87 | + set(IN_SOURCE_BUILD OFF) |
| 88 | +endif() |
| 89 | + |
| 90 | +# Restore BUILD_SHARED_LIBS for this project |
| 91 | +set(BUILD_SHARED_LIBS ${SHARED_FFI_LIB}) |
| 92 | + |
| 93 | +include(AwsCFlags) |
| 94 | +include(AwsSharedLibSetup) |
| 95 | +include(AwsSanitizers) |
| 96 | + |
| 97 | +aws_use_package(aws-c-common) |
| 98 | +aws_use_package(aws-c-sdkutils) |
| 99 | +aws_use_package(aws-c-io) |
| 100 | +aws_use_package(aws-c-cal) |
| 101 | +aws_use_package(aws-c-compression) |
| 102 | +aws_use_package(aws-c-http) |
| 103 | +aws_use_package(aws-c-auth) |
| 104 | +aws_use_package(aws-checksums) |
| 105 | + |
0 commit comments