summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJouke Witteveen <j.witteveen@gmail.com>2024-03-08 11:57:35 +0100
committerDylan Baker <dylan@pnwbakers.com>2024-04-11 09:40:47 -0700
commitbcb82b390a382e10b6dd5a8e27727b31ada811b1 (patch)
treecdbd40643c0486cd0644acd7fa249f85906a157f
parentbf00ca69b5eb8c836ba76402bb94ccf52660d724 (diff)
downloadmeson-bcb82b390a382e10b6dd5a8e27727b31ada811b1.tar.gz
cmake: best-effort build type propagation
-rw-r--r--mesonbuild/cmake/interpreter.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py
index 68cbea497..eae2c17f2 100644
--- a/mesonbuild/cmake/interpreter.py
+++ b/mesonbuild/cmake/interpreter.py
@@ -67,6 +67,14 @@ disable_policy_warnings = [
'CMP0102',
]
+# CMake is a bit more averse to debugging, but in spirit the build types match
+buildtype_map = {
+ 'debug': 'Debug',
+ 'debugoptimized': 'RelWithDebInfo', # CMake sets NDEBUG
+ 'release': 'Release',
+ 'minsize': 'MinSizeRel', # CMake leaves out debug information immediately
+}
+
target_type_map = {
'STATIC_LIBRARY': 'static_library',
'MODULE_LIBRARY': 'shared_module',
@@ -819,6 +827,11 @@ class CMakeInterpreter:
cmake_args += cmake_get_generator_args(self.env)
cmake_args += [f'-DCMAKE_INSTALL_PREFIX={self.install_prefix}']
cmake_args += extra_cmake_options
+ if not any(arg.startswith('-DCMAKE_BUILD_TYPE=') for arg in cmake_args):
+ # Our build type is favored over any CMAKE_BUILD_TYPE environment variable
+ buildtype = T.cast('str', self.env.coredata.get_option(OptionKey('buildtype')))
+ if buildtype in buildtype_map:
+ cmake_args += [f'-DCMAKE_BUILD_TYPE={buildtype_map[buildtype]}']
trace_args = self.trace.trace_args()
cmcmp_args = [f'-DCMAKE_POLICY_WARNING_{x}=OFF' for x in disable_policy_warnings]