From ef2b8716092d2fd1e3cb7c1272599f14b9304477 Mon Sep 17 00:00:00 2001
From: midipix <writeonce@midipix.org>
Date: Sat, 5 Jun 2021 10:24:32 +0000
Subject: build system: ccenv: added ccenv_set_cc_linker_switch_vars().

---
 sofort/ccenv/ccenv.sh      | 55 ++++++++++++++++++++++++++++++++++++++++++++--
 sofort/ccenv/ccswitch.strs |  4 +++-
 2 files changed, 56 insertions(+), 3 deletions(-)

(limited to 'sofort/ccenv')

diff --git a/sofort/ccenv/ccenv.sh b/sofort/ccenv/ccenv.sh
index baa0790..17656e3 100644
--- a/sofort/ccenv/ccenv.sh
+++ b/sofort/ccenv/ccenv.sh
@@ -1442,12 +1442,12 @@ ccenv_output_defs()
 ccenv_set_cc_switch_vars()
 {
 	if [ -f $mb_project_dir/project/config/ccswitch.strs ]; then
-		ccenv_switch_vars=$(grep -v '^#'                   \
+		ccenv_switch_vars=$(grep -v -e '^#' -e '^-Wl,'     \
 			$mb_project_dir/sofort/ccenv/ccswitch.strs  \
 			$mb_project_dir/project/config/ccswitch.strs \
 			| sort -u)
 	else
-		ccenv_switch_vars=$(grep -v '^#'                   \
+		ccenv_switch_vars=$(grep -v -e '^#' -e '^-Wl,'     \
 			$mb_project_dir/sofort/ccenv/ccswitch.strs  \
 			| sort -u)
 	fi
@@ -1488,6 +1488,56 @@ ccenv_set_cc_switch_vars()
 	done
 }
 
+ccenv_set_cc_linker_switch_vars()
+{
+	printf '\n# %s ldflags: supported compiler switches\n' "$ccenv_cfgtype" \
+		>> "$ccenv_mk"
+
+	if [ -f $mb_project_dir/project/config/ccswitch.strs ]; then
+		ccenv_switch_vars=$(grep -e '^-Wl,'                \
+			$mb_project_dir/sofort/ccenv/ccswitch.strs  \
+			$mb_project_dir/project/config/ccswitch.strs \
+			| sort -u)
+	else
+		ccenv_switch_vars=$(grep -e '^-Wl,'                \
+			$mb_project_dir/sofort/ccenv/ccswitch.strs  \
+			| sort -u)
+	fi
+
+	if [ $ccenv_cfgtype = 'host' ]; then
+		ccenv_makevar_prefix='_LDFLAGS_'
+		cfgtest_host_section
+	else
+		ccenv_makevar_prefix='_NATIVE_LDFLAGS_'
+		cfgtest_native_section
+	fi
+
+	for ccenv_switch_var in $(printf '%s' "$ccenv_switch_vars"); do
+		ccenv_make_var=${ccenv_switch_var%=}
+		ccenv_make_var=${ccenv_make_var%,}
+
+		ccenv_make_var=${ccenv_make_var##---}
+		ccenv_make_var=${ccenv_make_var##--}
+		ccenv_make_var=${ccenv_make_var##-}
+
+		ccenv_make_var=$(printf '%s' "$ccenv_make_var" \
+			| sed -e 's/=/_/g' -e 's/-/_/g' -e 's/,/_/g')
+
+		ccenv_make_var="${ccenv_makevar_prefix}${ccenv_make_var}"
+
+		if cfgtest_compiler_switch "$ccenv_switch_var"; then
+			ccenv_switch_var=${ccenv_switch_var%=}
+			ccenv_switch_var=${ccenv_switch_var%,}
+
+			printf '%-40s= %s\n' "${ccenv_make_var}" "${ccenv_switch_var}" \
+				>> "$ccenv_mk"
+		else
+			printf '%-40s=\n' "${ccenv_make_var}" \
+				>> "$ccenv_mk"
+		fi
+	done
+}
+
 ccenv_dso_verify()
 {
 	ccenv_str='int foo(int x){return ++x;}'
@@ -1599,6 +1649,7 @@ ccenv_set_toolchain_variables()
 	ccenv_clean_up
 
 	ccenv_set_cc_switch_vars
+	ccenv_set_cc_linker_switch_vars
 }
 
 ccenv_set_host_variables()
diff --git a/sofort/ccenv/ccswitch.strs b/sofort/ccenv/ccswitch.strs
index f27fe62..9c4f508 100644
--- a/sofort/ccenv/ccswitch.strs
+++ b/sofort/ccenv/ccswitch.strs
@@ -5,7 +5,8 @@
 # ``CFLAGS_foo = -foo'' to the respective ccenv variable file
 # (that is, ccenv/host.mk or ccenv/native.mk).
 
-# the make variable prefix is _CFLAGS_ or _NATIVE_CFLAGS_,
+# the make variable prefix is _CFLAGS_ or _NATIVE_CFLAGS_
+# (_LDFLAGS_ or _NATIVE_LDFLAGS for -Wl, linker options),
 # to which the compiler-switch, minus leading dashes and
 # trailing equal-sign or comma, is appended; non-leading
 # dashes and non-trailing equal-signs and commas are then
@@ -24,6 +25,7 @@
 -std=c11
 
 # linker switches
+-Wl,
 -Wl,--no-undefined
 
 # errors and warnings
-- 
cgit v1.2.3