Lines 102-115
darwin_symlink_sdk() {
Link Here
|
102 |
} |
102 |
} |
103 |
|
103 |
|
104 |
darwin_include_paths_for_clang() { |
104 |
darwin_include_paths_for_clang() { |
105 |
# only used on clang-based darwin installs |
105 |
# C_INCLUDE_PATH and CPLUS_INCLUDE_PATH are the only way to override |
|
|
106 |
# clang's builtin header search path. (vs adding new paths w/ -I or -isystem) |
107 |
# we need to carefully adjust these paths throughout stage 1 & stage 2 in order |
108 |
# to successfully bootstrap with clang on darwin. |
106 |
|
109 |
|
107 |
local XCODE_PATH=$(xcode-select -p) |
110 |
local XCODE_PATH=$(xcode-select -p) |
108 |
# Xcode.app path is deeper than CommandLineTools path |
111 |
# Xcode.app path is deeper than CommandLineTools path |
109 |
[[ "${XCODE_PATH}" == */CommandLineTools ]] || XCODE_PATH+="/Toolchains/XcodeDefault.xctoolchain" |
112 |
[[ "${XCODE_PATH}" == */CommandLineTools ]] || XCODE_PATH+="/Toolchains/XcodeDefault.xctoolchain" |
110 |
|
113 |
|
111 |
export C_INCLUDE_PATH="${ROOT}/MacOSX.sdk/usr/include" |
114 |
export C_INCLUDE_PATH="${ROOT}/MacOSX.sdk/usr/include" |
|
|
115 |
# stage1&2: CPLUS_INCLUDE_PATH needs to have system c++ headers before libcxx is built |
112 |
export CPLUS_INCLUDE_PATH="${XCODE_PATH}/usr/include/c++/v1:${C_INCLUDE_PATH}" |
116 |
export CPLUS_INCLUDE_PATH="${XCODE_PATH}/usr/include/c++/v1:${C_INCLUDE_PATH}" |
|
|
117 |
# stage2: CPLUS_INCLUDE_PATH must not have system c++ headers for building libcxx |
118 |
export libcxx_CPLUS_INCLUDE_PATH="${C_INCLUDE_PATH}" |
119 |
# stage2: CPLUS_INCLUDE_PATH should have EPREFIX/tmp c++ headers after libcxx is built |
120 |
export post_libcxx_CPLUS_INCLUDE_PATH="${ROOT}/tmp/usr/include/c++/v1:${C_INCLUDE_PATH}" |
113 |
} |
121 |
} |
114 |
|
122 |
|
115 |
configure_cflags() { |
123 |
configure_cflags() { |
Lines 254-265
configure_toolchain() {
Link Here
|
254 |
vers=${vers% (clang-*} |
262 |
vers=${vers% (clang-*} |
255 |
# this is Clang, recent enough to compile recent clang |
263 |
# this is Clang, recent enough to compile recent clang |
256 |
mycc=clang |
264 |
mycc=clang |
|
|
265 |
# llvm and clang must be built with the same libc++ |
266 |
# So, make sure that llvm and clang are always after libcxx* |
257 |
compiler_stage1+=" |
267 |
compiler_stage1+=" |
258 |
${llvm_deps} |
268 |
${llvm_deps} |
259 |
sys-devel/llvm |
|
|
260 |
sys-devel/clang |
261 |
sys-libs/libcxxabi |
269 |
sys-libs/libcxxabi |
262 |
sys-libs/libcxx" |
270 |
sys-libs/libcxx |
|
|
271 |
sys-devel/llvm |
272 |
sys-devel/clang" |
263 |
CC=clang |
273 |
CC=clang |
264 |
CXX=clang++ |
274 |
CXX=clang++ |
265 |
linker=sys-devel/binutils-apple |
275 |
linker=sys-devel/binutils-apple |
Lines 284-293
configure_toolchain() {
Link Here
|
284 |
mycc=clang |
294 |
mycc=clang |
285 |
compiler_stage1+=" |
295 |
compiler_stage1+=" |
286 |
${llvm_deps} |
296 |
${llvm_deps} |
287 |
sys-devel/llvm |
|
|
288 |
sys-devel/clang |
289 |
sys-libs/libcxxabi |
297 |
sys-libs/libcxxabi |
290 |
sys-libs/libcxx" |
298 |
sys-libs/libcxx |
|
|
299 |
sys-devel/llvm |
300 |
sys-devel/clang" |
291 |
;; |
301 |
;; |
292 |
esac |
302 |
esac |
293 |
CC=clang |
303 |
CC=clang |
Lines 324-333
configure_toolchain() {
Link Here
|
324 |
local cdep="3.5.9999" |
334 |
local cdep="3.5.9999" |
325 |
compiler_stage1+=" |
335 |
compiler_stage1+=" |
326 |
dev-libs/libffi |
336 |
dev-libs/libffi |
327 |
<sys-devel/llvm-${cdep} |
|
|
328 |
<sys-libs/libcxx-headers-${cdep} |
337 |
<sys-libs/libcxx-headers-${cdep} |
329 |
<sys-libs/libcxxabi-${cdep} |
338 |
<sys-libs/libcxxabi-${cdep} |
330 |
<sys-libs/libcxx-${cdep} |
339 |
<sys-libs/libcxx-${cdep} |
|
|
340 |
<sys-devel/llvm-${cdep} |
331 |
<sys-devel/clang-${cdep}" |
341 |
<sys-devel/clang-${cdep}" |
332 |
fi |
342 |
fi |
333 |
|
343 |
|
Lines 1785-1791
bootstrap_stage2() {
Link Here
|
1785 |
EXTRA_ECONF=$(rapx --with-sysroot=/) \ |
1795 |
EXTRA_ECONF=$(rapx --with-sysroot=/) \ |
1786 |
emerge_pkgs --nodeps ${linker} || return 1 |
1796 |
emerge_pkgs --nodeps ${linker} || return 1 |
1787 |
|
1797 |
|
|
|
1798 |
local save_CPPFLAGS="${CPPFLAGS}" |
1788 |
for pkg in ${compiler_stage1} ; do |
1799 |
for pkg in ${compiler_stage1} ; do |
|
|
1800 |
if [[ "${pkg}" == *sys-libs/libcxx* && ! -z ${libcxx_CPLUS_INCLUDE_PATH+x} ]] ; |
1801 |
then |
1802 |
# see darwin_include_paths_for_clang |
1803 |
export CPLUS_INCLUDE_PATH="${libcxx_CPLUS_INCLUDE_PATH}" |
1804 |
elif [[ "${pkg}" == *sys-devel/llvm* || "${pkg}" == *sys-devel/clang* ]] ; |
1805 |
then |
1806 |
# clang doesn't have the implicit framework paths configured yet. |
1807 |
export CPPFLAGS="${save_CPPFLAGS} -F${ROOT}/MacOSX.sdk/System/Library/Frameworks" |
1808 |
fi |
1809 |
|
1789 |
# <glibc-2.5 does not understand .gnu.hash, use |
1810 |
# <glibc-2.5 does not understand .gnu.hash, use |
1790 |
# --hash-style=both to produce also sysv hash. |
1811 |
# --hash-style=both to produce also sysv hash. |
1791 |
EXTRA_ECONF="--disable-bootstrap $(rapx --with-linker-hash-style=both) --with-local-prefix=${ROOT}" \ |
1812 |
EXTRA_ECONF="--disable-bootstrap $(rapx --with-linker-hash-style=both) --with-local-prefix=${ROOT}" \ |
Lines 1795-1806
bootstrap_stage2() {
Link Here
|
1795 |
PYTHON_COMPAT_OVERRIDE=python${PYTHONMAJMIN} \ |
1816 |
PYTHON_COMPAT_OVERRIDE=python${PYTHONMAJMIN} \ |
1796 |
emerge_pkgs --nodeps ${pkg} || return 1 |
1817 |
emerge_pkgs --nodeps ${pkg} || return 1 |
1797 |
|
1818 |
|
1798 |
if [[ "${pkg}" == *sys-devel/llvm* || ${pkg} == *sys-devel/clang* ]] ; |
1819 |
if [[ "${pkg}" == *sys-libs/libcxx* && ! -z ${post_libcxx_CPLUS_INCLUDE_PATH+x} ]] ; |
|
|
1820 |
then |
1821 |
# see darwin_include_paths_for_clang |
1822 |
export CPLUS_INCLUDE_PATH="${post_libcxx_CPLUS_INCLUDE_PATH}" |
1823 |
elif [[ "${pkg}" == *sys-devel/llvm* || ${pkg} == *sys-devel/clang* ]] ; |
1799 |
then |
1824 |
then |
1800 |
# we need llvm/clang ASAP for libcxx* doesn't build |
1825 |
# we need llvm/clang ASAP for libcxx* doesn't build |
1801 |
# without C++11 |
1826 |
# without C++11 |
1802 |
[[ -x ${ROOT}/tmp/usr/bin/clang ]] && CC=clang |
1827 |
[[ -x ${ROOT}/tmp/usr/bin/clang ]] && CC=clang |
1803 |
[[ -x ${ROOT}/tmp/usr/bin/clang++ ]] && CXX=clang++ |
1828 |
[[ -x ${ROOT}/tmp/usr/bin/clang++ ]] && CXX=clang++ |
|
|
1829 |
|
1830 |
# once clang is installed, drop the INCLUDE_PATH vars |
1831 |
# so that we do not duplicate internal include paths |
1832 |
# (duplicates can cause system header not found issues) |
1833 |
[[ ${INCLUDE_EPREFIX_DARWIN_SDK} == 1 && -d ${ROOT}/tmp/usr/lib/clang ]] \ |
1834 |
&& unset C_INCLUDE_PATH CPLUS_INCLUDE_PATH |
1835 |
|
1836 |
# reset CPPFLAGS to drop the framework path |
1837 |
export CPPFLAGS="${save_CPPFLAGS}" |
1804 |
fi |
1838 |
fi |
1805 |
done |
1839 |
done |
1806 |
|
1840 |
|
1807 |
- |
|
|