1- CMAKE_MINIMUM_REQUIRED (VERSION 3.5 )
1+ CMAKE_MINIMUM_REQUIRED (VERSION 3.20 )
22
3- set (GA_SOURCES_DIR "${PROJECT_SOURCE_DIR} /source" )
4- set (DEPENDENCIES_DIR "${PROJECT_SOURCE_DIR} /source/dependencies" )
3+ PROJECT (GameAnalytics)
4+
5+ set (GA_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /source" )
6+ set (DEPENDENCIES_DIR "${GA_SOURCE_DIR} /dependencies" )
7+ set (EXTERNALS_DIR "${CMAKE_CURRENT_SOURCE_DIR} /externals" )
8+ set (LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR} /libs" )
9+ set (GA_DIR "${CMAKE_CURRENT_SOURCE_DIR} /gameanalytics" )
10+
11+ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR} /CMakeIncludes" )
12+
13+ include ("create_source_groups_macro" )
14+ include ("eval_condition_macro" )
15+
16+ option (GA_SHARED_LIB "Build GA as a shared library" OFF )
17+ option (GA_UWP_BUILD "Build GA for UWP (if targeting windows)" OFF )
18+ option (GA_BUILD_SAMPLE "Builds the GA Sample app" ON )
19+ option (GA_USE_PACKAGE "Use installed packages for dependencies" OFF )
20+
21+ # set directories
22+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR} /Debug" )
23+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR} /Release" )
24+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR} /Debug" )
25+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR} /Release" )
26+
27+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -D_DEBUG" )
28+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG" )
29+
30+ set (CMAKE_CXX_STANDARD 17)
531
632include_directories (
33+ # gameanalytics includes
34+ "${GA_SOURCE_DIR} /gameanalytics"
35+
36+ # depndencies includes
737 "${DEPENDENCIES_DIR} "
838 "${DEPENDENCIES_DIR} /crossguid"
939 "${DEPENDENCIES_DIR} /nlohmann"
@@ -12,10 +42,91 @@ include_directories(
1242 "${DEPENDENCIES_DIR} /sqlite"
1343 "${DEPENDENCIES_DIR} /crypto"
1444 "${DEPENDENCIES_DIR} /miniz"
15- "${DEPENDENCIES_DIR} /curl/include"
45+ "${EXTERNALS_DIR} /curl/include"
46+ "${EXTERNALS_DIR} /openssl/include"
1647)
1748
18- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR} /Debug" )
19- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR} /Release" )
20- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR} /Debug" )
21- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR} /Release" )
49+ FILE (GLOB_RECURSE CPP_SOURCES
50+ # Add GameAnalytics Sources
51+ "${GA_SOURCE_DIR} /gameanalytics/*.h"
52+ "${GA_SOURCE_DIR} /gameanalytics/*.cpp"
53+
54+ # Add dependencies
55+ "${DEPENDENCIES_DIR} /crossguid/*"
56+ "${DEPENDENCIES_DIR} /nlohmann/*"
57+ "${DEPENDENCIES_DIR} /stacktrace/*"
58+ "${DEPENDENCIES_DIR} /zf_log/*"
59+ "${DEPENDENCIES_DIR} /sqlite/*"
60+ "${DEPENDENCIES_DIR} /crypto/*"
61+ "${DEPENDENCIES_DIR} /miniz/*"
62+ "${DEPENDENCIES_DIR} /stackwalker/*"
63+ )
64+
65+ create_source_groups(CPP_SOURCES)
66+
67+ if (${GA_USE_PACKAGE} )
68+ find_package (CURL REQUIRED PATHS ${EXTERNALS_DIR} /curl)
69+ find_package (OpenSSL REQUIRED PATHS ${EXTERNALS_DIR} /openssl)
70+ set (LIBS CURL::libcurl)
71+ else ()
72+ add_definitions ("-DUSE_OPENSSL -DCURL_STATICLIB" )
73+ add_definitions ("-DCRYPTOPP_DISABLE_ASM" )
74+
75+ link_directories (
76+ "${EXTERNALS_DIR} /openssl/1.1.1d/libs/${PLATFORM} "
77+ "${EXTERNALS_DIR} /curl/lib/${PLATFORM} "
78+ )
79+
80+ if (WIN32 )
81+ set (LIBS libcurl.lib libeay32.lib ssleay32.lib)
82+ else ()
83+ set (LIBS libcurl.a libssl.a libcrypto.a)
84+ endif ()
85+
86+ endif ()
87+
88+ if (${GA_SHARED_LIB} )
89+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGA_SHARED_LIB" )
90+ set (LIB_TYPE SHARED)
91+ else ()
92+ set (LIB_TYPE STATIC )
93+ endif ()
94+
95+ if (WIN32 )
96+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGUID_WINDOWS" )
97+ if (${GA_SHARED_LIB} )
98+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd" )
99+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD" )
100+ else ()
101+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd" )
102+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT" )
103+ endif ()
104+
105+ if (${GA_UWP_BUILD} )
106+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGA_UWP_BUILD" )
107+ endif ()
108+
109+ elseif (APPLE )
110+
111+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGUID_CFUUID" )
112+ FILE (GLOB_RECURSE MACOS_SOURCES "${GA_SOURCE_DIR} /gameanalytics/Platform/*.mm" )
113+ list (APPEND CPP_SOURCES ${MACOS_SOURCES} )
114+ list (APPEND LIBS
115+ "-framework CoreFoundation"
116+ "-framework Foundation"
117+ "-framework CoreServices"
118+ "-framework systemconfiguration"
119+ )
120+
121+ create_source_groups(MACOS_SOURCES)
122+
123+ elseif (LINUX)
124+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGUID_LIBUUID" )
125+ endif ()
126+
127+ if (${GA_BUILD_SAMPLE} )
128+ add_subdirectory ("${CMAKE_CURRENT_SOURCE_DIR} /sample" )
129+ endif ()
130+
131+ add_library (GameAnalytics ${LIB_TYPE} ${CPP_SOURCES} )
132+ target_link_libraries (GameAnalytics ${LIBS} )
0 commit comments