@@ -29,6 +29,7 @@ find_package(Git)
29
29
# ADD_CUSTOM_CLIENTS - semi-colon delimited list of format serviceName=<yourserviceName>,version=<theVersionNumber>;serviceName2=<yourOtherServiceName>,version=<versionNumber2>
30
30
# to use these arguments, you should add the api definition .normal.json file for your service to the api-description folder in the generator.
31
31
# NDK_DIR - directory where the android NDK is installed; if not set, the location will be read from the ANDROID_NDK environment variable
32
+ # CUSTOM_PLATFORM_DIR - directory where custom platform scripts, modules, and source resides
32
33
33
34
# Settings to pull in an external, non-system install of Curl
34
35
# On platforms that by default build these libraries (Android), you must define these for both Curl and Openssl; partial building isn't supported
@@ -73,6 +74,7 @@ SET(PLATFORM_WINDOWS 0)
73
74
SET (PLATFORM_LINUX 0)
74
75
SET (PLATFORM_ANDROID 0)
75
76
SET (PLATFORM_APPLE 0)
77
+ SET (PLATFORM_CUSTOM 0)
76
78
77
79
if ("${TARGET_ARCH} " STREQUAL "WINDOWS" )
78
80
SET (PLATFORM_WINDOWS 1)
@@ -88,6 +90,8 @@ elseif("${TARGET_ARCH}" STREQUAL "ANDROID")
88
90
endif ()
89
91
# TODO: check for patch, it's required to build zlib/curl/openssl
90
92
# TODO: check for sh, it's required to generate the standalone toolchains
93
+ elseif (TARGET_ARCH)
94
+ SET (PLATFORM_CUSTOM 1)
91
95
else ()
92
96
message (STATUS "TARGET_ARCH not specified; inferring host OS to be platform compilation target" )
93
97
if (WIN32 )
@@ -113,6 +117,7 @@ endif()
113
117
if (PLATFORM_WINDOWS)
114
118
message (STATUS "Generating windows build config" )
115
119
set (SDK_INSTALL_BINARY_PREFIX "windows" )
120
+ set (USE_WINDOWS_DLL_SEMANTICS 1)
116
121
elseif (PLATFORM_LINUX)
117
122
message (STATUS "Generating linux build config" )
118
123
set (SDK_INSTALL_BINARY_PREFIX "linux" )
@@ -223,6 +228,33 @@ elseif(PLATFORM_ANDROID)
223
228
else ()
224
229
message (STATUS "Standalone toolchain disabled; this is not a well-supported option" )
225
230
endif ()
231
+
232
+ add_definitions ("-DDISABLE_HOME_DIR_REDIRECT" )
233
+
234
+ elseif (PLATFORM_CUSTOM)
235
+ if (NOT CUSTOM_PLATFORM_DIR )
236
+ message (FATAL_ERROR "Custom platforms require the CUSTOM_PLATFORM_DIR parameter to be set" )
237
+ endif ()
238
+
239
+ file (TO_CMAKE_PATH "${CUSTOM_PLATFORM_DIR} " __custom_platform_dir)
240
+ if (NOT IS_DIRECTORY "${__custom_platform_dir} " )
241
+ message (FATAL_ERROR "${CUSTOM_PLATFORM_DIR} is not a valid directory for a custom platform" )
242
+ endif ()
243
+
244
+ set (__toolchain_file ${__custom_platform_dir} /${TARGET_ARCH} .toolchain.cmake)
245
+ IF (NOT (EXISTS ${__toolchain_file} ))
246
+ message (FATAL "Custom architecture target ${TARGET_ARCH} requires a cmake toolchain file at: ${__toolchain_file} " )
247
+ endif ()
248
+ SET (CMAKE_TOOLCHAIN_FILE ${__toolchain_file} )
249
+
250
+ set (CUSTOM_PLATFORM_SOURCE_PATH "${__custom_platform_dir} /src" )
251
+ list (APPEND CMAKE_MODULE_PATH "${__custom_platform_dir} /modules" )
252
+
253
+ string (TOLOWER "${TARGET_ARCH} " __lower_arch)
254
+ set (SDK_INSTALL_BINARY_PREFIX ${__lower_arch} )
255
+ include (${__custom_platform_dir} /${__lower_arch} _platform.cmake)
256
+
257
+ message (STATUS "Generating ${__lower_arch} build config" )
226
258
else ()
227
259
message (FATAL_ERROR "Unknown target platform. How did this happen?" )
228
260
endif ()
@@ -231,7 +263,6 @@ if(BUILD_SHARED_LIBS)
231
263
SET (ARCHIVE_DIRECTORY "bin" )
232
264
SET (LIBTYPE SHARED)
233
265
if (PLATFORM_WINDOWS)
234
- add_definitions ("-DUSE_IMPORT_EXPORT" )
235
266
SET (SUFFIX dll)
236
267
elseif (PLATFORM_LINUX OR PLATFORM_ANDROID)
237
268
SET (SUFFIX so)
@@ -363,8 +394,17 @@ elseif(ENABLE_INJECTED_ENCRYPTION)
363
394
message (STATUS "You will need to inject an encryption implementation before making any http requests!" )
364
395
endif ()
365
396
397
+ # use response files to prevent command-line-too-big errors for large libraries like iam
398
+ SET (CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
399
+ SET (CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES 1)
400
+ SET (CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@" )
401
+
366
402
project (aws-sdk-cpp-all )
367
403
404
+ if (PLATFORM_CUSTOM)
405
+ apply_custom_post_toolchain_settings()
406
+ endif ()
407
+
368
408
# install setup
369
409
# This install section must come after the initial "project(..)" declaration since that's when the compiler settings are discovered; prior to that CMAKE_SIZEOF_VOID_P is empty
370
410
# install syntax (after building): cmake -DCMAKE_INSTALL_CONFIG_NAME=<Release/Debug> -DCMAKE_INSTALL_PREFIX=<install_root> -P cmake_install.cmake
@@ -407,7 +447,12 @@ SET(COMPILER_GCC 0)
407
447
if (MSVC )
408
448
SET (COMPILER_MSVC 1)
409
449
else ()
410
- SET (COMPILER_GCC 1)
450
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
451
+ SET (COMPILER_CLANG 1)
452
+ else ()
453
+ SET (COMPILER_GCC 1)
454
+ endif ()
455
+ SET (USE_GCC_FLAGS 1)
411
456
endif ()
412
457
413
458
# Based on the FORCE_SHARED_CRT and BUILD_SHARED_LIBS options, make sure our compile/link flags bring in the right CRT library
@@ -736,20 +781,29 @@ set(CMAKE_CONFIGURATION_TYPES
736
781
# pass this flag to the jsoncpp amalgamated source
737
782
add_definitions (-DJSON_USE_EXCEPTION=0)
738
783
739
- if (NOT PLATFORM_WINDOWS)
740
- SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
741
- SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions" )
742
- if (NOT BUILD_SHARED_LIBS )
743
- SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC" )
784
+ # cmake warnings
785
+ if (MSVC )
786
+ #remove bogus errors at generation time if these variables haven't been manually set
787
+ if (NOT CMAKE_CONFIGURATION_TYPES )
788
+ set (CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" )
789
+ endif ()
790
+
791
+ if (NOT CMAKE_CXX_FLAGS_DEBUGOPT)
792
+ set (CMAKE_CXX_FLAGS_DEBUGOPT "" )
793
+ endif ()
794
+
795
+ if (NOT CMAKE_EXE_LINKER_FLAGS_DEBUGOPT )
796
+ set (CMAKE_EXE_LINKER_FLAGS_DEBUGOPT "" )
797
+ endif ()
798
+
799
+ if (NOT CMAKE_SHARED_LINKER_FLAGS_DEBUGOPT)
800
+ set (CMAKE_SHARED_LINKER_FLAGS_DEBUGOPT "" )
744
801
endif ()
745
802
endif ()
746
803
747
- # warning control
804
+ # compiler warning control
748
805
if (PLATFORM_WINDOWS)
749
806
if (MSVC )
750
- # some of the clients are exceeding the 16-bit code section limit when building x64 debug, so use /bigobj when we build
751
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj" )
752
-
753
807
# warnings as errors, max warning level (4)
754
808
if (NOT CMAKE_CXX_FLAGS MATCHES "/WX" )
755
809
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX" )
@@ -761,45 +815,69 @@ if(PLATFORM_WINDOWS)
761
815
else ()
762
816
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4" )
763
817
endif ()
764
-
765
- #remove bogus errors at generation time if these variables haven't been manually set
766
- if (NOT CMAKE_CONFIGURATION_TYPES )
767
- set (CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" )
768
- endif ()
769
-
770
- if (NOT CMAKE_CXX_FLAGS_DEBUGOPT)
771
- set (CMAKE_CXX_FLAGS_DEBUGOPT "" )
772
- endif ()
773
-
774
- if (NOT CMAKE_EXE_LINKER_FLAGS_DEBUGOPT )
775
- set (CMAKE_EXE_LINKER_FLAGS_DEBUGOPT "" )
776
- endif ()
777
-
778
- if (NOT CMAKE_SHARED_LINKER_FLAGS_DEBUGOPT)
779
- set (CMAKE_SHARED_LINKER_FLAGS_DEBUGOPT "" )
780
- endif ()
781
818
endif ()
782
- elseif (PLATFORM_LINUX OR PLATFORM_ANDROID OR PLATFORM_APPLE )
819
+ elseif (USE_GCC_FLAGS )
783
820
# max warning level, warnings are errors, turn off unused private field. We have one for an empty class.
784
821
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -pedantic -Wextra" )
785
822
786
- if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
823
+ if (COMPILER_CLANG )
787
824
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-private-field" )
825
+ if (PLATFORM_ANDROID AND ANDROID_ABI MATCHES "mips*" )
826
+ string (REGEX REPLACE "-finline-functions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
827
+ endif ()
788
828
endif ()
789
829
endif ()
790
830
791
- if (PLATFORM_WINDOWS)
831
+ # other compiler flags
832
+ if (MSVC )
833
+ # some of the clients are exceeding the 16-bit code section limit when building x64 debug, so use /bigobj when we build
834
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj" )
835
+
792
836
if (NOT ENABLE_RTTI)
793
837
string (REGEX REPLACE "/GR " " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
794
838
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-" )
795
839
endif ()
796
- else ()
797
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions" )
840
+
841
+ # special windows build options:
842
+ # debug info: pdbs with dlls, embedded in static libs
843
+ # release optimisations to purely focus on size, override debug info settings as necessary
844
+ if (BUILD_SHARED_LIBS )
845
+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi" )
846
+ set (CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF" )
847
+ else ()
848
+ if (CMAKE_CXX_FLAGS MATCHES "/Zi" )
849
+ string (REGEX REPLACE "/Zi" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
850
+ endif ()
851
+ if (CMAKE_CXX_FLAGS_DEBUG MATCHES "/Zi" )
852
+ message (STATUS "Clearing pdb setting" )
853
+ string (REGEX REPLACE "/Zi" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} " )
854
+ endif ()
855
+
856
+ # put Z7 in config-specific flags so we can strip from release if we're concerned about size
857
+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Z7" )
858
+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Z7" )
859
+ endif ()
860
+
798
861
if (MINIMIZE_SIZE)
799
- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s" )
862
+ # strip debug info from release
863
+ string (REGEX REPLACE "/Z[a-zA-Z0-9]" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} " )
864
+ string (REGEX REPLACE "/DEBUG" "" CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} " )
865
+
866
+ # strip optimization settings and replace with
867
+ string (REGEX REPLACE "/O[a-zA-Z0-9]*" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} " )
868
+
869
+ # pure size flags
870
+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O1 /Ob0 /Os" )
800
871
endif ()
801
- if (NOT ENABLE_RTTI)
802
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti" )
872
+ elseif (USE_GCC_FLAGS)
873
+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions" )
874
+
875
+ if (NOT BUILD_SHARED_LIBS )
876
+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC" )
877
+ endif ()
878
+
879
+ if (MINIMIZE_SIZE)
880
+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s" )
803
881
endif ()
804
882
endif ()
805
883
@@ -945,41 +1023,14 @@ if(BUILD_CURL OR BUILD_OPENSSL)
945
1023
set_property (TARGET curl PROPERTY IMPORTED_LOCATION ${CURL_LIBRARY_DIR} /libcurl.a)
946
1024
endif ()
947
1025
948
- # special windows build options:
949
- # debug info: pdbs with dlls, embedded in static libs
950
- # release optimisations to purely focus on size, override debug info settings as necessary
951
- if (PLATFORM_WINDOWS)
1026
+ if (USE_WINDOWS_DLL_SEMANTICS)
952
1027
if (BUILD_SHARED_LIBS )
953
- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi" )
954
- set (CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF" )
955
- else ()
956
- if (CMAKE_CXX_FLAGS MATCHES "/Zi" )
957
- string (REGEX REPLACE "/Zi" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
958
- endif ()
959
- if (CMAKE_CXX_FLAGS_DEBUG MATCHES "/Zi" )
960
- message (STATUS "Clearing pdb setting" )
961
- string (REGEX REPLACE "/Zi" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} " )
962
- endif ()
963
-
964
- # put Z7 in config-specific flags so we can strip from release if we're concerned about size
965
- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Z7" )
966
- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Z7" )
1028
+ add_definitions ("-DUSE_IMPORT_EXPORT" )
967
1029
endif ()
968
1030
969
- if (MINIMIZE_SIZE)
970
- # strip debug info from release
971
- string (REGEX REPLACE "/Z[a-zA-Z0-9]" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} " )
972
- string (REGEX REPLACE "/DEBUG" "" CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} " )
973
-
974
- # strip optimization settings and replace with
975
- string (REGEX REPLACE "/O[a-zA-Z0-9]*" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} " )
976
-
977
- # pure size flags
978
- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O1 /Ob0 /Os" )
979
- endif ()
1031
+ add_definitions (-DUSE_WINDOWS_DLL_SEMANTICS)
980
1032
endif ()
981
1033
982
-
983
1034
# default libraries to link in per-platform
984
1035
if (PLATFORM_WINDOWS)
985
1036
set (PLATFORM_DEP_LIBS Userenv )
@@ -1009,6 +1060,10 @@ endif()
1009
1060
1010
1061
LIST (APPEND EXPORTS "" )
1011
1062
1063
+ if (PLATFORM_CUSTOM)
1064
+ apply_custom_platform_settings()
1065
+ endif ()
1066
+
1012
1067
#sdks
1013
1068
add_subdirectory (aws-cpp-sdk-core)
1014
1069
LIST (APPEND EXPORTS "aws-cpp-sdk-core" )
0 commit comments