From 5925d5fc10d259b4924c3e34afef1839ada44851 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 25 Jan 2020 22:42:27 +0000 Subject: [PATCH] Improve cmake config for Windows and Visual Studio (#10361) - Ensure static CRT is used when compiling. - Allow Ninja generator to work (remove use of CMAKE_VS_PLATFORM_NAME). - Move CMakeSettings.json to new standard location for VS. --- .gitignore | 1 + .vs/CMakeSettings.json | 21 --------------------- CMakeLists.txt | 17 +++++++++++------ CMakeSettings.json | 22 ++++++++++++++++++++++ 4 files changed, 34 insertions(+), 27 deletions(-) delete mode 100644 .vs/CMakeSettings.json create mode 100644 CMakeSettings.json diff --git a/.gitignore b/.gitignore index eb51f0d12e..975c0cf16a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ bin.*/ .dependencies sequencesversion objectsversion +/out/ #lib lib diff --git a/.vs/CMakeSettings.json b/.vs/CMakeSettings.json deleted file mode 100644 index 0e32f3a202..0000000000 --- a/.vs/CMakeSettings.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "configurations": [ - { - "name": "x64-Debug", - "inheritEnvironments": [ "msvc_x64_x64" ], - "generator": "Ninja", - "buildRoot": "${env.LOCALAPPDATA}\\CMakeBuild\\${workspaceHash}\\build\\${name}", - "configurationType": "Debug", - "variables": [ - { - "name": "VCPKG_TARGET_TRIPLET", - "value": "x64-windows-winssl" - }, - { - "name": "CMAKE_TOOLCHAIN_FILE", - "value": "C:\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake" - } - ] - } - ] -} diff --git a/CMakeLists.txt b/CMakeLists.txt index f6e4683c9b..50e48f1726 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,13 +179,18 @@ function (ADD_CHECK_CXX_FLAG _CXXFLAGS _CACHE_VAR _FLAG) endfunction () if (MSVC) + # CMAKE does not have a built-in option for setting the CRT, so override the default flags. + # NOTE: doing it this way avoids a linker warning about one directive overriding another + set(CMAKE_CXX_FLAGS_DEBUG "/MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /DNDEBUG") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8 /permissive- /Zc:externConstexpr /EHsc /WX") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244") # C4244: 'conversion_type': conversion from 'type1' to 'type2', possible loss of data set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4068") # C4068: unknown pragma add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_SCL_SECURE_NO_WARNINGS) - if ((CMAKE_VS_PLATFORM_NAME STREQUAL "Win32") OR (CMAKE_VS_PLATFORM_NAME STREQUAL "x64")) + if (CMAKE_SIZEOF_VOID_P EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64") add_definitions(-D__SSE4_1__) add_definitions(-D__AVX2__) endif () @@ -280,7 +285,7 @@ install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CUR if (DOWNLOAD_TITLE_SEQUENCES) # If openrct2.parkseq or data/title/ exists, assume all the title sequences are already present install(CODE - "if (EXISTS \"\$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/openrct2.parkseq\" OR EXISTS ${CMAKE_SOURCE_DIR}/data/title/)\n\ + "if (EXISTS \"\$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/openrct2.parkseq\" OR EXISTS ${CMAKE_SOURCE_DIR}/data/title/)\n\ message(\"Using cached title sequences\")\n\ else () \n\ file(DOWNLOAD ${TITLE_SEQUENCE_URL} \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/title/title-sequences.zip EXPECTED_HASH SHA1=${TITLE_SEQUENCE_SHA1} SHOW_PROGRESS)\n\ @@ -291,12 +296,12 @@ endif () if (DOWNLOAD_OBJECTS) # If rct2.wtrcyan.json or data/object/ exists, assume all the objects are already present install(CODE - "if (EXISTS \"\$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/rct2/water/rct2.wtrcyan.json\" OR EXISTS ${CMAKE_SOURCE_DIR}/data/object/)\n\ + "if (EXISTS \"\$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/rct2/water/rct2.wtrcyan.json\" OR EXISTS ${CMAKE_SOURCE_DIR}/data/object/)\n\ message(\"Using cached objects\")\n\ else () \n\ - file(DOWNLOAD ${OBJECTS_URL} \$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/objects.zip EXPECTED_HASH SHA1=${OBJECTS_SHA1} SHOW_PROGRESS)\n\ - execute_process(COMMAND \"${CMAKE_COMMAND}\" -E chdir \$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/ \"${CMAKE_COMMAND}\" -E tar xf objects.zip)\n\ - file(REMOVE \$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/objects.zip)\n\ + file(DOWNLOAD ${OBJECTS_URL} \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/objects.zip EXPECTED_HASH SHA1=${OBJECTS_SHA1} SHOW_PROGRESS)\n\ + execute_process(COMMAND \"${CMAKE_COMMAND}\" -E chdir \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/ \"${CMAKE_COMMAND}\" -E tar xf objects.zip)\n\ + file(REMOVE \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT}/object/objects.zip)\n\ endif ()") endif () if (DOWNLOAD_REPLAYS) diff --git a/CMakeSettings.json b/CMakeSettings.json new file mode 100644 index 0000000000..f16f21c1a1 --- /dev/null +++ b/CMakeSettings.json @@ -0,0 +1,22 @@ +{ + "configurations": [ + { + "name": "x64-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "-v", + "ctestCommandArgs": "", + "variables": [ + { + "name": "VCPKG_TARGET_TRIPLET", + "value": "x64-windows-static", + "type": "STRING" + } + ] + } + ] +} \ No newline at end of file