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