summaryrefslogtreecommitdiffstats
path: root/scripts/wrapper
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2012-10-21 15:49:01 +0200
committerMichael Olbrich <m.olbrich@pengutronix.de>2012-10-25 00:27:22 +0200
commit8121f1cf41cb87505e75f8ce8cc02afaaffbdbf8 (patch)
treea12e5a98503703f6c4392e4246ee86eda3ea877d /scripts/wrapper
parent1e7dd9c2f9c708060786d1f9ffc7caac8b270887 (diff)
downloadptxdist-8121f1cf41cb87505e75f8ce8cc02afaaffbdbf8.tar.gz
ptxdist-8121f1cf41cb87505e75f8ce8cc02afaaffbdbf8.tar.xz
fixup! wrapper: introduce a wrapper for cc, c++ and ld
Diffstat (limited to 'scripts/wrapper')
-rwxr-xr-xscripts/wrapper/c++-wrapper14
-rwxr-xr-xscripts/wrapper/cc-wrapper53
-rwxr-xr-xscripts/wrapper/ld-wrapper19
-rw-r--r--scripts/wrapper/libwrapper.sh80
4 files changed, 104 insertions, 62 deletions
diff --git a/scripts/wrapper/c++-wrapper b/scripts/wrapper/c++-wrapper
index ad97e9a28..a79930e1a 100755
--- a/scripts/wrapper/c++-wrapper
+++ b/scripts/wrapper/c++-wrapper
@@ -1,3 +1,13 @@
-#!/bin/sh
+#!/bin/bash
-exec $0.real "$@"
+. ${PTXDIST_PLATFORMCONFIG}
+. "$(dirname "$(readlink -f "$0")")/libwrapper.sh" || exit
+
+cc_check_args "${@}"
+
+cc_add_ld_args
+cc_add_fortify
+cc_add_stack
+cxx_add_extra
+
+exec $0.real "${ARG_LIST[@]}" "$@"
diff --git a/scripts/wrapper/cc-wrapper b/scripts/wrapper/cc-wrapper
index 8f16b75d5..73c718cff 100755
--- a/scripts/wrapper/cc-wrapper
+++ b/scripts/wrapper/cc-wrapper
@@ -1,50 +1,13 @@
-#!/bin/sh
+#!/bin/bash
. ${PTXDIST_PLATFORMCONFIG}
+. "$(dirname "$(readlink -f "$0")")/libwrapper.sh" || exit
-LINKING=1
-FORTIFY=1
-STDLIB=1
+cc_check_args "${@}"
-for ARG in "$@"; do
- if [[ "${ARG}" = "-c" ]]; then
- LINKING=0
- fi
- if [[ "${ARG}" =~ -D_FORTIFY_SOURCE(=|$) ]]; then
- FORTIFY=0
- fi
- if [[ "${ARG}" = "-nostdlib" ||
- "${ARG}" = "-ffreestanding" ]]; then
- STDLIB=0
- fi
-done
+cc_add_ld_args
+cc_add_fortify
+cc_add_stack
+cc_add_extra
-ARG_LIST=""
-
-if [[ "${LINKING}" = 1 ]]; then
- if [[ "${PTXCONF_TARGET_HARDEN_RELRO}" = "y" ]]; then
- ARG_LIST+="-Wl,-z,relro "
- fi
- if [[ "${PTXCONF_TARGET_HARDEN_BINDNOW}" = "y" ]]; then
- ARG_LIST+="-Wl,-z,now "
- fi
- if [[ "${PTXCONF_TARGET_LINKER_GNUHASH}" = "y" ]]; then
- ARG_LIST+="-Wl,--hash-style=gnu "
- fi
-fi
-
-if [[ "${FORTIFY}" = 1 ]]; then
- if [[ "${PTXCONF_TARGET_HARDEN_FORTIFY}" = "y" ]]; then
- ARG_LIST+="-D_FORTIFY_SOURCE=2 "
- fi
-fi
-
-if [[ "${STDLIB}" = 1 ]]; then
- if [[ "${PTXCONF_TARGET_HARDEN_STACK}" = "y" ]]; then
- ARG_LIST+="-fstack-protector --param=ssp-buffer-size=4 "
- fi
-fi
-
-#echo $0 $ARG_LIST "$@" >&2
-
-exec $0.real $ARG_LIST "$@"
+exec $0.real "${ARG_LIST[@]}" "$@"
diff --git a/scripts/wrapper/ld-wrapper b/scripts/wrapper/ld-wrapper
index f3f38054c..11f785d67 100755
--- a/scripts/wrapper/ld-wrapper
+++ b/scripts/wrapper/ld-wrapper
@@ -1,19 +1,8 @@
-#!/bin/sh
+#!/bin/bash
. ${PTXDIST_PLATFORMCONFIG}
+. "$(dirname "$(readlink -f "$0")")/libwrapper.sh" || exit
-ARG_LIST=""
+add_ld_args
-if [ "${PTXCONF_TARGET_HARDEN_RELRO}" = "y" ]; then
- ARG_LIST+="-z relro "
-fi
-if [ "${PTXCONF_TARGET_HARDEN_BINDNOW}" = "y" ]; then
- ARG_LIST+="-z now "
-fi
-if [[ "${PTXCONF_TARGET_LINKER_GNUHASH}" = "y" ]]; then
- ARG_LIST+="--hash-style=gnu "
-fi
-
-#echo $0 $ARG_LIST "$@" >&2
-
-exec $0.real $ARG_LIST "$@"
+exec $0.real "${ARG_LIST[@]}" "$@"
diff --git a/scripts/wrapper/libwrapper.sh b/scripts/wrapper/libwrapper.sh
new file mode 100644
index 000000000..cebc4ee72
--- /dev/null
+++ b/scripts/wrapper/libwrapper.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+
+LINKING=1
+FORTIFY=1
+STDLIB=1
+declare -a ARG_LIST
+
+cc_check_args() {
+ for ARG in "$@"; do
+ if [[ "${ARG}" = "-c" ]]; then
+ LINKING=0
+ fi
+ if [[ "${ARG}" =~ -D_FORTIFY_SOURCE(=|$) ]]; then
+ FORTIFY=0
+ fi
+ if [[ "${ARG}" = "-nostdlib" ||
+ "${ARG}" = "-ffreestanding" ]]; then
+ STDLIB=0
+ fi
+ done
+}
+
+add_arg() {
+ for arg in "${@}"; do
+ ARG_LIST[${#ARG_LIST[@]}]="${arg}"
+ done
+}
+
+add_opt_arg() {
+ local blacklist="${pkg_wrapper_blacklist}"
+ local opt="${1}"
+ shift
+
+ if grep -q "\<${opt}\>" <<< "${blacklist}"; then
+ return
+ fi
+ opt="PTXCONF_${opt}"
+ if [ -z "${!opt}" ]; then
+ return
+ fi
+ add_arg "${@}"
+}
+
+add_ld_args() {
+ add_opt_arg TARGET_HARDEN_RELRO "${1}-z,relro"
+ add_opt_arg TARGET_HARDEN_BINDNOW "${1}-z,now"
+ add_opt_arg TARGET_LINKER_GNUHASH "${1}--hash-style=gnu"
+}
+
+cc_add_ld_args() {
+ if [[ "${LINKING}" = 1 ]]; then
+ add_ld_args "-Wl,"
+ add_arg ${PTXDIST_CROSS_LDFLAGS}
+ add_opt_arg TARGET_EXTRA_LDFLAGS ${PTXCONF_TARGET_EXTRA_LDFLAGS}
+ fi
+}
+
+cc_add_fortify() {
+ if [[ "${FORTIFY}" = 1 ]]; then
+ add_opt_arg TARGET_HARDEN_FORTIFY "-D_FORTIFY_SOURCE=2"
+ fi
+}
+
+cc_add_stack() {
+ if [[ "${STDLIB}" = 1 ]]; then
+ add_opt_arg TARGET_HARDEN_STACK "-fstack-protector" "--param=ssp-buffer-size=4"
+ fi
+}
+
+cc_add_extra() {
+ add_arg ${PTXDIST_CROSS_CPPFLAGS}
+ add_opt_arg TARGET_EXTRA_CPPFLAGS ${PTXCONF_TARGET_EXTRA_CPPFLAGS}
+ add_opt_arg TARGET_EXTRA_CFLAGS ${PTXCONF_TARGET_EXTRA_CFLAGS}
+}
+
+cxx_add_extra() {
+ add_arg ${PTXDIST_CROSS_CPPFLAGS}
+ add_opt_arg TARGET_EXTRA_CPPFLAGS ${PTXCONF_TARGET_EXTRA_CPPFLAGS}
+ add_opt_arg TARGET_EXTRA_CXXFLAGS ${PTXCONF_TARGET_EXTRA_CXXFLAGS}
+}