summaryrefslogtreecommitdiff
path: root/plugins/hello_gdextension/CMakeLists.txt
diff options
context:
space:
mode:
authorFredia Huya-Kouadio <fhuya@meta.com>2023-08-17 11:49:20 -0700
committerGitHub <noreply@github.com>2023-08-17 11:49:20 -0700
commit1f04b16320add64cea98e33fe541b426ff321713 (patch)
tree741a6563c1795437c0ad5b80c6121b5476861361 /plugins/hello_gdextension/CMakeLists.txt
parente61f1555b696b62152787d0fee14435325aee62b (diff)
parent37e27e3db22c0b33d098a0ac1fb2dfe8861be0fb (diff)
downloadgodot-android-samples-1f04b16320add64cea98e33fe541b426ff321713.tar.gz
godot-android-samples-1f04b16320add64cea98e33fe541b426ff321713.tar.bz2
godot-android-samples-1f04b16320add64cea98e33fe541b426ff321713.zip
Merge pull request #2 from m4gr3d/add_gdextension_plugin_sample
Add an Android GDExtension plugin sample
Diffstat (limited to 'plugins/hello_gdextension/CMakeLists.txt')
-rw-r--r--plugins/hello_gdextension/CMakeLists.txt141
1 files changed, 141 insertions, 0 deletions
diff --git a/plugins/hello_gdextension/CMakeLists.txt b/plugins/hello_gdextension/CMakeLists.txt
new file mode 100644
index 0000000..dda0257
--- /dev/null
+++ b/plugins/hello_gdextension/CMakeLists.txt
@@ -0,0 +1,141 @@
+cmake_minimum_required(VERSION 3.22.1)
+
+## Default configs
+# Default android abi is arm64-v8a
+if (NOT ANDROID_ABI)
+ set(ANDROID_ABI "arm64-v8a")
+endif (NOT ANDROID_ABI)
+
+if (ANDROID_ABI STREQUAL "armeabi-v7a")
+ set(GODOT_CPP_LIB_ABI "arm32")
+elseif (ANDROID_ABI STREQUAL "x86")
+ set(GODOT_CPP_LIB_ABI "x86_32")
+elseif (ANDROID_ABI STREQUAL "x86_64")
+ set(GODOT_CPP_LIB_ABI "x86_64")
+else ()
+ set(GODOT_CPP_LIB_ABI "arm64")
+endif ()
+
+# Default android platform is android-21
+if (NOT ANDROID_PLATFORM)
+ set(ANDROID_PLATFORM "android-21")
+endif (NOT ANDROID_PLATFORM)
+
+# Default build type is Debug
+if (NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE Debug)
+endif (NOT CMAKE_BUILD_TYPE)
+
+if (CMAKE_BUILD_TYPE MATCHES Debug)
+ add_definitions(-D_DEBUG)
+ set(GODOT_CPP_LIB_BUILD_TYPE debug)
+else ()
+ add_definitions(-DNDEBUG)
+ set(GODOT_CPP_LIB_BUILD_TYPE release)
+endif (CMAKE_BUILD_TYPE MATCHES Debug)
+
+if (NOT (ANDROID_STL STREQUAL "c++_shared"))
+ set(ANDROID_STL "c++_shared")
+endif (NOT (ANDROID_STL STREQUAL "c++_shared"))
+
+# Check if ANDROID_NDK is set.
+if (NOT ANDROID_NDK)
+ # Set to ANDROID_NDK_HOME environment variable if it's set.
+ if (DEFINED ENV{ANDROID_NDK_HOME})
+ set(ANDROID_NDK $ENV{ANDROID_NDK_HOME})
+ else (DEFINED ENV{ANDROID_NDK_HOME})
+ message(WARNING "ANDROID_NDK_HOME is not set")
+ endif (DEFINED ENV{ANDROID_NDK_HOME})
+endif (NOT ANDROID_NDK)
+
+# Check if CMAKE_TOOLCHAIN_FILE is set.
+if (NOT CMAKE_TOOLCHAIN_FILE)
+ set(CMAKE_TOOLCHAIN_FILE "${ANDROID_NDK}/build/cmake/android.toolchain.cmake")
+endif (NOT CMAKE_TOOLCHAIN_FILE)
+
+if (NOT DEFINED BITS)
+ set(BITS 32)
+ if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(BITS 64)
+ endif (CMAKE_SIZEOF_VOID_P EQUAL 8)
+endif (NOT DEFINED BITS)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+
+project(hello_gdextension LANGUAGES CXX)
+
+set(GODOT_COMPILE_FLAGS)
+set(GODOT_LINKER_FLAGS)
+
+set(GODOT_LINKER_FLAGS "-Wl")
+
+set(GODOT_COMPILE_FLAGS "-fPIC -g -Wwrite-strings")
+set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wchar-subscripts -Wcomment -Wdisabled-optimization")
+set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wformat -Wformat=2 -Wformat-security -Wformat-y2k")
+set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wimport -Winit-self -Winline -Winvalid-pch")
+set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wlong-long -Wmissing-braces -Wmissing-format-attribute")
+set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpointer-arith")
+set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wredundant-decls -Wreturn-type -Wsequence-point")
+set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wswitch -Wswitch-enum -Wtrigraphs")
+set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused-label")
+set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wunused-value -Wvariadic-macros -Wvolatile-register-var -Wno-error=attributes")
+
+if (NOT CMAKE_SYSTEM_NAME STREQUAL "Android")
+ set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wno-ignored-attributes")
+endif ()
+
+if (CMAKE_BUILD_TYPE MATCHES Debug)
+ set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -fno-omit-frame-pointer -O0")
+else ()
+ set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -O3")
+endif (CMAKE_BUILD_TYPE MATCHES Debug)
+
+
+## godot-cpp library
+set(GODOT_CPP_DIR "${CMAKE_SOURCE_DIR}/godot-cpp")
+set(GODOT-CPP "godot-cpp")
+
+# Use the godot-cpp prebuilt static binary
+set(GODOT_CPP_STATIC_LIB "${GODOT_CPP_DIR}/bin/libgodot-cpp.android.template_${GODOT_CPP_LIB_BUILD_TYPE}.${GODOT_CPP_LIB_ABI}.a")
+
+list(APPEND GODOT_CPP_INCLUDE_DIRECTORIES "${GODOT_CPP_DIR}/include")
+list(APPEND GODOT_CPP_INCLUDE_DIRECTORIES "${GODOT_CPP_DIR}/gen/include")
+list(APPEND GODOT_CPP_INCLUDE_DIRECTORIES "${GODOT_CPP_DIR}/gdextension")
+
+add_library(${GODOT-CPP}
+ STATIC
+ IMPORTED GLOBAL
+ INTERFACE_INCLUDE_DIRECTORIES "${GODOT_CPP_INCLUDE_DIRECTORIES}"
+ )
+set_target_properties(${GODOT-CPP} PROPERTIES IMPORTED_LOCATION ${GODOT_CPP_STATIC_LIB})
+
+
+## Setup the plugin library
+file(GLOB_RECURSE ANDROID_SOURCES ${CMAKE_SOURCE_DIR}/src/main/cpp/*.c**)
+file(GLOB_RECURSE ANDROID_HEADERS ${CMAKE_SOURCE_DIR}/src/main/cpp/*.h**)
+
+add_library(${CMAKE_PROJECT_NAME} SHARED
+ ${ANDROID_SOURCES} ${ANDROID_HEADERS}
+ )
+
+target_include_directories(${CMAKE_PROJECT_NAME}
+ SYSTEM PUBLIC
+ ${GODOT_CPP_INCLUDE_DIRECTORIES}
+ )
+
+# Specifies libraries CMake should link to your target library. You
+# can link libraries from various origins, such as libraries defined in this
+# build script, prebuilt third-party libraries, or Android system libraries.
+target_link_libraries(${CMAKE_PROJECT_NAME}
+ # List libraries link to the target library
+ android
+ log
+ ${GODOT-CPP}
+ )
+
+# Add the compile flags
+set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS ${GODOT_COMPILE_FLAGS})
+set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS ${GODOT_LINKER_FLAGS})