Skip to content

Commit 5f363bb

Browse files
author
Justin Boswell
authored
Added CRT build via -DBUILD_DEPS=ON (#54)
1 parent 68ee2e4 commit 5f363bb

File tree

3 files changed

+155
-1
lines changed

3 files changed

+155
-1
lines changed

CMakeLists.txt

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,88 @@
11
cmake_minimum_required(VERSION 3.1)
2-
project(aws-iot-device-sdk-cpp-v2 CXX)
2+
3+
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." OFF)
34

45
if (UNIX AND NOT APPLE)
56
include(GNUInstallDirs)
67
elseif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
78
set(CMAKE_INSTALL_LIBDIR "lib")
89
endif()
910

11+
if (BUILD_DEPS)
12+
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.")
13+
if (DEFINED CMAKE_INSTALL_PREFIX)
14+
set(AWS_DEPS_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
15+
else()
16+
set(AWS_DEPS_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/deps/install)
17+
endif()
18+
19+
if (NOT DEFINED CMAKE_PREFIX_PATH)
20+
set(CMAKE_PREFIX_PATH ${AWS_DEPS_INSTALL_DIR})
21+
endif()
22+
23+
file(MAKE_DIRECTORY ${AWS_DEPS_BUILD_DIR})
24+
if(TARGET_ARCH STREQUAL "ANDROID")
25+
execute_process(
26+
COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR}
27+
-DTARGET_ARCH=${TARGET_ARCH}
28+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
29+
-DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL}
30+
-DANDROID_ABI=${ANDROID_ABI}
31+
-DANDROID_TOOLCHAIN_NAME=${ANDROID_TOOLCHAIN_NAME}
32+
-DANDROID_STANDALONE_TOOLCHAIN=${ANDROID_STANDALONE_TOOLCHAIN}
33+
-DANDROID_STL=${ANDROID_STL}
34+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
35+
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
36+
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
37+
-DCMAKE_PREFIX_PATH=${AWS_DEPS_INSTALL_DIR}
38+
-DGIT_EXECUTABLE=${GIT_EXECUTABLE}
39+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
40+
${CMAKE_CURRENT_SOURCE_DIR}/aws-common-runtime
41+
WORKING_DIRECTORY ${AWS_DEPS_BUILD_DIR}
42+
)
43+
44+
else()
45+
execute_process(
46+
COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR}
47+
-DTARGET_ARCH=${TARGET_ARCH}
48+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
49+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
50+
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
51+
-DCMAKE_PREFIX_PATH=${AWS_DEPS_INSTALL_DIR}
52+
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
53+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
54+
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_CURRENT_BINARY_DIR}/bin
55+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
56+
${CMAKE_CURRENT_SOURCE_DIR}/aws-common-runtime
57+
WORKING_DIRECTORY ${AWS_DEPS_BUILD_DIR}
58+
RESULT_VARIABLE BUILD_AWSCRT_EXIT_CODE
59+
)
60+
endif()
61+
62+
if (NOT ${BUILD_AWSCRT_EXIT_CODE} EQUAL 0)
63+
message(FATAL_ERROR "Failed to configure aws crt libraries.")
64+
endif()
65+
execute_process(COMMAND ${CMAKE_COMMAND} --build ${AWS_DEPS_BUILD_DIR} --config ${CMAKE_BUILD_TYPE}
66+
RESULT_VARIABLE BUILD_AWSCRT_EXIT_CODE)
67+
68+
if (NOT ${BUILD_AWSCRT_EXIT_CODE} EQUAL 0)
69+
message(FATAL_ERROR "Failed to build aws crt libraries.")
70+
endif()
71+
message(STATUS "AWS Common Runtime is installed at: ${AWS_DEPS_INSTALL_DIR}")
72+
73+
#the following two lines are done in this branch intentionally, don't move it. project() does some magic that
74+
#we don't want happening until we're done with the above code.
75+
list(APPEND CMAKE_PREFIX_PATH "${AWS_DEPS_INSTALL_DIR}")
76+
77+
project(aws-iot-device-sdk-cpp-v2 CXX)
78+
79+
else()
80+
#the following two lines are done in this branch intentionally, don't move it. project() does some magic that
81+
#we want happening exactly right now.
82+
project(aws-iot-device-sdk-cpp-v2 CXX)
83+
84+
endif()
85+
1086
list(APPEND CMAKE_MODULE_PATH "${CMAKE_PREFIX_PATH}/${CMAKE_INSTALL_LIBDIR}/cmake")
1187

