2014-09-06 11:30:04 -04:00
|
|
|
cmake_minimum_required (VERSION 2.8.7)
|
2013-12-10 13:41:43 -05:00
|
|
|
|
2013-12-28 16:46:23 -05:00
|
|
|
# Without this, the MSVC variable isn't defined for MSVC builds ( http://www.cmake.org/pipermail/cmake/2011-November/047130.html )
|
|
|
|
enable_language(CXX C)
|
|
|
|
|
2015-06-03 04:40:01 -04:00
|
|
|
# Enable the support for solution folders in MSVC
|
|
|
|
if (MSVC)
|
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
endif()
|
|
|
|
|
2014-03-10 16:52:13 -04:00
|
|
|
# These env variables are used for configuring Travis CI builds.
|
|
|
|
# See https://github.com/mc-server/MCServer/pull/767
|
|
|
|
if(DEFINED ENV{TRAVIS_MCSERVER_BUILD_TYPE})
|
|
|
|
message("Setting build type to $ENV{TRAVIS_MCSERVER_BUILD_TYPE}")
|
|
|
|
set(CMAKE_BUILD_TYPE $ENV{TRAVIS_MCSERVER_BUILD_TYPE})
|
2014-03-07 15:16:16 -05:00
|
|
|
endif()
|
|
|
|
|
2014-03-10 16:52:13 -04:00
|
|
|
if(DEFINED ENV{TRAVIS_MCSERVER_FORCE32})
|
|
|
|
set(FORCE32 $ENV{TRAVIS_MCSERVER_FORCE32})
|
2014-03-07 15:16:16 -05:00
|
|
|
endif()
|
|
|
|
|
2014-05-10 08:03:36 -04:00
|
|
|
if(DEFINED ENV{TRAVIS_BUILD_WITH_COVERAGE})
|
|
|
|
set(BUILD_WITH_COVERAGE $ENV{TRAVIS_BUILD_WITH_COVERAGE})
|
|
|
|
endif()
|
|
|
|
|
2014-09-10 13:08:50 -04:00
|
|
|
if(DEFINED ENV{MCSERVER_BUILD_ID})
|
|
|
|
set(BUILD_ID $ENV{MCSERVER_BUILD_ID})
|
|
|
|
set(BUILD_SERIES_NAME $ENV{MCSERVER_BUILD_SERIES_NAME})
|
|
|
|
set(BUILD_DATETIME $ENV{MCSERVER_BUILD_DATETIME})
|
|
|
|
if(DEFINED ENV{MCSERVER_BUILD_COMMIT_ID})
|
|
|
|
set(BUILD_COMMIT_ID $ENV{MCSERVER_BUILD_COMMIT_ID})
|
2014-09-10 11:07:00 -04:00
|
|
|
else()
|
|
|
|
message("Commit id not set, attempting to determine id from git")
|
|
|
|
execute_process(
|
|
|
|
COMMAND git rev-parse HEAD
|
|
|
|
RESULT_VARIABLE GIT_EXECUTED
|
|
|
|
OUTPUT_VARIABLE BUILD_COMMIT_ID)
|
|
|
|
string(STRIP ${BUILD_COMMIT_ID} BUILD_COMMIT_ID)
|
|
|
|
if (NOT (GIT_EXECUTED EQUAL 0))
|
|
|
|
message(FATAL_ERROR "Could not identifiy git commit id")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2014-11-02 02:09:22 -05:00
|
|
|
# We need C++11 features, Visual Studio has those from VS2012, but it needs a new platform toolset for those; VS2013 supports them natively:
|
|
|
|
# Adapted from http://binglongx.wordpress.com/2013/06/28/set-non-default-platform-toolset-in-cmake/
|
|
|
|
if(MSVC OR MSVC_IDE)
|
|
|
|
if( MSVC_VERSION LESS 1700 ) # VC10- / VS2010-
|
|
|
|
message(FATAL_ERROR "The project requires C++11 features. "
|
|
|
|
"You need at least Visual Studio 11 (Microsoft Visual Studio 2012), "
|
|
|
|
"with Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012).")
|
|
|
|
elseif( MSVC_VERSION EQUAL 1700 ) # VC11 / VS2012
|
|
|
|
message( "VC11: using Microsoft Visual Studio 2012 "
|
|
|
|
"with Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012)" )
|
|
|
|
set(CMAKE_GENERATOR_TOOLSET "v120_CTP_Nov2012" CACHE STRING "Platform Toolset" FORCE)
|
|
|
|
else() # VC12+, assuming C++11 supported.
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2015-05-23 09:36:45 -04:00
|
|
|
set(BUILD_TOOLS OFF CACHE BOOL "")
|
|
|
|
set(SELF_TEST OFF CACHE BOOL "")
|
|
|
|
|
2014-02-16 08:55:37 -05:00
|
|
|
# This has to be done before any flags have been set up.
|
2014-02-16 06:37:31 -05:00
|
|
|
if(${BUILD_TOOLS})
|
2015-05-03 04:01:19 -04:00
|
|
|
message("Building tools")
|
2014-02-16 06:37:31 -05:00
|
|
|
add_subdirectory(Tools/MCADefrag/)
|
2014-02-16 07:30:45 -05:00
|
|
|
add_subdirectory(Tools/ProtoProxy/)
|
2014-02-16 06:37:31 -05:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(${BUILD_UNSTABLE_TOOLS})
|
2015-05-03 04:01:19 -04:00
|
|
|
message("Building unstable tools")
|
2014-02-16 06:37:31 -05:00
|
|
|
add_subdirectory(Tools/GeneratorPerformanceTest/)
|
|
|
|
endif()
|
|
|
|
|
2015-06-01 18:26:57 -04:00
|
|
|
include(CheckCXXCompilerFlag)
|
2014-02-15 18:17:58 -05:00
|
|
|
include(SetFlags.cmake)
|
|
|
|
set_flags()
|
|
|
|
set_lib_flags()
|
|
|
|
enable_profile()
|
2014-01-14 05:05:57 -05:00
|
|
|
|
2013-12-27 06:01:45 -05:00
|
|
|
# Under Windows, we need Lua as DLL; on *nix we need it linked statically:
|
|
|
|
if (WIN32)
|
|
|
|
add_definitions(-DLUA_BUILD_AS_DLL)
|
|
|
|
endif()
|
|
|
|
|
2014-01-14 05:05:57 -05:00
|
|
|
|
2013-12-27 06:01:45 -05:00
|
|
|
# The Expat library is linked in statically, make the source files aware of that:
|
2013-12-27 05:51:08 -05:00
|
|
|
add_definitions(-DXML_STATIC)
|
2013-12-21 08:45:27 -05:00
|
|
|
|
2015-05-07 16:35:02 -04:00
|
|
|
# Let Lua use additional checks on its C API. This is only compiled into Debug builds:
|
|
|
|
add_definitions(-DLUA_USE_APICHECK)
|
|
|
|
|
2014-02-05 13:10:45 -05:00
|
|
|
# Self Test Mode enables extra checks at startup
|
|
|
|
if(${SELF_TEST})
|
|
|
|
add_definitions(-DSELF_TEST)
|
|
|
|
endif()
|
2013-12-28 16:46:23 -05:00
|
|
|
|
|
|
|
|
2014-01-14 05:05:57 -05:00
|
|
|
|
2014-02-15 18:17:58 -05:00
|
|
|
|
|
|
|
|
2013-12-28 16:46:23 -05:00
|
|
|
project (MCServer)
|
|
|
|
|
2014-07-28 13:59:53 -04:00
|
|
|
# Set options for SQLiteCpp, disable all their tests and lints:
|
|
|
|
set(SQLITECPP_RUN_CPPLINT OFF CACHE BOOL "Run cpplint.py tool for Google C++ StyleGuide." FORCE)
|
|
|
|
set(SQLITECPP_RUN_CPPCHECK OFF CACHE BOOL "Run cppcheck C++ static analysis tool." FORCE)
|
|
|
|
set(SQLITECPP_RUN_DOXYGEN OFF CACHE BOOL "Run Doxygen C++ documentation tool." FORCE)
|
|
|
|
set(SQLITECPP_BUILD_EXAMPLES OFF CACHE BOOL "Build examples." FORCE)
|
|
|
|
set(SQLITECPP_BUILD_TESTS OFF CACHE BOOL "Build and run tests." FORCE)
|
|
|
|
set(SQLITECPP_INTERNAL_SQLITE OFF CACHE BOOL "Add the internal SQLite3 source to the project." FORCE)
|
|
|
|
|
2015-01-05 16:14:48 -05:00
|
|
|
# Set options for LibEvent, disable all their tests and benchmarks:
|
|
|
|
set(EVENT__DISABLE_OPENSSL YES CACHE BOOL "Disable OpenSSL in LibEvent" FORCE)
|
|
|
|
set(EVENT__DISABLE_BENCHMARK YES CACHE BOOL "Disable LibEvent benchmarks" FORCE)
|
|
|
|
set(EVENT__DISABLE_TESTS YES CACHE BOOL "Disable LibEvent tests" FORCE)
|
|
|
|
set(EVENT__DISABLE_REGRESS YES CACHE BOOL "Disable LibEvent regression tests" FORCE)
|
|
|
|
set(EVENT__DISABLE_SAMPLES YES CACHE BOOL "Disable LibEvent samples" FORCE)
|
|
|
|
|
2015-01-09 14:38:25 -05:00
|
|
|
# Check that the libraries are present:
|
|
|
|
if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/SQLiteCpp/CMakeLists.txt)
|
|
|
|
message(FATAL_ERROR "SQLiteCpp is missing in folder lib/SQLiteCpp. Have you initialized the submodules / downloaded the extra libraries?")
|
|
|
|
endif()
|
|
|
|
if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/polarssl/CMakeLists.txt)
|
|
|
|
message(FATAL_ERROR "PolarSSL is missing in folder lib/polarssl. Have you initialized the submodules / downloaded the extra libraries?")
|
|
|
|
endif()
|
2015-01-05 16:14:48 -05:00
|
|
|
if (NOT EXISTS ${CMAKE_SOURCE_DIR}/lib/libevent/CMakeLists.txt)
|
|
|
|
message(FATAL_ERROR "LibEvent is missing in folder lib/libevent. Have you initialized and updated the submodules / downloaded the extra libraries?")
|
|
|
|
endif()
|
2015-01-09 14:38:25 -05:00
|
|
|
|
2013-12-28 10:03:57 -05:00
|
|
|
# Include all the libraries:
|
2013-12-10 16:39:20 -05:00
|
|
|
add_subdirectory(lib/jsoncpp/)
|
2013-12-10 18:26:55 -05:00
|
|
|
add_subdirectory(lib/zlib/)
|
2013-12-18 18:14:11 -05:00
|
|
|
add_subdirectory(lib/lua/)
|
2013-12-18 18:54:55 -05:00
|
|
|
add_subdirectory(lib/tolua++/)
|
2013-12-18 19:28:48 -05:00
|
|
|
add_subdirectory(lib/sqlite/)
|
2014-07-28 13:59:53 -04:00
|
|
|
add_subdirectory(lib/SQLiteCpp/)
|
2013-12-18 19:52:52 -05:00
|
|
|
add_subdirectory(lib/expat/)
|
|
|
|
add_subdirectory(lib/luaexpat/)
|
2015-06-03 04:42:31 -04:00
|
|
|
add_subdirectory(lib/libevent/ EXCLUDE_FROM_ALL)
|
2013-12-10 16:39:20 -05:00
|
|
|
|
2014-07-28 14:16:24 -04:00
|
|
|
# Add proper include directories so that SQLiteCpp can find SQLite3:
|
|
|
|
get_property(SQLITECPP_INCLUDES DIRECTORY "lib/SQLiteCpp/" PROPERTY INCLUDE_DIRECTORIES)
|
|
|
|
set(SQLITECPP_INCLUDES "${SQLITECPP_INCLUDES}" "${CMAKE_CURRENT_SOURCE_DIR}/lib/sqlite/")
|
|
|
|
set_property(DIRECTORY lib/SQLiteCpp/ PROPERTY INCLUDE_DIRECTORIES "${SQLITECPP_INCLUDES}")
|
2014-07-28 16:06:47 -04:00
|
|
|
set_property(TARGET SQLiteCpp PROPERTY INCLUDE_DIRECTORIES "${SQLITECPP_INCLUDES}")
|
2014-07-28 14:16:24 -04:00
|
|
|
|
2015-01-13 08:44:03 -05:00
|
|
|
# Add proper includes for LibEvent's event-config.h header:
|
|
|
|
include_directories(SYSTEM ${LIBEVENT_INCLUDE_DIRS})
|
|
|
|
|
2014-06-24 08:48:18 -04:00
|
|
|
if (WIN32)
|
|
|
|
add_subdirectory(lib/luaproxy/)
|
|
|
|
endif()
|
|
|
|
|
2014-01-22 16:19:33 -05:00
|
|
|
|
|
|
|
# We use EXCLUDE_FROM_ALL so that only the explicit dependencies are used
|
|
|
|
# (PolarSSL also has test and example programs in their CMakeLists.txt, we don't want those)
|
2015-01-11 04:43:02 -05:00
|
|
|
include(lib/polarssl.cmake EXCLUDE_FROM_ALL)
|
2014-01-22 16:19:33 -05:00
|
|
|
|
2014-02-15 18:17:58 -05:00
|
|
|
set_exe_flags()
|
2013-12-27 05:51:08 -05:00
|
|
|
|
2014-01-15 07:54:06 -05:00
|
|
|
add_subdirectory (src)
|
2013-12-10 13:41:43 -05:00
|
|
|
|
2014-04-27 15:25:03 -04:00
|
|
|
if(${SELF_TEST})
|
2015-01-11 04:43:02 -05:00
|
|
|
message("Tests enabled")
|
2014-04-27 15:25:03 -04:00
|
|
|
enable_testing()
|
|
|
|
add_subdirectory (tests)
|
|
|
|
endif()
|
|
|
|
|
2015-06-03 04:40:01 -04:00
|
|
|
# Put project into solution folders in MSVC:
|
|
|
|
if (MSVC)
|
|
|
|
set_target_properties(event_core event_extra expat jsoncpp lua luaexpat mbedtls sqlite SQLiteCpp tolualib zlib PROPERTIES FOLDER Lib)
|
|
|
|
set_target_properties(luaproxy tolua PROPERTIES FOLDER Support)
|
|
|
|
if (${SELF_TEST})
|
|
|
|
set_target_properties(Network PROPERTIES FOLDER Lib)
|
|
|
|
set_target_properties(arraystocoords-exe coordinates-exe copies-exe copyblocks-exe creatable-exe EchoServer Google-exe ChunkBuffer NameLookup PROPERTIES FOLDER Tests)
|
|
|
|
endif()
|
|
|
|
endif()
|
2015-06-01 18:26:57 -04:00
|
|
|
|