geode/cmake/Platform.cmake

173 lines
5.8 KiB
CMake

include(cmake/PlatformDetect.cmake)
if (NOT ${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
set(GEODE_TARGET_PLATFORM GEODE_TARGET_PLATFORM PARENT_SCOPE)
endif()
if (GEODE_TARGET_PLATFORM STREQUAL "iOS")
set_target_properties(${PROJECT_NAME} PROPERTIES
SYSTEM_NAME iOS
OSX_SYSROOT ${GEODE_IOS_SDK}
OSX_ARCHITECTURES arm64
)
set(GEODE_OUTPUT_NAME "Geode.ios")
set(GEODE_PLATFORM_BINARY "Geode.ios.dylib")
set(GEODE_MOD_BINARY_SUFFIX ".ios.dylib" CACHE STRING "" FORCE)
if (NOT ${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
set(GEODE_TARGET_PLATFORM_SHORT "ios" PARENT_SCOPE)
else()
set(GEODE_TARGET_PLATFORM_SHORT "ios")
endif()
elseif (GEODE_TARGET_PLATFORM STREQUAL "MacOS")
set_target_properties(${PROJECT_NAME} PROPERTIES
SYSTEM_NAME MacOS
)
# for some reason, this value is initialized as an empty string by default. idk why
if (NOT DEFINED CMAKE_OSX_ARCHITECTURES OR CMAKE_OSX_ARCHITECTURES STREQUAL "")
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
endif()
# only exists as a global property
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15)
target_link_libraries(${PROJECT_NAME} INTERFACE
"-framework Cocoa"
"-framework OpenGL"
"-framework SystemConfiguration"
${GEODE_LOADER_PATH}/include/link/macos/libfmod.dylib
${GEODE_LOADER_PATH}/include/link/macos/libssl.a
${GEODE_LOADER_PATH}/include/link/macos/libcrypto.a
${GEODE_LOADER_PATH}/include/link/macos/libnghttp2.a
${GEODE_LOADER_PATH}/include/link/macos/libngtcp2.a
${GEODE_LOADER_PATH}/include/link/macos/libnghttp3.a
${GEODE_LOADER_PATH}/include/link/macos/libngtcp2_crypto_boringssl.a
${GEODE_LOADER_PATH}/include/link/macos/libcurl.a
)
target_compile_definitions(${PROJECT_NAME} INTERFACE
-DCommentType=CommentTypeDummy
-DGL_SILENCE_DEPRECATION
)
set(GEODE_OUTPUT_NAME "Geode")
set(GEODE_PLATFORM_BINARY "Geode.dylib")
set(GEODE_MOD_BINARY_SUFFIX ".dylib" CACHE STRING "" FORCE)
if (NOT ${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
set(GEODE_TARGET_PLATFORM_SHORT "mac" PARENT_SCOPE)
else()
set(GEODE_TARGET_PLATFORM_SHORT "mac")
endif()
elseif (GEODE_TARGET_PLATFORM STREQUAL "Win64")
set_target_properties(${PROJECT_NAME} PROPERTIES
SYSTEM_NAME Win64
GENERATOR_PLATFORM x64
)
target_compile_definitions(${PROJECT_NAME} INTERFACE NOMINMAX)
target_link_libraries(${PROJECT_NAME} INTERFACE
${GEODE_LOADER_PATH}/include/link/win64/libcocos2d.lib
${GEODE_LOADER_PATH}/include/link/win64/libExtensions.lib
${GEODE_LOADER_PATH}/include/link/win64/glew32.lib
${GEODE_LOADER_PATH}/include/link/win64/fmod.lib
opengl32
)
if (PROJECT_IS_TOP_LEVEL AND CMAKE_BUILD_TYPE STREQUAL "Debug")
target_link_libraries(${PROJECT_NAME} INTERFACE
${GEODE_LOADER_PATH}/include/link/win64/gd-libcurl.lib
)
else()
target_link_libraries(${PROJECT_NAME} INTERFACE
${GEODE_LOADER_PATH}/include/link/win64/ssl.lib
${GEODE_LOADER_PATH}/include/link/win64/crypto.lib
${GEODE_LOADER_PATH}/include/link/win64/nghttp2.lib
${GEODE_LOADER_PATH}/include/link/win64/ngtcp2.lib
${GEODE_LOADER_PATH}/include/link/win64/nghttp3.lib
${GEODE_LOADER_PATH}/include/link/win64/ngtcp2_crypto_boringssl.lib
${GEODE_LOADER_PATH}/include/link/win64/libcurl.lib
)
endif()
# Windows links against .lib and not .dll
set(GEODE_OUTPUT_NAME "Geode")
set(GEODE_PLATFORM_BINARY "Geode.lib")
set(GEODE_MOD_BINARY_SUFFIX ".dll" CACHE STRING "" FORCE)
if (NOT ${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
set(GEODE_TARGET_PLATFORM_SHORT "win" PARENT_SCOPE)
else()
set(GEODE_TARGET_PLATFORM_SHORT "win")
endif()
elseif (GEODE_TARGET_PLATFORM STREQUAL "Android32")
set_target_properties(${PROJECT_NAME} PROPERTIES
SYSTEM_NAME Android
)
target_link_libraries(${PROJECT_NAME} INTERFACE
c
unwind
${GEODE_LOADER_PATH}/include/link/android32/libssl.a
${GEODE_LOADER_PATH}/include/link/android32/libcrypto.a
${GEODE_LOADER_PATH}/include/link/android32/libnghttp2.a
${GEODE_LOADER_PATH}/include/link/android32/libngtcp2.a
${GEODE_LOADER_PATH}/include/link/android32/libnghttp3.a
${GEODE_LOADER_PATH}/include/link/android32/libngtcp2_crypto_boringssl.a
${GEODE_LOADER_PATH}/include/link/android32/libcurl.a
${GEODE_LOADER_PATH}/include/link/android32/libcocos2dcpp.so
${GEODE_LOADER_PATH}/include/link/android32/libfmod.so
GLESv2
log
)
set(GEODE_OUTPUT_NAME "Geode.android32")
set(GEODE_PLATFORM_BINARY "Geode.android32.so")
set(GEODE_MOD_BINARY_SUFFIX ".android32.so" CACHE STRING "" FORCE)
if (NOT ${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
set(GEODE_TARGET_PLATFORM_SHORT "android32" PARENT_SCOPE)
else()
set(GEODE_TARGET_PLATFORM_SHORT "android32")
endif()
elseif (GEODE_TARGET_PLATFORM STREQUAL "Android64")
set_target_properties(${PROJECT_NAME} PROPERTIES
SYSTEM_NAME Android
)
target_link_libraries(${PROJECT_NAME} INTERFACE
c
unwind
${GEODE_LOADER_PATH}/include/link/android64/libssl.a
${GEODE_LOADER_PATH}/include/link/android64/libcrypto.a
${GEODE_LOADER_PATH}/include/link/android64/libnghttp2.a
${GEODE_LOADER_PATH}/include/link/android64/libngtcp2.a
${GEODE_LOADER_PATH}/include/link/android64/libnghttp3.a
${GEODE_LOADER_PATH}/include/link/android64/libngtcp2_crypto_boringssl.a
${GEODE_LOADER_PATH}/include/link/android64/libcurl.a
${GEODE_LOADER_PATH}/include/link/android64/libcocos2dcpp.so
${GEODE_LOADER_PATH}/include/link/android64/libfmod.so
GLESv2
log
)
# this should help with fixing exceptions
set(ANDROID_STL c++_shared)
# a little desperate
add_definitions(-DANDROID_STL=c++_shared)
set(GEODE_OUTPUT_NAME "Geode.android64")
set(GEODE_PLATFORM_BINARY "Geode.android64.so")
set(GEODE_MOD_BINARY_SUFFIX ".android64.so" CACHE STRING "" FORCE)
if (NOT ${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
set(GEODE_TARGET_PLATFORM_SHORT "android64" PARENT_SCOPE)
else()
set(GEODE_TARGET_PLATFORM_SHORT "android64")
endif()
else()
message(FATAL_ERROR "Unknown platform ${GEODE_TARGET_PLATFORM}")
endif()