mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-08-25 12:23:58 -04:00
0cd03bbfa1
show in developer changelog
151 lines
7.3 KiB
CMake
151 lines
7.3 KiB
CMake
cmake_minimum_required(VERSION 3.5)
|
|
|
|
project(libGD.js)
|
|
|
|
# Sanity checks
|
|
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
|
message(STATUS "CMAKE_BUILD_TYPE is empty, assuming build type is Release")
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
endif()
|
|
if(NOT EMSCRIPTEN)
|
|
message(FATAL_ERROR "You're trying to compile libGD.js without emscripten.")
|
|
endif()
|
|
|
|
# Compilation flags (https://emscripten.org/docs/tools_reference/emcc.html):
|
|
if("${GDEVELOPJS_BUILD_VARIANT}" STREQUAL "dev")
|
|
# Development: full optimization but no link time optimization.
|
|
add_compile_options(-O3)
|
|
elseif("${GDEVELOPJS_BUILD_VARIANT}" STREQUAL "debug")
|
|
# Debug: optimization but that will be reduced by the debugging "-g" flag.
|
|
add_compile_options(-O3)
|
|
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g --profiling") # Debugging + profiling support
|
|
elseif("${GDEVELOPJS_BUILD_VARIANT}" STREQUAL "debug-assertions")
|
|
# Debug with assertions: no optimization.
|
|
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g --profiling") # Debugging + profiling support
|
|
elseif("${GDEVELOPJS_BUILD_VARIANT}" STREQUAL "debug-sanitizers")
|
|
# Debug with sanitizers (note: -O3 from the Release build type still applies at compile time).
|
|
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g --profiling") # Debugging + profiling support
|
|
add_compile_options(-fsanitize=address) # Uncomment to auto-detect occurences of memory bugs (memory leak, use after free, overflows, ...) - also enable linking below!
|
|
# add_compile_options(-fsanitize=undefined) # Uncomment to auto-detect occurences of undefined behavior - also enable linking below!
|
|
add_compile_options(-fsanitize=return) # Uncomment to auto-detect occurences of undefined behavior - also enable linking below!
|
|
add_compile_options(-fsanitize=null) # Uncomment to auto-detect occurences of undefined behavior - also enable linking below!
|
|
else()
|
|
# Production: full optimization.
|
|
# The compiler needs to know if there will be link time optimisations.
|
|
add_compile_options(-O3 -flto)
|
|
endif()
|
|
# add_compile_options(-fwasm-exceptions) # Enable exceptions
|
|
|
|
# Common directories:
|
|
#
|
|
set(GDJS_include_dir ${GD_base_dir}/GDJS)
|
|
set(GDJS_lib_dir ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SYSTEM_NAME}/JsPlatform)
|
|
|
|
# Dependencies on external libraries:
|
|
#
|
|
include_directories(${GDCORE_include_dir})
|
|
include_directories(${GDJS_include_dir})
|
|
|
|
# Defines
|
|
#
|
|
add_definitions(-DGD_IDE_ONLY)
|
|
if("${CMAKE_BUILD_TYPE}" MATCHES "Debug")
|
|
add_definitions(-DDEBUG)
|
|
if(WIN32)
|
|
add_definitions(__WXDEBUG__)
|
|
endif()
|
|
elseif("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
|
add_definitions(-DRELEASE)
|
|
add_definitions(-DBOOST_DISABLE_ASSERTS)
|
|
else()
|
|
add_definitions(-DDEV)
|
|
add_definitions(-DBOOST_DISABLE_ASSERTS)
|
|
endif()
|
|
|
|
add_definitions(-Dlinux)
|
|
add_definitions(-DLINUX)
|
|
add_definitions(-DGD_API=)
|
|
add_definitions(-DGD_CORE_API=)
|
|
add_definitions(-DGD_EXTENSION_API=)
|
|
|
|
# The target
|
|
#
|
|
include_directories(.)
|
|
|
|
add_executable(
|
|
GD
|
|
"Bindings/BehaviorJsImplementation.cpp"
|
|
"Bindings/BehaviorSharedDataJsImplementation.cpp"
|
|
"Bindings/ObjectJsImplementation.cpp"
|
|
"Bindings/Wrapper.cpp")
|
|
|
|
|
|
# Linker options
|
|
#
|
|
target_link_libraries(GD "--pre-js ${GD_base_dir}/GDevelop.js/Bindings/prejs.js")
|
|
target_link_libraries(GD "--post-js ${GD_base_dir}/GDevelop.js/Bindings/glue.js")
|
|
target_link_libraries(GD "--post-js ${GD_base_dir}/GDevelop.js/Bindings/postjs.js")
|
|
target_link_libraries(GD "-s MODULARIZE=1")
|
|
target_link_libraries(GD "-s EXPORT_NAME=\"initializeGDevelopJs\"") # Global function name for browsers
|
|
target_link_libraries(GD "-s TOTAL_MEMORY=48MB") # Get some initial memory size that is a bit bigger than the default.
|
|
target_link_libraries(GD "-s ALLOW_MEMORY_GROWTH=1")
|
|
target_link_libraries(GD "-s NODEJS_CATCH_EXIT=0") # Don't print the entire GDCore code on error when running in node
|
|
target_link_libraries(GD "-s ERROR_ON_UNDEFINED_SYMBOLS=0")
|
|
target_link_libraries(GD "-s \"EXPORTED_FUNCTIONS=['_free','_malloc']\"")
|
|
|
|
if("${GDEVELOPJS_BUILD_VARIANT}" STREQUAL "dev")
|
|
# Disable optimizations at linking time for slightly faster builds.
|
|
# This is safe (https://emscripten.org/docs/optimizing/Optimizing-Code.html#link-times):
|
|
# "Note that it is ok to link with those flags even if the source files were compiled with a different optimization level"
|
|
message(STATUS "'dev' variant: disabling optimization at link time for (slightly) faster build")
|
|
target_link_libraries(GD "-O0")
|
|
elseif("${GDEVELOPJS_BUILD_VARIANT}" STREQUAL "debug")
|
|
message(STATUS "'debug' variant: keeping debugging information and disabling link time optimizations")
|
|
target_link_libraries(GD "-O0")
|
|
elseif("${GDEVELOPJS_BUILD_VARIANT}" STREQUAL "debug-assertions")
|
|
message(STATUS "'debug-assertions' variant: enabling Emscripten assertions and SAFE_HEAP")
|
|
# target_link_libraries(GD "-s DEMANGLE_SUPPORT=1") # Demangle stack traces
|
|
# target_link_libraries(GD "-s ASSERTIONS=1") # Basic runtime memory allocation checks (necessary for wasm exceptions stack traces)
|
|
target_link_libraries(GD "-s ASSERTIONS=2 -s SAFE_HEAP=1") # Uncomment to do runtime checks for memory allocations and access errors
|
|
# target_link_libraries(--cpuprofiler) # Uncomment for interactive performance profiling
|
|
# target_link_libraries(--memoryprofiler) # Uncomment for interactive memory profiling
|
|
elseif("${GDEVELOPJS_BUILD_VARIANT}" STREQUAL "debug-sanitizers")
|
|
message(STATUS "'debug-sanitizers' variant: enabling ASAN and other sanitizers")
|
|
target_link_libraries(GD "-O1") # Some optimization at link time (default is -O0), to make the tests run a bit faster in CI.
|
|
target_link_libraries(GD "-s INITIAL_MEMORY=512MB") # Start with a large heap: ASan needs a lot of memory (256MB quarantine for freed allocations, shadow memory) and growing the memory repeatedly has a cost. Overrides TOTAL_MEMORY set above.
|
|
target_link_libraries(GD "-fsanitize=address") # Uncomment to auto-detect occurences of memory bugs (memory leak, use after free, overflows, ...) - also enable compiling above!
|
|
# target_link_libraries(GD "-fsanitize=undefined") # Uncomment to auto-detect occurences of undefined behavior - also enable compiling above!
|
|
target_link_libraries(GD "-fsanitize=null") # Uncomment to auto-detect occurences of undefined behavior - also enable compiling above!
|
|
target_link_libraries(GD "-fsanitize=return") # Uncomment to auto-detect occurences of undefined behavior - also enable compiling above!
|
|
else()
|
|
# Production: link time optimizations and full optimization.
|
|
target_link_libraries(GD "-O3 -flto")
|
|
endif()
|
|
|
|
# Even if we're building an "executable", prefix it by lib as it's used as a library.
|
|
set_target_properties(GD PROPERTIES PREFIX "lib")
|
|
|
|
# Linker files
|
|
#
|
|
target_link_libraries(GD GDCore)
|
|
target_link_libraries(GD GDJS)
|
|
target_link_libraries(GD PlatformBehavior)
|
|
target_link_libraries(GD DestroyOutsideBehavior)
|
|
target_link_libraries(GD TiledSpriteObject)
|
|
target_link_libraries(GD DraggableBehavior)
|
|
target_link_libraries(GD TopDownMovementBehavior)
|
|
target_link_libraries(GD TextObject)
|
|
target_link_libraries(GD PanelSpriteObject)
|
|
target_link_libraries(GD AnchorBehavior)
|
|
target_link_libraries(GD PrimitiveDrawing)
|
|
target_link_libraries(GD TextEntryObject)
|
|
target_link_libraries(GD Inventory)
|
|
target_link_libraries(GD LinkedObjects)
|
|
target_link_libraries(GD SystemInfo)
|
|
target_link_libraries(GD Shopify)
|
|
target_link_libraries(GD PathfindingBehavior)
|
|
target_link_libraries(GD PhysicsBehavior)
|
|
target_link_libraries(GD ParticleSystem)
|
|
target_link_libraries(GD Scene3D)
|
|
target_link_libraries(GD SpineObject)
|