https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d10728a64589cb87a1b47ba9c39b40b1d0f1212e

commit d10728a64589cb87a1b47ba9c39b40b1d0f1212e
Author:     Victor Perevertkin <victor.perevert...@reactos.org>
AuthorDate: Thu Apr 15 04:52:59 2021 +0300
Commit:     Victor Perevertkin <victor.perevert...@reactos.org>
CommitDate: Thu Apr 15 06:44:56 2021 +0300

    [CMAKE] Rely less on CMAKE_BUILD_TYPE variable
    
    Having conditional statements with CMAKE_BUILD_TYPE is an antipattern
    See 
https://stackoverflow.com/questions/66079007/having-conditional-statements-on-build-type-variable-a-good-design
    
    We use both single- and multi-config generators (Ninja and VS), so we
    can't really rely on CMAKE_BUILD_TYPE, because it's not always set.
    
    This commit alters some conditional flags to use <$CONFIG:...>
    generator expression, but is still not complete. Also, our default
    optimization level (4) now has what was always a de-facto flags
---
 CMakeLists.txt       | 10 ++++++++++
 sdk/cmake/msvc.cmake | 21 +++++++--------------
 toolchain-gcc.cmake  |  6 ------
 toolchain-msvc.cmake |  6 ------
 4 files changed, 17 insertions(+), 26 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8796992b5e2..ac31959a410 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,6 +49,16 @@ else()
     set(WINARCH ${ARCH})
 endif()
 
+# set CMAKE_BUILD_TYPE if not set
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+    message(STATUS "Setting build type to Debug as none was specified.")
+    set(CMAKE_BUILD_TYPE "Debug" CACHE
+        STRING "Choose the type of build." FORCE)
+    # Set the possible values of build type for cmake-gui
+    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
+                 "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
+endif()
+
 # Versioning
 include(sdk/include/reactos/version.cmake)
 
diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake
index 43a2c8a7fdc..aad75ebcc4d 100644
--- a/sdk/cmake/msvc.cmake
+++ b/sdk/cmake/msvc.cmake
@@ -1,9 +1,5 @@
 
-#if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
-if(CMAKE_BUILD_TYPE STREQUAL "Debug")
-    # no optimization
-    add_compile_options(/Ob0 /Od)
-elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
+if(CMAKE_BUILD_TYPE STREQUAL "Release")
     add_compile_options(/Ox /Ob2 /Ot /Oy /GT)
 elseif(OPTIMIZE STREQUAL "1")
     add_compile_options(/O1)
@@ -12,7 +8,7 @@ elseif(OPTIMIZE STREQUAL "2")
 elseif(OPTIMIZE STREQUAL "3")
     add_compile_options(/Ot /Ox /GS-)
 elseif(OPTIMIZE STREQUAL "4")
-    add_compile_options(/Os /Ox /GS-)
+    add_compile_options(/Ob0 /Od)
 elseif(OPTIMIZE STREQUAL "5")
     add_compile_options(/Gy /Ob2 /Os /Ox /GS-)
 endif()
@@ -116,8 +112,8 @@ add_compile_options(/wd4018)
 add_compile_options(/we4013 /we4020 /we4022 /we4028 /we4047 /we4098 /we4101 
/we4113 /we4129 /we4133 /we4163 /we4229 /we4311 /we4312 /we4313 /we4477 /we4603 
/we4700 /we4715 /we4716)
 
 # - C4189: local variable initialized but not referenced
-# Not in Release mode
-if(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
+# Not in Release mode, msbuild generator doesn't like CMAKE_BUILD_TYPE
+if(MSVC_IDE OR CMAKE_BUILD_TYPE STREQUAL "Debug")
     add_compile_options(/we4189)
 endif()
 
@@ -130,13 +126,10 @@ if(USE_CLANG_CL)
 endif()
 
 # Debugging
-if(CMAKE_BUILD_TYPE STREQUAL "Debug")
-    if(NOT (_PREFAST_ OR _VS_ANALYZE_))
-        add_compile_options(/Zi)
-    endif()
-elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
-    add_definitions("/D NDEBUG")
+if(NOT (_PREFAST_ OR _VS_ANALYZE_))
+    add_compile_options($<$<CONFIG:Debug>:/Zi>)
 endif()
+add_compile_definitions($<$<CONFIG:Release>:NDEBUG>)
 
 # Hotpatchable images
 if(ARCH STREQUAL "i386")
diff --git a/toolchain-gcc.cmake b/toolchain-gcc.cmake
index 9d2a51899ee..f6ca04a8000 100644
--- a/toolchain-gcc.cmake
+++ b/toolchain-gcc.cmake
@@ -1,10 +1,4 @@
 
-# Default to Debug for the build type
-if(NOT DEFINED CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Debug" CACHE STRING
-        "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or 
CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.")
-endif()
-
 # pass variables necessary for the toolchain (needed for try_compile)
 set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES ARCH)
 
diff --git a/toolchain-msvc.cmake b/toolchain-msvc.cmake
index 9de8fca31e9..97921b216f7 100644
--- a/toolchain-msvc.cmake
+++ b/toolchain-msvc.cmake
@@ -1,10 +1,4 @@
 
-# Default to Debug for the build type
-if(NOT DEFINED CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Debug" CACHE STRING
-        "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or 
CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.")
-endif()
-
 # pass variables necessary for the toolchain (needed for try_compile)
 set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES ARCH USE_CLANG_CL)
 

Reply via email to