mirror of
https://github.com/godotengine/godot-cpp.git
synced 2025-12-31 01:48:45 +03:00
- Added to .gitignore CMakeUserPresets.json
### Configuration:
- Changed python command to use single quotes to make build output log more legible.
- Added GODOT_DEV_BUILD to allow differentiation of debug or Release builds.
- Added find logic for macos Cocoa library
### godot-cpp Changes
- godot-cpp-test is changed to be incorporated into the cmake build as a target.
- Duplicated godot-cpp target into [template_release, template_debug, editor]
- Created {platform}.cmake files mirroring the style of the SCons build.
CMake has a feature called generator expressions for its configuration variables that are evaluated at build time. This allows multi-configuration build systems to properly evaulate options. for msvc, xcode and nijna multi-config.
- Moved configuration options to generator expressions with the notable exclusion of OSX_ARCHITECTURES.
- Remove CMAKE_BUILD_TYPE from msvc CI target as Multi-Config generators ignore it
### godot-cpp-test Changes
- Removed majority of the cmake code, now that the godot-cpp project is setup, the majority of the flags will be propagated as transient dependencies
- Marked with EXCLUDE_FROM_ALL so that it isn't built as part of the 'all' target
- Updated ci to build the godot-cpp-test target from the root directory using cmake
- Tests passing for Windows, Linux, and Macos builds.
### Documentation
Updated with new information
Added Emscripten example
Added Android example
41 lines
1.7 KiB
CMake
41 lines
1.7 KiB
CMake
#[=======================================================================[.rst:
|
|
emsdkHack
|
|
---------
|
|
|
|
The Emscripten platform doesn't support the use of shared libraries as known by cmake.
|
|
|
|
* https://github.com/emscripten-core/emscripten/issues/15276
|
|
* https://github.com/emscripten-core/emscripten/issues/17804
|
|
|
|
This workaround only works due to the way the cmake scripts are loaded.
|
|
|
|
Prior to the use of ``project( ... )`` directive we need to set
|
|
``CMAKE_PROJECT_INCLUDE=cmake/emscripten.cmake``.
|
|
This file will be loaded after the toolchain overriding the settings that
|
|
prevent shared library building.
|
|
|
|
CMAKE_PROJECT_INCLUDE was Added in version 3.15.
|
|
``CMAKE_PROJECT_<projectName>_INCLUDE`` was Added in version 3.17:
|
|
|
|
More information on cmake's `code injection`_
|
|
|
|
.. _code injection:https://cmake.org/cmake/help/latest/command/project.html#code-injection
|
|
|
|
Overwrite Shared Library Properties to allow shared libs to be generated.
|
|
]=======================================================================]
|
|
if( EMSCRIPTEN )
|
|
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
|
|
set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-sSIDE_MODULE=1")
|
|
set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-sSIDE_MODULE=1")
|
|
set(CMAKE_SHARED_LIBRARY_SUFFIX) # remove the suffix from the shared lib
|
|
set(CMAKE_STRIP FALSE) # used by default in pybind11 on .so modules
|
|
|
|
# The Emscripten toolchain sets the default value for EMSCRIPTEN_SYSTEM_PROCESSOR to x86
|
|
# and CMAKE_SYSTEM_PROCESSOR to this value. I don't want that.
|
|
set(CMAKE_SYSTEM_PROCESSOR "wasm32" )
|
|
# the above prevents the need for logic like:
|
|
#if( ${CMAKE_SYSTEM_NAME} STREQUAL Emscripten )
|
|
# set( SYSTEM_ARCH wasm32 )
|
|
#endif ()
|
|
endif ()
|