1288
if (NOT CMAKE_CXX_STANDARD)

aws-common-runtime/CMakeLists.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
cmake_minimum_required(VERSION 3.1)
2+
3+
project(aws-crt)
4+
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
5+
6+
if(NOT CMAKE_BUILD_TYPE)
7+
set(CMAKE_BUILD_TYPE Release)
8+
endif()
9+
10+
include(ExternalProject)
11+
12+
set(AWS_DEPS_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Dependencies install directory.")
13+
set(AWS_DEPS_BIN_DIR "${AWS_DEPS_INSTALL_DIR}/bin" CACHE PATH "Dependencies binary install directory.")
14+
set(AWS_DEPS_LIB_DIR "${AWS_DEPS_INSTALL_DIR}/lib" CACHE PATH "Dependencies library install directory.")
15+
set(AWS_DEPS_BUILD_DIR "${CMAKE_BINARY_DIR}/build" CACHE PATH "Dependencies build directory.")
16+
set(AWS_DEPS_DOWNLOAD_DIR "${AWS_DEPS_BUILD_DIR}/downloads" CACHE PATH "Dependencies download directory.")
17+
18+
message("install dir ${AWS_DEPS_INSTALL_DIR}")
19+
20+
set(AWS_CRT_CPP_URL "https://github.com/awslabs/aws-crt-cpp.git")
21+
set(AWS_CRT_CPP_SHA "v0.4.6")
22+
include(BuildAwsCrtCpp)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
if("${TARGET_ARCH}" STREQUAL ANDROID)
2+
ExternalProject_Add(AwsCrtCpp
3+
PREFIX ${AWS_DEPS_BUILD_DIR}
4+
GIT_REPOSITORY ${AWS_CRT_CPP_URL}
5+
GIT_TAG ${AWS_CRT_CPP_SHA}
6+
BUILD_IN_SOURCE 0
7+
UPDATE_COMMAND ""
8+
CMAKE_ARGS
9+
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
10+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
11+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
12+
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
13+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
14+
-DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL}
15+
-DANDROID_ABI=${ANDROID_ABI}
16+
-DANDROID_TOOLCHAIN_NAME=${ANDROID_TOOLCHAIN_NAME}
17+
-DANDROID_STANDALONE_TOOLCHAIN=${ANDROID_STANDALONE_TOOLCHAIN}
18+
-DANDROID_STL=${ANDROID_STL}
19+
-DENABLE_HW_OPTIMIZATION=OFF
20+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
21+
-DBUILD_DEPS=ON
22+
)
23+
elseif(MSVC)
24+
ExternalProject_Add(AwsCrtCpp
25+
PREFIX ${AWS_DEPS_BUILD_DIR}
26+
GIT_REPOSITORY ${AWS_CRT_CPP_URL}
27+
GIT_TAG ${AWS_CRT_CPP_SHA}
28+
BUILD_IN_SOURCE 0
29+
UPDATE_COMMAND ""
30+
CMAKE_ARGS
31+
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
32+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
33+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
34+
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
35+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
36+
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
37+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
38+
-DBUILD_DEPS=ON
39+
)
40+
else()
41+
ExternalProject_Add(AwsCrtCpp
42+
PREFIX ${AWS_DEPS_BUILD_DIR}
43+
GIT_REPOSITORY ${AWS_CRT_CPP_URL}
44+
GIT_TAG ${AWS_CRT_CPP_SHA}
45+
BUILD_IN_SOURCE 0
46+
UPDATE_COMMAND ""
47+
CMAKE_ARGS
48+
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
49+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
50+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
51+
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
52+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
53+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
54+
-DBUILD_DEPS=ON
55+
)
56+
endif()

0 commit comments

Comments
 (0)