From c4530a6d179329170ca32c361bccbee08bb93f4d Mon Sep 17 00:00:00 2001 From: Marcin Michalski Date: Sat, 27 Mar 2021 01:04:59 +0100 Subject: [PATCH] Bump minimum required CMake version to 3.1 (#1131) * Removed Ubuntu Clang workflow * Removed FindCXX.cmake (in favor of native feature) * Added support for building Windows binaries with CMake when using MSVC * Cleaned up a number of Find*.cmake modules --- .github/workflows/build-vcpkg.yml | 14 +++--------- CMakeLists.txt | 10 ++++++--- src/client/CMakeLists.txt | 5 ----- src/framework/CMakeLists.txt | 32 +++++++++++++-------------- src/framework/cmake/FindCXX11.cmake | 26 ---------------------- src/framework/cmake/FindGMP.cmake | 2 +- src/framework/cmake/FindLua.cmake | 8 +++---- src/framework/cmake/FindLuaJIT.cmake | 7 +++--- src/framework/cmake/FindOpenSSL.cmake | 10 ++++----- 9 files changed, 39 insertions(+), 75 deletions(-) delete mode 100644 src/framework/cmake/FindCXX11.cmake diff --git a/.github/workflows/build-vcpkg.yml b/.github/workflows/build-vcpkg.yml index e3d6d6f0..a2e8d3d4 100644 --- a/.github/workflows/build-vcpkg.yml +++ b/.github/workflows/build-vcpkg.yml @@ -28,7 +28,7 @@ jobs: fail-fast: false max-parallel: 8 matrix: - name: [ubuntu-gcc, ubuntu-clang, macos-clang, windows-msvc] + name: [ubuntu-gcc, macos-clang, windows-msvc] buildtype: [Debug, Release] luajit: [on, off] include: @@ -38,8 +38,8 @@ jobs: cc: cl.exe triplet: x64-windows packages: > - boost-iostreams boost-asio boost-system boost-variant boost-lockfree glew - boost-filesystem boost-uuid physfs openal-soft libogg lua luajit libvorbis zlib opengl + boost-iostreams boost-asio boost-system boost-variant boost-lockfree boost-filesystem boost-uuid + glew luajit libogg libvorbis openal-soft opengl openssl physfs zlib - name: ubuntu-gcc os: ubuntu cxx: g++ @@ -48,14 +48,6 @@ jobs: packages: > boost-iostreams boost-asio boost-system boost-variant boost-lockfree glew boost-filesystem boost-uuid physfs openal-soft libogg libvorbis zlib opengl - - name: ubuntu-clang - os: ubuntu - cxx: clang++ - cc: clang - triplet: x64-linux - packages: > - boost-iostreams boost-asio boost-system boost-variant boost-lockfree glew - boost-filesystem boost-uuid physfs openal-soft libogg libvorbis zlib opengl - name: macos-clang os: macos cxx: clang++ diff --git a/CMakeLists.txt b/CMakeLists.txt index 329b12c6..a2b0ea77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.1) project(otclient) set(VERSION "1.0.0") @@ -28,8 +28,8 @@ if(WIN32) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/otcicon.o COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR}/src - -i${CMAKE_CURRENT_SOURCE_DIR}/src/otcicon.rc - -o ${CMAKE_CURRENT_BINARY_DIR}/otcicon.o) + -fo${CMAKE_CURRENT_BINARY_DIR}/otcicon.o + ${CMAKE_CURRENT_SOURCE_DIR}/src/otcicon.rc) set(executable_SOURCES ${executable_SOURCES} otcicon.o) endif() @@ -37,6 +37,10 @@ add_definitions(-D"VERSION=\\"${VERSION}\\"") # add client executable add_executable(${PROJECT_NAME} ${framework_SOURCES} ${client_SOURCES} ${executable_SOURCES}) + +set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 11) +set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON) + target_link_libraries(${PROJECT_NAME} ${framework_LIBRARIES}) if(USE_PCH) diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index d6fb4f6b..1eadc1e8 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -1,8 +1,3 @@ -# CMAKE_CURRENT_LIST_DIR cmake 2.6 compatibility -if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6) - get_filename_component(CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) -endif(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6) - # client options add_definitions(-DCLIENT) option(BOT_PROTECTION "Enable bot protection" ON) diff --git a/src/framework/CMakeLists.txt b/src/framework/CMakeLists.txt index d5ef1e2a..b48eed1e 100644 --- a/src/framework/CMakeLists.txt +++ b/src/framework/CMakeLists.txt @@ -5,11 +5,6 @@ # FRAMEWORK_XML # FRAMEWORK_SQL -# CMAKE_CURRENT_LIST_DIR cmake 2.6 compatibility -if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6) - get_filename_component(CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) -endif(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6) - # add framework cmake modules set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake;${CMAKE_MODULE_PATH}") @@ -156,18 +151,20 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "RelWithDebInfo") endif() -include(FindCXX11) +set(COMPILER_CXX_EXTRA_FLAGS "-Wall -Wextra -Wno-unused -Wno-unused-parameter -Wno-unused-result -pipe") +set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O1 -g -fno-omit-frame-pointer") +set(CMAKE_CXX_FLAGS_RELEASE "-O2") +if (WIN32 AND MSVC) + set(COMPILER_CXX_EXTRA_FLAGS "/bigobj") + set(CMAKE_CXX_FLAGS_DEBUG "/Od /DEBUG:FULL") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O12 /DEBUG:FASTLINK") + set(CMAKE_CXX_FLAGS_RELEASE "/Ot") +endif() -# gcc compile flags -set(WARNS_FLAGS "-Wall -Wextra -Wno-unused -Wno-unused-parameter -Wno-unused-result") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNS_FLAGS} ${ARCH_FLAGS} ${CPP2011_FLAGS} -pipe") -set(CMAKE_CXX_FLAGS_COMPILESPEED "-O0") -set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O1 -g -fno-omit-frame-pointer") -set(CMAKE_CXX_FLAGS_RELEASE "-O2") -set(CMAKE_CXX_FLAGS_PERFORMANCE "-Ofast -march=native") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_CXX_EXTRA_FLAGS} ${ARCH_FLAGS} ${CPP2011_FLAGS}") -if(USE_LTO) +if(USE_LTO AND NOT MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fwhole-program -flto") if(WIN32) set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -Wl,-O1,--gc-sections,--sort-common,--relax") @@ -274,7 +271,10 @@ if(USE_LIBCPP) endif() if(WIN32) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthreads") + if(NOT MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthreads") + endif() + set(framework_DEFINITIONS ${framework_DEFINITIONS} -D_WIN32_WINNT=0x0501 -DWIN32) #set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -Wl,--large-address-aware") # strip all debug information set(SYSTEM_LIBRARIES "") diff --git a/src/framework/cmake/FindCXX11.cmake b/src/framework/cmake/FindCXX11.cmake deleted file mode 100644 index 1702e8df..00000000 --- a/src/framework/cmake/FindCXX11.cmake +++ /dev/null @@ -1,26 +0,0 @@ -if(__FIND_CXX11_CMAKE__) - return() -endif() -set(__FIND_CXX11_CMAKE__ TRUE) - -include(CheckCXXCompilerFlag) -enable_language(CXX) - -check_cxx_compiler_flag("-std=c++11" COMPILER_KNOWS_CXX11) -if(COMPILER_KNOWS_CXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") - - # Tested on Mac OS X 10.8.2 with XCode 4.6 Command Line Tools - # Clang requires this to find the correct c++11 headers - check_cxx_compiler_flag("-stdlib=libc++" COMPILER_KNOWS_STDLIB) - if(APPLE AND COMPILER_KNOWS_STDLIB) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") - endif() -else() - check_cxx_compiler_flag("-std=c++0x" COMPILER_KNOWS_CXX0X) - if(COMPILER_KNOWS_CXX0X) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") - else() - message(FATAL_ERROR "Your C++ compiler does not support C++11.") - endif() -endif() diff --git a/src/framework/cmake/FindGMP.cmake b/src/framework/cmake/FindGMP.cmake index 428b8921..7e533d25 100644 --- a/src/framework/cmake/FindGMP.cmake +++ b/src/framework/cmake/FindGMP.cmake @@ -13,4 +13,4 @@ ELSE() ENDIF() INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMP DEFAULT_MSG GMP_LIBRARY GMP_INCLUDE_DIR) -MARK_AS_ADVANCED(GMP_LIBRARY GMP_INCLUDE_DIR) \ No newline at end of file +MARK_AS_ADVANCED(GMP_LIBRARY GMP_INCLUDE_DIR) diff --git a/src/framework/cmake/FindLua.cmake b/src/framework/cmake/FindLua.cmake index ef4084eb..1206c619 100644 --- a/src/framework/cmake/FindLua.cmake +++ b/src/framework/cmake/FindLua.cmake @@ -4,10 +4,10 @@ # LUA_LIBRARY - the lua library # LUA_LIBRARIES - the lua library and it's dependencies -FIND_PATH(LUA_INCLUDE_DIR NAMES lua.h PATH_SUFFIXES lua51 lua5.1 lua) +FIND_PATH(LUA_INCLUDE_DIR NAMES lua.h PATH_SUFFIXES lua51 lua5-1 lua5.1 lua) FIND_LIBRARY(LUA_LIBRARY NAMES) -SET(_LUA_STATIC_LIBS liblua51.a liblua5.1.a liblua-5.1.a liblua.a ) -SET(_LUA_SHARED_LIBS liblua51.dll.a liblua5.1.dll.a liblua-5.1.dll.a liblua.dll.a lua51.dll lua5.1 lua-5.1 lua) +SET(_LUA_STATIC_LIBS lua51.a lua5.1.a lua-5.1.a lua.a) +SET(_LUA_SHARED_LIBS lua51 lua5.1 lua-5.1 lua) IF(USE_STATIC_LIBS) FIND_LIBRARY(LUA_LIBRARY NAMES ${_LUA_STATIC_LIBS} ${_LUA_SHARED_LIBS}) ELSE() @@ -15,4 +15,4 @@ ELSE() ENDIF() INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua DEFAULT_MSG LUA_LIBRARY LUA_INCLUDE_DIR) -MARK_AS_ADVANCED(LUA_LIBRARY LUA_INCLUDE_DIR) \ No newline at end of file +MARK_AS_ADVANCED(LUA_LIBRARY LUA_INCLUDE_DIR) diff --git a/src/framework/cmake/FindLuaJIT.cmake b/src/framework/cmake/FindLuaJIT.cmake index 6706aef4..2758f5d7 100644 --- a/src/framework/cmake/FindLuaJIT.cmake +++ b/src/framework/cmake/FindLuaJIT.cmake @@ -2,11 +2,10 @@ # LUAJIT_FOUND - system has lua # LUAJIT_INCLUDE_DIR - the lua include directory # LUAJIT_LIBRARY - the lua library -# LUAJIT_LIBRARIES - the lua library and it's dependencies -FIND_PATH(LUAJIT_INCLUDE_DIR NAMES lua.h PATH_SUFFIXES luajit-2.0 luajit-2.1) -SET(_LUAJIT_STATIC_LIBS libluajit51.a libluajit5.1.a libluajit-5.1.a libluajit.a) -SET(_LUAJIT_SHARED_LIBS libluajit51.dll.a libluajit5.1.dll.a libluajit-5.1.dll.a libluajit.dll.a luajit51 luajit5.1 luajit-5.1 luajit) +FIND_PATH(LUAJIT_INCLUDE_DIR NAMES luajit.h PATH_SUFFIXES luajit luajit-2.0 luajit-2.1) +SET(_LUAJIT_STATIC_LIBS luajit-5.1.a lua51.a) +SET(_LUAJIT_SHARED_LIBS luajit-5.1 lua51) IF(USE_STATIC_LIBS) FIND_LIBRARY(LUAJIT_LIBRARY NAMES ${_LUAJIT_STATIC_LIBS} ${_LUAJIT_SHARED_LIBS}) ELSE() diff --git a/src/framework/cmake/FindOpenSSL.cmake b/src/framework/cmake/FindOpenSSL.cmake index 8b600c49..d1ec41b0 100644 --- a/src/framework/cmake/FindOpenSSL.cmake +++ b/src/framework/cmake/FindOpenSSL.cmake @@ -3,11 +3,11 @@ # OPENSSL_INCLUDE_DIR - the OpenSSL include directory # OPENSSL_LIBRARY - the OpenSSL library -FIND_PATH(OPENSSL_INCLUDE_DIR NAMES openssl/ssl.h PATH_SUFFIXES openssl-1.0) -SET(_OPENSSL_STATIC_LIBS libssl.a) -SET(_OPENSSL_SHARED_LIBS libssl.dll.a ssl) -SET(_OPENSSL_CRYPTO_STATIC_LIBS libcrypto.a) -SET(_OPENSSL_CRYPTO_SHARED_LIBS libcrypto.dll.a crypto) +FIND_PATH(OPENSSL_INCLUDE_DIR NAMES openssl/ssl.h PATH_SUFFIXES include openssl-1.0) +SET(_OPENSSL_STATIC_LIBS libssl.a ssl.a) +SET(_OPENSSL_SHARED_LIBS libssl ssl) +SET(_OPENSSL_CRYPTO_STATIC_LIBS libcrypto.a crypto.a) +SET(_OPENSSL_CRYPTO_SHARED_LIBS libcrypto crypto) IF(USE_STATIC_LIBS) FIND_LIBRARY(OPENSSL_LIBRARY NAMES ${_OPENSSL_STATIC_LIBS} ${_OPENSSL_SHARED_LIBS} PATH_SUFFIXES openssl-1.0) FIND_LIBRARY(OPENSSL_CRYPTO_LIBRARY NAMES ${_OPENSSL_CRYPTO_STATIC_LIBS} ${_OPENSSL_CRYPTO_SHARED_LIBS} PATH_SUFFIXES openssl-1.0)