summaryrefslogtreecommitdiffstats
path: root/src/CMakeLists.txt
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@outlook.com>2020-05-16 21:59:10 +0200
committerGitHub <noreply@github.com>2020-05-16 21:59:10 +0200
commit9e8598fb1ca359143600d6bb2e8b317126a86bcc (patch)
tree677c51b708937ee8fbcdb2da8e180e874878d77a /src/CMakeLists.txt
parentTravis: Fix ccache on debug builds (#4741) (diff)
downloadcuberite-9e8598fb1ca359143600d6bb2e8b317126a86bcc.tar
cuberite-9e8598fb1ca359143600d6bb2e8b317126a86bcc.tar.gz
cuberite-9e8598fb1ca359143600d6bb2e8b317126a86bcc.tar.bz2
cuberite-9e8598fb1ca359143600d6bb2e8b317126a86bcc.tar.lz
cuberite-9e8598fb1ca359143600d6bb2e8b317126a86bcc.tar.xz
cuberite-9e8598fb1ca359143600d6bb2e8b317126a86bcc.tar.zst
cuberite-9e8598fb1ca359143600d6bb2e8b317126a86bcc.zip
Diffstat (limited to '')
-rw-r--r--src/CMakeLists.txt220
1 files changed, 23 insertions, 197 deletions
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()