ldflags=* are compiler flags, not linker flags (#43820)
We run `extend spack_flags_list SPACK_LDFLAGS` for `$mode in ld|ccld`. That's problematic, cause `ccld` needs `-Wl,--flag` whereas `ld` needs `--flag` directly. Only `-L` and `-l` are common to compiler & linker. In all build systems `LDFLAGS` is for the compiler not the linker, cause any linker flag `-x` can be passed as a compiler flag `-Wl,-x`, and there are many compiler flags that affect the linker invocation, like `-fopenmp`, `-fuse-ld=`, `-fsanitize=` etc. So don't pass `LDFLAGS` to the linker directly. This way users can set `ldflags: -Wl,--allow-shlib-undefined` in compilers.yaml to work around an issue where the linker tries to resolve the `libcuda.so.1` stub lib which cannot be located by design in `cuda`.
This commit is contained in:
		
							
								
								
									
										2
									
								
								lib/spack/env/cc
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								lib/spack/env/cc
									
									
									
									
										vendored
									
									
								
							@@ -755,7 +755,7 @@ esac
 | 
			
		||||
 | 
			
		||||
# Linker flags
 | 
			
		||||
case "$mode" in
 | 
			
		||||
    ld|ccld)
 | 
			
		||||
    ccld)
 | 
			
		||||
        extend spack_flags_list SPACK_LDFLAGS
 | 
			
		||||
        ;;
 | 
			
		||||
esac
 | 
			
		||||
 
 | 
			
		||||
@@ -127,7 +127,7 @@
 | 
			
		||||
spack_cflags = ["-Wall"]
 | 
			
		||||
spack_cxxflags = ["-Werror"]
 | 
			
		||||
spack_fflags = ["-w"]
 | 
			
		||||
spack_ldflags = ["-L", "foo"]
 | 
			
		||||
spack_ldflags = ["-Wl,--gc-sections", "-L", "foo"]
 | 
			
		||||
spack_ldlibs = ["-lfoo"]
 | 
			
		||||
 | 
			
		||||
lheaderpad = ["-Wl,-headerpad_max_install_names"]
 | 
			
		||||
@@ -279,7 +279,6 @@ def test_ld_flags(wrapper_environment, wrapper_flags):
 | 
			
		||||
        test_args,
 | 
			
		||||
        ["ld"]
 | 
			
		||||
        + test_include_paths
 | 
			
		||||
        + [spack_ldflags[i] + spack_ldflags[i + 1] for i in range(0, len(spack_ldflags), 2)]
 | 
			
		||||
        + test_library_paths
 | 
			
		||||
        + ["--disable-new-dtags"]
 | 
			
		||||
        + test_rpaths
 | 
			
		||||
@@ -307,13 +306,14 @@ def test_cc_flags(wrapper_environment, wrapper_flags):
 | 
			
		||||
        [real_cc]
 | 
			
		||||
        + target_args
 | 
			
		||||
        + test_include_paths
 | 
			
		||||
        + [spack_ldflags[i] + spack_ldflags[i + 1] for i in range(0, len(spack_ldflags), 2)]
 | 
			
		||||
        + ["-Lfoo"]
 | 
			
		||||
        + test_library_paths
 | 
			
		||||
        + ["-Wl,--disable-new-dtags"]
 | 
			
		||||
        + test_wl_rpaths
 | 
			
		||||
        + test_args_without_paths
 | 
			
		||||
        + spack_cppflags
 | 
			
		||||
        + spack_cflags
 | 
			
		||||
        + ["-Wl,--gc-sections"]
 | 
			
		||||
        + spack_ldlibs,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -325,12 +325,13 @@ def test_cxx_flags(wrapper_environment, wrapper_flags):
 | 
			
		||||
        [real_cc]
 | 
			
		||||
        + target_args
 | 
			
		||||
        + test_include_paths
 | 
			
		||||
        + [spack_ldflags[i] + spack_ldflags[i + 1] for i in range(0, len(spack_ldflags), 2)]
 | 
			
		||||
        + ["-Lfoo"]
 | 
			
		||||
        + test_library_paths
 | 
			
		||||
        + ["-Wl,--disable-new-dtags"]
 | 
			
		||||
        + test_wl_rpaths
 | 
			
		||||
        + test_args_without_paths
 | 
			
		||||
        + spack_cppflags
 | 
			
		||||
        + ["-Wl,--gc-sections"]
 | 
			
		||||
        + spack_ldlibs,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -342,13 +343,14 @@ def test_fc_flags(wrapper_environment, wrapper_flags):
 | 
			
		||||
        [real_cc]
 | 
			
		||||
        + target_args
 | 
			
		||||
        + test_include_paths
 | 
			
		||||
        + [spack_ldflags[i] + spack_ldflags[i + 1] for i in range(0, len(spack_ldflags), 2)]
 | 
			
		||||
        + ["-Lfoo"]
 | 
			
		||||
        + test_library_paths
 | 
			
		||||
        + ["-Wl,--disable-new-dtags"]
 | 
			
		||||
        + test_wl_rpaths
 | 
			
		||||
        + test_args_without_paths
 | 
			
		||||
        + spack_fflags
 | 
			
		||||
        + spack_cppflags
 | 
			
		||||
        + ["-Wl,--gc-sections"]
 | 
			
		||||
        + spack_ldlibs,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user