aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/toplevel.mk11
-rwxr-xr-xscripts/clang-gcc-wrapper12
2 files changed, 21 insertions, 2 deletions
diff --git a/include/toplevel.mk b/include/toplevel.mk
index a623be9f2e..23d70ac81a 100644
--- a/include/toplevel.mk
+++ b/include/toplevel.mk
@@ -43,6 +43,13 @@ unexport LPATH
# make sure that a predefined CFLAGS variable does not disturb packages
export CFLAGS=
+ifneq ($(shell $(HOSTCC) 2>&1 | grep clang),)
+ export HOSTCC_REAL?=$(HOSTCC)
+ export HOSTCC_WRAPPER:=$(TOPDIR)/scripts/clang-gcc-wrapper
+else
+ export HOSTCC_WRAPPER:=$(HOSTCC)
+endif
+
ifeq ($(FORCE),)
.config scripts/config/conf scripts/config/mconf: tmp/.prereq-build
endif
@@ -74,12 +81,12 @@ prepare-tmpinfo: FORCE
fi
scripts/config/mconf:
- @$(_SINGLE)$(SUBMAKE) -s -C scripts/config all CC="$(HOSTCC)"
+ @$(_SINGLE)$(SUBMAKE) -s -C scripts/config all CC="$(HOSTCC_WRAPPER)"
$(eval $(call rdep,scripts/config,scripts/config/mconf))
scripts/config/conf:
- @$(_SINGLE)$(SUBMAKE) -s -C scripts/config conf CC="$(HOSTCC)"
+ @$(_SINGLE)$(SUBMAKE) -s -C scripts/config conf CC="$(HOSTCC_WRAPPER)"
config: scripts/config/conf prepare-tmpinfo FORCE
$< Config.in
diff --git a/scripts/clang-gcc-wrapper b/scripts/clang-gcc-wrapper
new file mode 100755
index 0000000000..9e668418a9
--- /dev/null
+++ b/scripts/clang-gcc-wrapper
@@ -0,0 +1,12 @@
+#!/bin/sh
+_cc="${HOSTCC_REAL:-gcc}"
+case "$1" in
+ -print-file-name=*)
+ dirs="$($_cc -print-search-dirs | grep -m1 libraries | sed -e 's,:, ,' -e 's,.* =,,')"
+ dirs="$dirs /usr/lib /usr/local/lib"
+ find $dirs -name "${1#*=}" | head -n1
+ ;;
+ *)
+ exec $_cc "$@"
+ ;;
+esac