From fa4aa340d0ef1147d6d577430c5f98445da6cdf2 Mon Sep 17 00:00:00 2001 From: midipix Date: Jun 05 2021 13:00:53 +0000 Subject: build system: ccenv: added ccenv_set_cc_linker_switch_vars(). --- 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