tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: why does devel/cmake's Makefile subst's out compiler optimization?
On Thu, Apr 05, 2018 at 04:40:48PM -0400, Chuck Cranor wrote:
> in that case you might have to have pkgsrc/mk/configure/cmake.mk
> set CMAKE_BUILD_TYPE to some non-null dummy value to avoid the
> above defaulting behavior...
following up on this... it is also possible that cmake-packages
examine ${CMAKE_BUILD_TYPE} and do something with it, so maybe a
non-null dummy value could be an issue there.
I also took at the diff generated by "SUBST_SED.flags=-e 's,-O.,,'"
and it is problematic as well because it assumes that all the compilers
that cmake support use the same optimizer flag format and that's
not true. I don't think you can cleanly do what you want to do
using that simple a sed expression. for example, the sed broke:
ARMCC.cmake:
- string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Ospace -DNDEBUG")
+ string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " pace -DNDEBUG")
^^^^
- string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -Otime -DNDEBUG")
+ string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " ime -DNDEBUG")
^^^
GHS-C.cmake:
-string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -Odebug -g")
+string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ebug -g")
^^^^
-string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -Ospace")
+string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " pace")
^^^^
-string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -O")
+string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " )
^^ (deleted end quote)
GHS-CXX.cmake: same issue as GHS-C.cmake above
GNU.cmake: it broke a URL in a comment:
- # [1]: https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Optimize-Options.html
+ # [1]: https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Optimizetions.html
XL.cmake:
- string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O")
+ string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " )
^^ (deleted end quote)
- string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -O")
+ string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " )
^^ (deleted end quote)
plus there are compilers configs like SunPro-C.cmake that use other
flags for optimization ("-xO3") that the sed skips:
string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -xO3 -DNDEBUG")
Rather than using sed, an alternate approach is to look at the
~150 compiler config files in work/cmake-3.9.4/Modules/Compiler
and choose the ones pkgsrc cares about and use patches to change
them. You could do something like this:
--- GNU.cmake_ORIG 2018-04-06 10:20:57.000000000 -0400
+++ GNU.cmake 2018-04-06 10:22:22.000000000 -0400
@@ -39,9 +39,15 @@
# Initial configuration flags.
string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
- string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG")
- string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
- string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
+ if (PKGSRC-INIT) # if using pkgsrc, let it use CFLAGS to control opts
+ string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+ string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -DNDEBUG")
+ string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -g -DNDEBUG")
+ else (PKGSRC-INIT)
+ string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG")
+ string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
+ string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
+ endif (PKGSRC-INIT)
set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
if(NOT APPLE OR NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4) # work around #4462
and then have pkgsrc/mk/configure/cmake.mk set a cmake cache variable
${PKGSRC-INIT} with "-DPKGSRC-INIT=ON" on its configure command line
for packages it builds to enable this behavior only for packages built
by pkgsrc... that way CMAKE_BUILD_TYPE would work as expected for
stuff being built outside of pkgsrc.
chuck
Home |
Main Index |
Thread Index |
Old Index