mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
107 lines
3.2 KiB
CMake
107 lines
3.2 KiB
CMake
# This is the CMake file used to build GDevelop.
|
|
# For more information, see the README.md file.
|
|
|
|
cmake_minimum_required(VERSION 3.5)
|
|
|
|
# Add utility functions
|
|
include(scripts/CMakeClangUtils.txt) # To add clang-format and clang-tidy support to a target
|
|
|
|
# Macro for defining an option
|
|
macro(gd_set_option var default type docstring)
|
|
if(NOT DEFINED ${var})
|
|
set(${var} ${default})
|
|
endif()
|
|
set(${var} ${${var}} CACHE ${type} ${docstring} FORCE)
|
|
endmacro()
|
|
|
|
# Set options
|
|
gd_set_option(BUILD_CORE TRUE BOOL "TRUE to build GDevelop Core library")
|
|
gd_set_option(BUILD_GDJS TRUE BOOL "TRUE to build GDevelop JS Platform")
|
|
gd_set_option(BUILD_EXTENSIONS TRUE BOOL "TRUE to build the extensions")
|
|
gd_set_option(BUILD_TESTS TRUE BOOL "TRUE to build the tests")
|
|
|
|
# Disable deprecated code
|
|
set(NO_GUI TRUE CACHE BOOL "" FORCE) # Force disable old GUI related code.
|
|
|
|
# Setting up installation directory, for Linux (has to be done before "project" command).
|
|
if(NOT WIN32)
|
|
if(NOT APPLE)
|
|
gd_set_option(GD_INSTALL_PREFIX "/opt/gdevelop/" STRING "The directory where GDevelop should be installed")
|
|
else()
|
|
gd_set_option(GD_INSTALL_PREFIX "." STRING "The directory where GDevelop should be installed")
|
|
endif()
|
|
|
|
# As we embed SFML, prevent it to be installed system-wide
|
|
set(CMAKE_INSTALL_PREFIX "${GD_INSTALL_PREFIX}/useless")
|
|
endif()
|
|
|
|
project(GDevelop)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
if(NOT WIN32 AND NOT APPLE AND NOT BUILD_TESTS)
|
|
set(CMAKE_SKIP_BUILD_RPATH TRUE) # Avoid errors when packaging for linux.
|
|
endif()
|
|
if(APPLE)
|
|
set(CMAKE_MACOSX_RPATH 1)
|
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
|
set(CMAKE_INSTALL_RPATH ".")
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
add_compile_options(
|
|
-D_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_
|
|
-Wno-potentially-evaluated-expression)
|
|
endif()
|
|
# 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("${CMAKE_BUILD_TYPE}" STREQUAL "Release" AND NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
|
|
set(CMAKE_SHARED_LINKER_FLAGS "-s") # Force stripping to avoid errors when packaging for linux.
|
|
endif()
|
|
|
|
#Activate C++11
|
|
set(CMAKE_CXX_STANDARD 11) # Upgrading to C++17 should be tried.
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# Mark some warnings as errors
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
# Activate as much warnings as possible to avoid errors like
|
|
# uninitialized variables or other hard to debug bugs.
|
|
add_compile_options(
|
|
-Wall
|
|
-Wextra
|
|
-Wuninitialized
|
|
-Wconditional-uninitialized
|
|
-Wno-unknown-warning-option
|
|
-Wno-reorder-ctor
|
|
-Wno-reorder
|
|
-Wno-unused-parameter
|
|
-Wno-pessimizing-move
|
|
-Wno-unused-variable # Not a good style, but not a risk
|
|
-Wno-unused-private-field
|
|
-Wno-ignored-qualifiers # Not a risk
|
|
-Wno-sign-compare # Not a big risk
|
|
|
|
# Make as much warnings considered as errors as possible (only one for now).
|
|
-Werror=return-stack-address
|
|
-Werror=return-type)
|
|
endif()
|
|
|
|
# Define common directories:
|
|
set(GD_base_dir ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
# Add all the CMakeLists:
|
|
add_subdirectory(ExtLibs)
|
|
if(BUILD_CORE)
|
|
add_subdirectory(Core)
|
|
endif()
|
|
if(BUILD_GDJS)
|
|
add_subdirectory(GDJS)
|
|
endif()
|
|
if(EMSCRIPTEN)
|
|
add_subdirectory(GDevelop.js)
|
|
endif()
|
|
if(BUILD_EXTENSIONS)
|
|
add_subdirectory(Extensions)
|
|
endif()
|