11cmake_minimum_required (VERSION 3.2 FATAL_ERROR)
22project (aws-iot-sdk-cpp CXX)
3+ option (BUILD_SHARED_LIBRARY "Build the library as a shared object, will build it as a static library otherwise" NO )
34
45######################################
56# Section : Disable in-source builds #
67######################################
78
8- if (${CMAKE_SOURCE_DIR } STREQUAL ${CMAKE_BINARY_DIR } )
9+ if (${PROJECT_SOURCE_DIR } STREQUAL ${PROJECT_BINARY_DIR } )
910 message ( FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt and CMakeFiles folder." )
1011endif ()
1112
@@ -30,50 +31,59 @@ if(UNIX AND NOT APPLE)
3031 set (THREADS_PREFER_PTHREAD_FLAG ON )
3132 set (CUSTOM_COMPILER_FLAGS "-fno-exceptions -Wall -Werror" )
3233elseif (APPLE )
33- set (CUSTOM_COMPILER_FLAGS "-fno-exceptions" )
34+ set (CUSTOM_COMPILER_FLAGS "-fno-exceptions -Werror -Wall " )
3435elseif (WIN32 )
3536 set (CUSTOM_COMPILER_FLAGS "/W4" )
3637endif ()
3738
39+ if (NOT DEPENDENCY_DIR)
40+ set (DEPENDENCY_DIR "third_party" )
41+ endif ()
42+
3843#############################
3944# Add SDK Target #
4045#############################
4146# Create library file. The Client applications MUST link to below target if using this CMake file
4247set (SDK_TARGET_NAME aws-iot-sdk-cpp)
43- add_library (${SDK_TARGET_NAME} "" )
48+ if (BUILD_SHARED_LIBRARY)
49+ add_library (${SDK_TARGET_NAME} SHARED "" )
50+ set_target_properties (${SDK_TARGET_NAME} PROPERTIES SUFFIX ".so" )
51+ else ()
52+ add_library (${SDK_TARGET_NAME} "" )
53+ endif ()
4454
4555# Download and include rapidjson, not optional
46- configure_file (CMakeLists-rapidjson.txt.in ${CMAKE_BINARY_DIR} /third_party /rapidjson/download/CMakeLists.txt)
56+ configure_file (CMakeLists-rapidjson.txt.in ${CMAKE_BINARY_DIR} /${DEPENDENCY_DIR} /rapidjson/download/CMakeLists.txt)
4757execute_process (COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR} " .
48- WORKING_DIRECTORY ${CMAKE_BINARY_DIR} /third_party /rapidjson/download)
58+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR} /${DEPENDENCY_DIR} /rapidjson/download)
4959execute_process (COMMAND ${CMAKE_COMMAND} --build .
50- WORKING_DIRECTORY ${CMAKE_BINARY_DIR} /third_party /rapidjson/download)
51- target_include_directories (${SDK_TARGET_NAME} PRIVATE ${CMAKE_BINARY_DIR} /third_party /rapidjson/src/include )
60+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR} /${DEPENDENCY_DIR} /rapidjson/download)
61+ target_include_directories (${SDK_TARGET_NAME} PRIVATE ${CMAKE_BINARY_DIR} /${DEPENDENCY_DIR} /rapidjson/src/include )
5262
5363# Get Common SDK Sources
54- file (GLOB_RECURSE SDK_SOURCES FOLLOW_SYMLINKS ${CMAKE_SOURCE_DIR } /src/*.cpp)
55- target_include_directories (${SDK_TARGET_NAME} PRIVATE ${CMAKE_SOURCE_DIR } /include )
64+ file (GLOB_RECURSE SDK_SOURCES FOLLOW_SYMLINKS ${PROJECT_SOURCE_DIR } /src/*.cpp)
65+ target_include_directories (${SDK_TARGET_NAME} PRIVATE ${PROJECT_SOURCE_DIR } /include )
5666target_sources (${SDK_TARGET_NAME} PRIVATE ${SDK_SOURCES} )
5767
5868# Configure Threading library
5969find_package (Threads REQUIRED)
60- set (THREAD_LIBRARY_LINK_STRING "Threads::Threads" )
61- target_link_libraries (${SDK_TARGET_NAME} "Threads::Threads" )
70+ set (THREAD_LIBRARY_LINK_STRING "Threads::Threads" -ldl )
71+ target_link_libraries (${SDK_TARGET_NAME} "Threads::Threads" -ldl )
6272
6373if (BUILD_DOCS)
6474 find_package (Doxygen REQUIRED)
65- file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR } /docs)
66- set (DOC_BINARY_DIR ${CMAKE_BINARY_DIR } /docs)
67- set (DOC_SOURCE_DIR ${CMAKE_SOURCE_DIR } /.)
75+ file (MAKE_DIRECTORY ${PROJECT_BINARY_DIR } /docs)
76+ set (DOC_BINARY_DIR ${PROJECT_BINARY_DIR } /docs)
77+ set (DOC_SOURCE_DIR ${PROJECT_SOURCE_DIR } /.)
6878
69- set (doxygen_conf_in ${CMAKE_SOURCE_DIR } /doxygen/doxygen.conf.in)
70- set (doxygen_conf ${CMAKE_BINARY_DIR } /doxygen/doxygen.conf)
79+ set (doxygen_conf_in ${PROJECT_SOURCE_DIR } /doxygen/doxygen.conf.in)
80+ set (doxygen_conf ${PROJECT_BINARY_DIR } /doxygen/doxygen.conf)
7181
7282 configure_file (${doxygen_conf_in} ${doxygen_conf} @ONLY)
7383
7484 add_custom_target (generate-sdk-docs
7585 COMMAND ${DOXYGEN_EXECUTABLE} ${doxygen_conf}
76- WORKING_DIRECTORY ${CMAKE_BINARY_DIR } /docs
86+ WORKING_DIRECTORY ${PROJECT_BINARY_DIR } /docs
7787 COMMENT "Generating SDK docs"
7888 VERBATIM )
7989endif ()
@@ -83,23 +93,23 @@ endif()
8393################################################
8494# TODO : Figure out a better way of handling Visual Studio solutions
8595if (MSVC )
86- file (GLOB SDK_COMMON_HEADERS "${CMAKE_SOURCE_DIR } /include/*.hpp" )
87- file (GLOB SDK_UTIL_COMMON_HEADERS "${CMAKE_SOURCE_DIR } /include/util/*.hpp" )
88- file (GLOB SDK_UTIL_LOGGING_HEADERS "${CMAKE_SOURCE_DIR } /include/util/logging/*.hpp" )
89- file (GLOB SDK_UTIL_MEMORY_STL_HEADERS "${CMAKE_SOURCE_DIR } /include/util/memory/stl/*.hpp" )
90- file (GLOB SDK_UTIL_THREADING_HEADERS "${CMAKE_SOURCE_DIR } /include/util/threading/*.hpp" )
91- file (GLOB SDK_MQTT_HEADERS "${CMAKE_SOURCE_DIR } /include/mqtt/*.hpp" )
92- file (GLOB SDK_SHADOW_HEADERS "${CMAKE_SOURCE_DIR } /include/shadow/*.hpp" )
93-
94- file (GLOB SDK_COMMON_SOURCES "${CMAKE_SOURCE_DIR } /src/*.cpp" )
95- file (GLOB SDK_UTIL_COMMON_SOURCES "${CMAKE_SOURCE_DIR } /src/util/*.cpp" )
96- file (GLOB SDK_UTIL_LOGGING_SOURCES "${CMAKE_SOURCE_DIR } /src/util/logging/*.cpp" )
97- file (GLOB SDK_UTIL_THREADING_SOURCES "${CMAKE_SOURCE_DIR } /src/util/threading/*.cpp" )
98- file (GLOB SDK_MQTT_SOURCES "${CMAKE_SOURCE_DIR } /src/mqtt/*.cpp" )
99- file (GLOB SDK_SHADOW_SOURCES "${CMAKE_SOURCE_DIR } /src/shadow/*.cpp" )
96+ file (GLOB SDK_COMMON_HEADERS "${PROJECT_SOURCE_DIR } /include/*.hpp" )
97+ file (GLOB SDK_UTIL_COMMON_HEADERS "${PROJECT_SOURCE_DIR } /include/util/*.hpp" )
98+ file (GLOB SDK_UTIL_LOGGING_HEADERS "${PROJECT_SOURCE_DIR } /include/util/logging/*.hpp" )
99+ file (GLOB SDK_UTIL_MEMORY_STL_HEADERS "${PROJECT_SOURCE_DIR } /include/util/memory/stl/*.hpp" )
100+ file (GLOB SDK_UTIL_THREADING_HEADERS "${PROJECT_SOURCE_DIR } /include/util/threading/*.hpp" )
101+ file (GLOB SDK_MQTT_HEADERS "${PROJECT_SOURCE_DIR } /include/mqtt/*.hpp" )
102+ file (GLOB SDK_SHADOW_HEADERS "${PROJECT_SOURCE_DIR } /include/shadow/*.hpp" )
103+
104+ file (GLOB SDK_COMMON_SOURCES "${PROJECT_SOURCE_DIR } /src/*.cpp" )
105+ file (GLOB SDK_UTIL_COMMON_SOURCES "${PROJECT_SOURCE_DIR } /src/util/*.cpp" )
106+ file (GLOB SDK_UTIL_LOGGING_SOURCES "${PROJECT_SOURCE_DIR } /src/util/logging/*.cpp" )
107+ file (GLOB SDK_UTIL_THREADING_SOURCES "${PROJECT_SOURCE_DIR } /src/util/threading/*.cpp" )
108+ file (GLOB SDK_MQTT_SOURCES "${PROJECT_SOURCE_DIR } /src/mqtt/*.cpp" )
109+ file (GLOB SDK_SHADOW_SOURCES "${PROJECT_SOURCE_DIR } /src/shadow/*.cpp" )
100110
101111 # Required to make Header files visible in Visual Studio
102- file (GLOB_RECURSE SDKHeaders FOLLOW_SYMLINKS ${CMAKE_SOURCE_DIR } /include /*.hpp)
112+ file (GLOB_RECURSE SDKHeaders FOLLOW_SYMLINKS ${PROJECT_SOURCE_DIR } /include /*.hpp)
103113 target_sources (${SDK_TARGET_NAME} PUBLIC ${SDKHeaders} )
104114
105115 source_group ("Header Files\\ aws-iot" FILES ${SDK_COMMON_HEADERS} )
@@ -133,3 +143,17 @@ add_subdirectory(tests/unit)
133143add_subdirectory (samples/PubSub)
134144
135145add_subdirectory (samples/ShadowDelta)
146+
147+ add_subdirectory (samples/Discovery EXCLUDE_FROM_ALL )
148+
149+ add_subdirectory (samples/StoryRobotArm EXCLUDE_FROM_ALL )
150+
151+ add_subdirectory (samples/StorySwitch EXCLUDE_FROM_ALL )
152+
153+ ##################################
154+ # Section: Define Install Target #
155+ ##################################
156+ if (NOT MSVC )
157+ install (TARGETS aws-iot-sdk-cpp DESTINATION lib)
158+ install (DIRECTORY include / DESTINATION include )
159+ endif ()
0 commit comments