diff options
author | Daiki Noda <sys9kdr@users.noreply.github.com> | 2025-01-06 04:28:31 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-05 11:28:31 -0800 |
commit | ac5a6d9ff56b451f5f24dfd3c46a6447375d3394 (patch) | |
tree | f81740b1f3573c7e86e940f99e2a0edca76f6b42 | |
parent | 548f19ccc3018aa563d25cf99a9ce70a56b115fe (diff) | |
download | rneovim-ac5a6d9ff56b451f5f24dfd3c46a6447375d3394.tar.gz rneovim-ac5a6d9ff56b451f5f24dfd3c46a6447375d3394.tar.bz2 rneovim-ac5a6d9ff56b451f5f24dfd3c46a6447375d3394.zip |
build: fix RelWithDebInfo optimization flags #31802
Problem:
RelWithDebInfo generates redundant flags:
Compilation: /usr/bin/cc -O2 -g -Og -g
The `CMAKE_C_FLAGS_RELWITHDEBINFO` variable is being modified in a way
that caused duplicate `-Og` and `-g` flags to be added. The resulting
flags were `-O2 -g -Og -g`.
- `-Og` (Optimize for debugging) and `-O2` (Optimize for performance)
are different optimization levels. We can't use both at once.
- The duplicate `-g` flag is redundant and no effect.
multiple -O flags has no effect for code, just redundant.
> If you use multiple -O options, with or without level numbers, the last such option is the one that is effective.
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
Solution:
Adjust the flags to use the more appropriate `-O2 -g`.
Compilation: /usr/bin/cc -O2 -g
BEFORE:
```
:verbose version
NVIM v0.11.0-dev-1443+ge00cd1ab40
Build type: RelWithDebInfo
LuaJIT 2.1.1734355927
Compilation: /usr/bin/cc -O2 -g -Og -g -flto -fno-fat-lto-ob
jects -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict
...
```
AFTER:
```
:verbose version
NVIM v0.11.0-dev-e00cd1ab4-dirty
Build type: RelWithDebInfo
LuaJIT 2.1.1734355927
Compilation: /usr/bin/cc -O2 -g -flto -fno-fat-lto-objects -
Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-protot
...
```
-rw-r--r-- | CMakeLists.txt | 5 | ||||
-rw-r--r-- | CMakePresets.json | 2 | ||||
-rw-r--r-- | contrib/local.mk.example | 2 |
3 files changed, 2 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index a19c04c26f..b9ceb05aba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -149,11 +149,6 @@ set(NVIM_API_LEVEL 13) # Bump this after any API/stdlib change. set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change. set(NVIM_API_PRERELEASE true) -# Build-type: RelWithDebInfo -# /Og means something different in MSVC -if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -Og -g") -endif() # We _want_ assertions in RelWithDebInfo build-type. if(CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES DNDEBUG) string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") diff --git a/CMakePresets.json b/CMakePresets.json index 1d214d7801..b863d88608 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -10,7 +10,7 @@ { "name": "default", "displayName": "RelWithDebInfo", - "description": "Enables optimizations (-Og or -O2) with debug information", + "description": "Enables optimizations (-O2) with debug information", "cacheVariables": { "CMAKE_BUILD_TYPE": "RelWithDebInfo" }, diff --git a/contrib/local.mk.example b/contrib/local.mk.example index 718bf9f2a3..f3024a147c 100644 --- a/contrib/local.mk.example +++ b/contrib/local.mk.example @@ -14,7 +14,7 @@ # # - Debug: Disables optimizations (-O0), enables debug information. # -# - RelWithDebInfo: Enables optimizations (-Og or -O2) with debug information. +# - RelWithDebInfo: Enables optimizations (-O2) with debug information. # # - MinSizeRel: Enables all -O2 optimization that do not typically # increase code size, and performs further optimizations |