CachedCMakePackage: Port over logic from CMake build system for ldlibs and ldflags (#31750)

* port over logic from cmake build system for ldlibs and ldflags

* follow new style standards

* escape quotes

* escape quotes

* nevermind going back
This commit is contained in:
Chris White 2022-08-11 14:55:43 -07:00 committed by GitHub
parent 6ab6058ab4
commit 8c23545a3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -87,21 +87,42 @@ def initconfig_compiler_entries(self):
"endif()\n",
]
flags = spec.compiler_flags
# use global spack compiler flags
cppflags = " ".join(spec.compiler_flags["cppflags"])
cppflags = " ".join(flags["cppflags"])
if cppflags:
# avoid always ending up with ' ' with no flags defined
# avoid always ending up with " " with no flags defined
cppflags += " "
cflags = cppflags + " ".join(spec.compiler_flags["cflags"])
cflags = cppflags + " ".join(flags["cflags"])
if cflags:
entries.append(cmake_cache_string("CMAKE_C_FLAGS", cflags))
cxxflags = cppflags + " ".join(spec.compiler_flags["cxxflags"])
cxxflags = cppflags + " ".join(flags["cxxflags"])
if cxxflags:
entries.append(cmake_cache_string("CMAKE_CXX_FLAGS", cxxflags))
fflags = " ".join(spec.compiler_flags["fflags"])
fflags = " ".join(flags["fflags"])
if fflags:
entries.append(cmake_cache_string("CMAKE_Fortran_FLAGS", fflags))
# Cmake has different linker arguments for different build types.
# We specify for each of them.
if flags["ldflags"]:
ld_flags = " ".join(flags["ldflags"])
ld_format_string = "CMAKE_{0}_LINKER_FLAGS"
# CMake has separate linker arguments for types of builds.
for ld_type in ["EXE", "MODULE", "SHARED", "STATIC"]:
ld_string = ld_format_string.format(ld_type)
entries.append(cmake_cache_string(ld_string, ld_flags))
# CMake has libs options separated by language. Apply ours to each.
if flags["ldlibs"]:
libs_flags = " ".join(flags["ldlibs"])
libs_format_string = "CMAKE_{0}_STANDARD_LIBRARIES"
langs = ["C", "CXX", "Fortran"]
for lang in langs:
libs_string = libs_format_string.format(lang)
entries.append(cmake_cache_string(libs_string, libs_flags))
return entries
def initconfig_mpi_entries(self):