From 9e8598fb1ca359143600d6bb2e8b317126a86bcc Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sat, 16 May 2020 20:59:10 +0100 Subject: Upgrade to C++17 [CMake] (#4717) * Make our CMake slightly less insane --- src/CMakeLists.txt | 220 ++++++----------------------------------------------- 1 file changed, 23 insertions(+), 197 deletions(-) (limited to 'src/CMakeLists.txt') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e10e8e8ca..c452ca7e2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,18 +1,8 @@ -project (Cuberite) +target_sources( + ${CMAKE_PROJECT_NAME} PRIVATE + Resources/Cuberite.rc -include_directories (SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/../lib/") -include_directories (SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/../lib/jsoncpp/include") -include_directories (SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/../lib/mbedtls/include") -include_directories (SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/../lib/libevent/include") - -set(FOLDERS - OSSupport HTTP Items Blocks Protocol Generating mbedTLS++ Bindings - WorldStorage Mobs Entities Simulator Simulator/IncrementalRedstoneSimulator - BlockEntities UI Noise -) - -SET (SRCS BiomeDef.cpp BlockArea.cpp BlockInfo.cpp @@ -80,9 +70,7 @@ SET (SRCS WebAdmin.cpp World.cpp main.cpp -) -SET (HDRS AllocationPool.h BiomeDef.h BlockArea.h @@ -169,156 +157,33 @@ SET (HDRS XMLParser.h ) -file(WRITE "${CMAKE_BINARY_DIR}/include/Globals.h" - "/* This file allows Globals.h to be included with an absolute path */\n#include \"${PROJECT_SOURCE_DIR}/Globals.h\"\n") - -include_directories("${CMAKE_BINARY_DIR}/include") -include_directories (SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/../lib/TCLAP/include") - -configure_file("BuildInfo.h.cmake" "${CMAKE_BINARY_DIR}/include/BuildInfo.h") - -if (NOT MSVC) - # Bindings need to reference other folders, so they are done here instead - # lib dependencies are not included - include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/../lib/mbedtls/include") - - foreach(folder ${FOLDERS}) - add_subdirectory(${folder}) - endforeach(folder) - - get_directory_property(BINDING_DEPENDENCIES DIRECTORY "Bindings" DEFINITION BINDING_DEPENDENCIES) - - #clear file - file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/BindingDependencies.txt) - foreach(dependency ${BINDING_DEPENDENCIES}) - #write each dependency on a seperate line - file(APPEND ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/BindingDependencies.txt "${dependency}\n") - endforeach() - - set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "Bindings.cpp Bindings.h") - - list(APPEND SOURCE "${SRCS}") - list(APPEND SOURCE "${HDRS}") - - # If building a windows version, but not using MSVC, add the resources directly to the makefile: - if (WIN32) - list(APPEND SOURCE "Resources/Cuberite.rc") - endif() -else () - # MSVC-specific handling: Put all files into one project, separate by the folders: - - source_group(Bindings FILES "Bindings/Bindings.cpp" "Bindings/Bindings.h") - - # Add all subfolders as solution-folders: - function(includefolder PATH) - FILE(GLOB FOLDER_FILES - "${PATH}/*.cpp" - "${PATH}/*.h" - "${PATH}/*.rc" - "${PATH}/*.pkg" - ) - string(REPLACE "/" "\\" PROJECT_PATH ${PATH}) - source_group("${PROJECT_PATH}" FILES ${FOLDER_FILES}) - endfunction(includefolder) - - foreach(folder ${FOLDERS}) - add_subdirectory(${folder}) - includefolder(${folder}) - - # Get all source files in this folder: - get_directory_property(FOLDER_SRCS DIRECTORY ${folder} DEFINITION SRCS) - foreach (src ${FOLDER_SRCS}) - list(APPEND SOURCE "${folder}/${src}") - endforeach(src) - - # Get all headers in this folder: - get_directory_property(FOLDER_HDRS DIRECTORY ${folder} DEFINITION HDRS) - foreach (hdr ${FOLDER_HDRS}) - list(APPEND SOURCE "${folder}/${hdr}") - endforeach(hdr) - - # Include this folder's CMakeLists.txt in the project: - list(APPEND SOURCE "${folder}/CMakeLists.txt") - source_group("${folder}" FILES "${folder}/CMakeLists.txt") - endforeach(folder) - - list(APPEND SOURCE "${SRCS}") - list(APPEND SOURCE "${HDRS}") - list(APPEND SOURCE "Bindings/AllToLua.pkg") - - includefolder("Resources") - source_group("" FILES ${SOURCE}) - - # Precompiled headers (1st part) - SET_SOURCE_FILES_PROPERTIES( - Globals.cpp PROPERTIES COMPILE_FLAGS "/Yc\"Globals.h\"" - ) - # CMake cannot "remove" the precompiled header flags, so we use a dummy precompiled header compatible with just this one file: - SET_SOURCE_FILES_PROPERTIES( - Bindings/Bindings.cpp PROPERTIES COMPILE_FLAGS "/Yc\"string.h\" /Fp\"$(IntDir)/Bindings.pch\"" - ) - list(APPEND SOURCE "Resources/Cuberite.rc") - - # Make MSVC generate the PDB files even for the release build: - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi") - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG") - set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG") - set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /DEBUG") -endif() - +set(FOLDERS + OSSupport HTTP Items Blocks Protocol Generating mbedTLS++ Bindings + WorldStorage Mobs Entities Simulator Simulator/IncrementalRedstoneSimulator + BlockEntities UI Noise +) -# Generate a list of all source files: -set(ALLFILES "${SRCS}" "${HDRS}") +# Add all child source directories: foreach(folder ${FOLDERS}) - get_directory_property(FOLDER_SRCS DIRECTORY ${folder} DEFINITION SRCS) - foreach (src ${FOLDER_SRCS}) - list(APPEND ALLFILES "${folder}/${src}") - endforeach(src) - - get_directory_property(FOLDER_HDRS DIRECTORY ${folder} DEFINITION HDRS) - foreach (hdr ${FOLDER_HDRS}) - list(APPEND ALLFILES "${folder}/${hdr}") - endforeach(hdr) + add_subdirectory(${folder}) endforeach(folder) -foreach(arg ${ALLFILES}) - set(ALLFILESLINES "${ALLFILESLINES}${arg}\n") -endforeach() -FILE(WRITE "AllFiles.lst" "${ALLFILESLINES}") - -if (MSVC) - get_directory_property(BINDING_OUTPUTS DIRECTORY "Bindings" DEFINITION BINDING_OUTPUTS) - get_directory_property(BINDING_DEPENDENCIES DIRECTORY "Bindings" DEFINITION BINDING_DEPENDENCIES) - - # The paths in BINDING_DEPENDENCIES are relative to the Bindings folder, convert them relative to this folder: - foreach (dep ${BINDING_DEPENDENCIES}) - list (APPEND BINDINGS_DEPENDENCIES "Bindings/${dep}") - endforeach(dep) - - if (USE_SYSTEM_LUA) - ADD_CUSTOM_COMMAND( - OUTPUT ${BINDING_OUTPUTS} - COMMAND lua BindingsProcessor.lua - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/ - DEPENDS ${BINDINGS_DEPENDENCIES} - ) - else() - ADD_CUSTOM_COMMAND( - OUTPUT ${BINDING_OUTPUTS} - - # Regenerate bindings: - COMMAND luaexe BindingsProcessor.lua - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Bindings/ - DEPENDS ${BINDINGS_DEPENDENCIES} luaexe - ) - endif() -endif() - +file(WRITE "${CMAKE_BINARY_DIR}/include/Globals.h" + "/* This file allows Globals.h to be included with an absolute path */\n#include \"${PROJECT_SOURCE_DIR}/src/Globals.h\"\n") +configure_file("BuildInfo.h.cmake" "${CMAKE_BINARY_DIR}/include/BuildInfo.h") +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE "${CMAKE_BINARY_DIR}/include/") +# Generate AllFiles.lst for CheckBasicStyle.lua +get_target_property(ALL_FILES ${CMAKE_PROJECT_NAME} SOURCES) +foreach(FILE ${ALL_FILES}) + # target_sources converts to absolute but CheckBasicStyle expects relative + file(RELATIVE_PATH RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" ${FILE}) -add_executable(${CMAKE_PROJECT_NAME} ${SOURCE}) + # Convert CMake list into newline-delimited string + set(ALL_FILES_AS_LINES "${ALL_FILES_AS_LINES}${RELATIVE}\n") +endforeach() +file(WRITE AllFiles.lst "${ALL_FILES_AS_LINES}") # Output the executable into the $/Server folder, so that it has access to external resources: SET_TARGET_PROPERTIES(${CMAKE_PROJECT_NAME} PROPERTIES @@ -402,45 +267,6 @@ make_symlink("${CMAKE_CURRENT_SOURCE_DIR}/../CONTRIBUTORS" make_symlink("${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE" "${CMAKE_BINARY_DIR}/Server/LICENSE") make_symlink("${CMAKE_CURRENT_SOURCE_DIR}/../Server/Install/ThirdPartyLicenses" "${CMAKE_BINARY_DIR}/Server/ThirdPartyLicenses") - - - -# Precompiled headers (2nd part) -if (MSVC) - SET_TARGET_PROPERTIES( - ${CMAKE_PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/Yu\"Globals.h\"" - OBJECT_DEPENDS "$(IntDir)/$(TargetName.pch)" - ) -endif () - - -if (NOT MSVC) - target_link_libraries(${CMAKE_PROJECT_NAME} - OSSupport HTTPServer Bindings Items Blocks Noise - Protocol Generating WorldStorage - Mobs Entities Simulator IncrementalRedstoneSimulator - BlockEntities UI mbedTLS++ - ) -endif () - -if (WIN32) - target_link_libraries(${CMAKE_PROJECT_NAME} expat tolualib ws2_32.lib Psapi.lib) -endif() - -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") - add_flags_lnk(-L/usr/local/lib) - add_flags_lnk(-L/usr/ports/devel) -endif() - -target_link_libraries(${CMAKE_PROJECT_NAME} luaexpat jsoncpp_lib mbedtls zlib lsqlite lua SQLiteCpp event_core event_extra fmt::fmt) - # Create a folder for Bindings' documentation: FILE(MAKE_DIRECTORY "Bindings/docs") make_symlink("${CMAKE_CURRENT_SOURCE_DIR}/Bindings/docs" "${CMAKE_BINARY_DIR}/Server/BindingsDocs") - - -# For MSVC, set the startup project to Cuberite, and the debugger dir: -if (MSVC) - set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${CMAKE_PROJECT_NAME}) - set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/Server") -endif() -- cgit v1.2.3