From 96f638b98a6e9c6e9078dc6b240ab726017980d6 Mon Sep 17 00:00:00 2001 From: Yann Diorcet Date: Thu, 9 Apr 2020 09:54:44 +0200 Subject: [PATCH] Windows MSVC/Clang improvements --- CMakeLists.txt | 26 ++++++++++++++++---------- zproject_cmake.gsl | 34 ++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02ccbec7..2e3e7392 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,11 @@ enable_testing() set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") set(CMAKE_EXPORT_COMPILE_COMMANDS 1) # Select flags -SET(CMAKE_C_FLAGS_RELEASE "-O3") +if(MSVC) + SET(CMAKE_C_FLAGS_RELEASE "/O2") +else() + SET(CMAKE_C_FLAGS_RELEASE "-O3") +endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/builds/cmake/Modules) @@ -59,15 +63,17 @@ file(WRITE "${PROJECT_BINARY_DIR}/platform.h.in" " configure_file("${PROJECT_BINARY_DIR}/platform.h.in" "${PROJECT_BINARY_DIR}/platform.h") -#The MSVC C compiler is too out of date, -#so the sources have to be compiled as c++ -if (MSVC) - enable_language(CXX) - file(GLOB sources "${SOURCE_DIR}/src/*.c") - set_source_files_properties( - ${sources} - PROPERTIES LANGUAGE CXX - ) +if (WIN32) + #The MSVC C compiler is too out of date, + #so the sources have to be compiled as c++ + if (MSVC AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) + enable_language(CXX) + file(GLOB sources "${SOURCE_DIR}/src/*.c") + set_source_files_properties( + ${sources} + PROPERTIES LANGUAGE CXX + ) + endif() set(MORE_LIBRARIES ws2_32 Rpcrt4 Iphlpapi) endif() diff --git a/zproject_cmake.gsl b/zproject_cmake.gsl index 7f4202fa..0d053d30 100644 --- a/zproject_cmake.gsl +++ b/zproject_cmake.gsl @@ -31,7 +31,11 @@ enable_testing() set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") set(CMAKE_EXPORT_COMPILE_COMMANDS 1) # Select flags -SET(CMAKE_C_FLAGS_RELEASE "-O3") +if(MSVC) + SET(CMAKE_C_FLAGS_RELEASE "/O2") +else() + SET(CMAKE_C_FLAGS_RELEASE "-O3") +endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/builds/cmake/Modules) @@ -105,19 +109,21 @@ file(WRITE "${PROJECT_BINARY_DIR}/platform.h.in" " configure_file("${PROJECT_BINARY_DIR}/platform.h.in" "${PROJECT_BINARY_DIR}/platform.h") -#The MSVC C compiler is too out of date, -#so the sources have to be compiled as c++ -if (MSVC) - enable_language(CXX) -. if project.use_cxx - file(GLOB sources "${SOURCE_DIR}/src/*.$(project.source_ext)") -. else - file(GLOB sources "${SOURCE_DIR}/src/*.$(project.source_ext)") -. endif - set_source_files_properties( - ${sources} - PROPERTIES LANGUAGE CXX - ) +if (WIN32) + #The MSVC C compiler is too out of date, + #so the sources have to be compiled as c++ + if (MSVC AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) + enable_language(CXX) +. if project.use_cxx + file(GLOB sources "${SOURCE_DIR}/src/*.$(project.source_ext)") +. else + file(GLOB sources "${SOURCE_DIR}/src/*.$(project.source_ext)") +. endif + set_source_files_properties( + ${sources} + PROPERTIES LANGUAGE CXX + ) + endif() set(MORE_LIBRARIES ws2_32 Rpcrt4 Iphlpapi) endif()