-
Notifications
You must be signed in to change notification settings - Fork 936
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Upgrade CMake minimum version and improve CMake code (#5446)
Only show in developer changelog
- Loading branch information
Showing
25 changed files
with
525 additions
and
449 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,100 +1,99 @@ | ||
#This is the CMake file used to build GDevelop. | ||
#For more information, see the README.md file. | ||
# This is the CMake file used to build GDevelop. | ||
# For more information, see the README.md file. | ||
|
||
cmake_minimum_required(VERSION 2.6) | ||
cmake_policy(SET CMP0011 NEW) | ||
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) | ||
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. | ||
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() | ||
# 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 | ||
# As we embed SFML, prevent it to be installed system-wide | ||
set(CMAKE_INSTALL_PREFIX "${GD_INSTALL_PREFIX}/useless") | ||
ENDIF() | ||
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) | ||
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) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_") | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-potentially-evaluated-expression") | ||
ENDIF() | ||
#Sanity checks | ||
IF ("${CMAKE_BUILD_TYPE}" STREQUAL "") | ||
message( "CMAKE_BUILD_TYPE is empty, assuming build type is Release" ) | ||
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() | ||
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() | ||
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 | ||
include(CheckCXXCompilerFlag) | ||
CHECK_CXX_COMPILER_FLAG("-std=gnu++11" COMPILER_SUPPORTS_CXX11) | ||
CHECK_CXX_COMPILER_FLAG("-std=gnu++0x" COMPILER_SUPPORTS_CXX0X) | ||
if(COMPILER_SUPPORTS_CXX11) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") | ||
elseif(COMPILER_SUPPORTS_CXX0X) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") | ||
else() | ||
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support (with GNU extensions). Please use a different C++ compiler.") | ||
endif() | ||
set(CMAKE_CXX_STANDARD 11) | ||
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. | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option") | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-reorder-ctor -Wno-reorder -Wno-pessimizing-move -Wno-unused-variable -Wno-unused-private-field") | ||
add_compile_options( | ||
-Wall | ||
-Wno-unknown-warning-option | ||
-Wno-reorder-ctor | ||
-Wno-reorder | ||
-Wno-pessimizing-move | ||
-Wno-unused-variable | ||
-Wno-unused-private-field | ||
|
||
# Make as much warnings considered as errors as possible (only one for now). | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=return-stack-address") | ||
# Make as much warnings considered as errors as possible (only one for now). | ||
-Werror=return-stack-address) | ||
endif() | ||
|
||
#Define common directories: | ||
# 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() | ||
# 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,83 +1,98 @@ | ||
cmake_minimum_required(VERSION 2.6) | ||
cmake_policy(SET CMP0015 NEW) | ||
cmake_minimum_required(VERSION 3.5) | ||
|
||
project(GDCore) | ||
|
||
SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) #Force use response file: useful for Ninja build system on Windows. | ||
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1) | ||
SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES 1) | ||
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES 1) | ||
set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) # Force use response file: useful for Ninja build system on Windows. | ||
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1) | ||
set(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES 1) | ||
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES 1) | ||
|
||
#Define common directories: | ||
# Define common directories: | ||
set(GDCORE_include_dir ${GD_base_dir}/Core PARENT_SCOPE) | ||
set(GDCORE_lib_dir ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SYSTEM_NAME} PARENT_SCOPE) | ||
|
||
#Dependencies on external libraries: | ||
### | ||
# Dependencies on external libraries: | ||
# | ||
|
||
#Defines | ||
### | ||
add_definitions( -DGD_IDE_ONLY ) | ||
IF (EMSCRIPTEN) | ||
add_definitions( -DEMSCRIPTEN ) | ||
ENDIF() | ||
IF(CMAKE_BUILD_TYPE MATCHES "Debug") | ||
add_definitions( -DDEBUG ) | ||
ELSE() | ||
add_definitions( -DRELEASE ) | ||
ENDIF() | ||
# Defines | ||
# | ||
add_definitions(-DGD_IDE_ONLY) | ||
if(EMSCRIPTEN) | ||
add_definitions(-DEMSCRIPTEN) | ||
endif() | ||
if("${CMAKE_BUILD_TYPE}" MATCHES "Debug") | ||
add_definitions(-DDEBUG) | ||
else() | ||
add_definitions(-DRELEASE) | ||
endif() | ||
|
||
IF(WIN32) | ||
add_definitions( -DWINDOWS ) | ||
add_definitions( "-DGD_CORE_API=__declspec(dllexport)" ) | ||
add_definitions( -D__GNUWIN32__ ) | ||
ELSE() | ||
IF(APPLE) | ||
add_definitions( -DMACOS ) | ||
ELSE() | ||
add_definitions( -DLINUX ) | ||
ENDIF() | ||
add_definitions( -DGD_API= ) | ||
add_definitions( -DGD_CORE_API= ) | ||
ENDIF(WIN32) | ||
if(WIN32) | ||
add_definitions(-DWINDOWS) | ||
add_definitions("-DGD_CORE_API=__declspec(dllexport)") | ||
add_definitions(-D__GNUWIN32__) | ||
else() | ||
if(APPLE) | ||
add_definitions(-DMACOS) | ||
else() | ||
add_definitions(-DLINUX) | ||
endif() | ||
add_definitions(-DGD_API=) | ||
add_definitions(-DGD_CORE_API=) | ||
endif() | ||
|
||
#The target | ||
### | ||
# The target | ||
# | ||
include_directories(.) | ||
file(GLOB_RECURSE source_files GDCore/*) | ||
file( | ||
GLOB_RECURSE | ||
source_files | ||
GDCore/*) | ||
|
||
file(GLOB_RECURSE formatted_source_files tests/* GDCore/Events/* GDCore/Extensions/* GDCore/IDE/* GDCore/Project/* GDCore/Serialization/* GDCore/Tools/*) | ||
list(REMOVE_ITEM formatted_source_files "${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.h" "${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs_dialogs_bitmaps.cpp") | ||
file( | ||
GLOB_RECURSE | ||
formatted_source_files | ||
tests/* | ||
GDCore/Events/* | ||
GDCore/Extensions/* | ||
GDCore/IDE/* | ||
GDCore/Project/* | ||
GDCore/Serialization/* | ||
GDCore/Tools/*) | ||
list( | ||
REMOVE_ITEM | ||
formatted_source_files | ||
"${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.cpp" | ||
"${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.h" | ||
"${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs_dialogs_bitmaps.cpp") | ||
gd_add_clang_utils(GDCore "${formatted_source_files}") | ||
|
||
IF(EMSCRIPTEN) | ||
if(EMSCRIPTEN) | ||
# Emscripten treats all libraries as static libraries | ||
add_library(GDCore STATIC ${source_files}) | ||
ELSE() | ||
else() | ||
add_library(GDCore SHARED ${source_files}) | ||
ENDIF() | ||
IF(EMSCRIPTEN) | ||
endif() | ||
if(EMSCRIPTEN) | ||
set_target_properties(GDCore PROPERTIES SUFFIX ".bc") | ||
ELSEIF(WIN32) | ||
elseif(WIN32) | ||
set_target_properties(GDCore PROPERTIES PREFIX "") | ||
ELSE() | ||
else() | ||
set_target_properties(GDCore PROPERTIES PREFIX "lib") | ||
ENDIF() | ||
endif() | ||
set(LIBRARY_OUTPUT_PATH ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SYSTEM_NAME}) | ||
set(ARCHIVE_OUTPUT_PATH ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SYSTEM_NAME}) | ||
set(RUNTIME_OUTPUT_PATH ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SYSTEM_NAME}) | ||
|
||
#Tests | ||
### | ||
# Tests | ||
# | ||
if(BUILD_TESTS) | ||
file( | ||
GLOB_RECURSE | ||
test_source_files | ||
tests/* | ||
) | ||
GLOB_RECURSE | ||
test_source_files | ||
tests/*) | ||
|
||
add_executable(GDCore_tests ${test_source_files}) | ||
set_target_properties(GDCore_tests PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE) #Allow finding dependencies directly from build path on Mac OS X. | ||
set_target_properties(GDCore_tests PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE) # Allow finding dependencies directly from build path on Mac OS X. | ||
target_link_libraries(GDCore_tests GDCore) | ||
target_link_libraries(GDCore_tests ${CMAKE_DL_LIBS}) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,23 @@ | ||
cmake_minimum_required(VERSION 2.6) | ||
cmake_policy(SET CMP0015 NEW) | ||
cmake_minimum_required(VERSION 3.5) | ||
|
||
project(AnchorBehavior) | ||
gd_add_extension_includes() | ||
|
||
#Defines | ||
### | ||
# Defines | ||
# | ||
gd_add_extension_definitions(AnchorBehavior) | ||
|
||
#The targets | ||
### | ||
# The targets | ||
# | ||
include_directories(.) | ||
file(GLOB source_files *.cpp *.h) | ||
file( | ||
GLOB | ||
source_files | ||
*.cpp | ||
*.h) | ||
gd_add_clang_utils(AnchorBehavior "${source_files}") | ||
gd_add_extension_target(AnchorBehavior "${source_files}") | ||
|
||
#Linker files for the IDE extension | ||
### | ||
# Linker files for the IDE extension | ||
# | ||
gd_extension_link_libraries(AnchorBehavior) |
Oops, something went wrong.