1- cmake_minimum_required (VERSION 3.23)
1+ # I think we are constrained to the version that the latest android sdk uses, for Android builds.
2+ cmake_minimum_required (VERSION 3.22.1)
23include (version .cmake)
34
4-
55if (CMAKE_OSX_SYSROOT STREQUAL "iphonesimulator" )
66 # this hack seems to be required for now, otherwise CMake still thinks we are building for arm...
77 set (CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "arm64" )
5050 set (HTTP_IMPL "libhttpclient" )
5151 elseif (WITH_CPPRESTSDK)
5252 set (HTTP_IMPL "cpprestsdk" )
53+ elseif (BUILD_CURL_HTTP)
54+ set (HTTP_IMPL "curl" )
5355 endif ()
5456
5557 if (WITH_LIBHTTPCLIENT_WS)
@@ -63,18 +65,21 @@ endif()
6365
6466if (DEFINED ANDROID_ABI)
6567 if (DEFINED VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
66- message (FATAL "Cannot specify an external chainload toolchain if building for Android." )
68+ message (FATAL_ERROR "Cannot specify an external chainload toolchain if building for Android." )
6769 endif ()
6870
6971 set (VCPKG_CHAINLOAD_TOOLCHAIN_FILE $ENV{ANDROID_NDK_HOME} /build /cmake/android.toolchain.cmake)
7072endif ()
7173
7274cmake_policy (SET CMP0012 NEW)
7375
74- # Kickstarts vcpkg dependency manager. It will parse vcpkg.json and install all configured
75- # dependencies. Some dependencies are optional and enabled via VCPKG_MANIFEST_FEATURES
76- set (CMAKE_TOOLCHAIN_FILE $ENV{VCPKG_ROOT} /scripts/buildsystems/vcpkg.cmake
77- CACHE FILEPATH "Vcpkg toolchain file" )
76+ ## force so that gradle doesn't stomp vcpkg toolchain with the android toolchain
77+ set (CMAKE_TOOLCHAIN_FILE $ENV{VCPKG_ROOT} /scripts/buildsystems/vcpkg.cmake CACHE FILEPATH "Vcpkg toolchain file" FORCE)
78+
79+ if (DEFINED ANDROID_ABI AND NOT DEFINED VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
80+ # CmakePresets.json doesn't allow us to use cmake vars in values, so set it here
81+ set (VCPKG_CHAINLOAD_TOOLCHAIN_FILE $ENV{ANDROID_NDK_HOME} /build /cmake/android.toolchain.cmake)
82+ endif ()
7883
7984project (nakama-sdk LANGUAGES CXX)
8085
@@ -205,6 +210,8 @@ endif()
205210
206211if (HTTP_IMPL STREQUAL "cpprestsdk" )
207212 add_subdirectory (impl/httpCppRest EXCLUDE_FROM_ALL )
213+ elseif (HTTP_IMPL STREQUAL "curl" )
214+ add_subdirectory (impl/httpCurl EXCLUDE_FROM_ALL )
208215endif ()
209216
210217add_library (nakama-ws-impl INTERFACE )
@@ -225,6 +232,41 @@ if(HTTP_IMPL STREQUAL "libhttpclient")
225232 add_subdirectory (impl/httpLibHttpClient EXCLUDE_FROM_ALL )
226233endif ()
227234
235+ if (ANDROID AND (HTTP_IMPL STREQUAL "curl" OR WS_IMPL STREQUAL "wslay" ))
236+ add_subdirectory (impl/android)
237+ set (CREATE_JAR TRUE ) # we need the code for accessing native Android CA store.
238+
239+ if (HTTP_IMPL STREQUAL "curl" )
240+ target_link_libraries (nakama-impl-http-libcurl PUBLIC android-ca)
241+ endif ()
242+
243+ if (WS_IMPL STREQUAL "wslay" )
244+ target_link_libraries (nakama-impl-ws-wslay INTERFACE android-ca)
245+ endif ()
246+
247+ list (APPEND NAKAMA_SDK_DEPS $<TARGET_OBJECTS:android-ca>)
248+ else ()
249+ set (CREATE_JAR FALSE )
250+ endif ()
251+
252+ if (CREATE_JAR)
253+ message ("-- Configured to build Java code with Gradle." )
254+
255+ set (LIBNAKAMA_AAR "${CMAKE_SOURCE_DIR} /android/app/build/outputs/aar/libnakama-sdk.aar" )
256+ # TODO it's very odd that add_custom_command did not seem to trigger, so we use add_custom_target
257+ add_custom_target (
258+ nakama-aar ALL
259+ COMMAND ./gradlew assemble
260+ BYPRODUCTS ${LIBNAKAMA_AAR}
261+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} /android
262+ VERBATIM
263+ USES_TERMINAL
264+ DEPENDS ${CMAKE_SOURCE_DIR} /test /android/src/main/java/com/heroiclabs/nakamatest/MainActivity.java
265+ )
266+
267+ install (FILES ${LIBNAKAMA_AAR} DESTINATION ${CMAKE_INSTALL_LIBDIR} )
268+ endif ()
269+
228270find_package (optional -lite CONFIG REQUIRED)
229271# SDK API
230272add_subdirectory (interface )
@@ -245,7 +287,6 @@ list(APPEND NAKAMA_SDK_DEPS
245287 $<TARGET_OBJECTS:nakama-sdk-client-factory>
246288 $<TARGET_OBJECTS:nakama-sdk-rtclient-factory>
247289
248-
249290 # Xcode generator doesn't produce library for a target with no "own" files
250291 # https://gitlab.kitware.com/cmake/cmake/-/issues/23688
251292 ${DUMMY_CPP}
@@ -258,6 +299,7 @@ if (BUILD_GRPC_CLIENT)
258299 list (APPEND NAKAMA_SDK_DEPS $<TARGET_OBJECTS:nakama-sdk-core-grpc>)
259300endif ()
260301
302+ ## TODO this can be massively simplified
261303if (WITH_LIBHTTPCLIENT_WS)
262304 target_compile_definitions (nakama-sdk-core-rt PUBLIC BUILD_WEBSOCKET_LIBHTTPCLIENT)
263305 target_compile_definitions (nakama-sdk-core-common PUBLIC BUILD_WEBSOCKET_LIBHTTPCLIENT)
@@ -296,7 +338,7 @@ set_target_properties(nakama-sdk PROPERTIES
296338 MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LIBNAKAMA_VERSION}
297339 VERSION ${LIBNAKAMA_VERSION}
298340 SOVERSION ${LIBNAKAMA_SOVERSION}
299- )
341+ )
300342
301343add_library (nakama::sdk ALIAS nakama-sdk)
302344target_link_libraries (nakama-sdk
0 commit comments