Merge pull request #93 from jmesmon/fix-llvm
Ensure proper CXXFLAGS & CFLAGS are passed to rust's `rustllvm` component (c++ files built as part of rustc)
This commit is contained in:
@@ -13,9 +13,6 @@ B = "${WORKDIR}/build"
|
|||||||
|
|
||||||
DEPENDS += "file-native"
|
DEPENDS += "file-native"
|
||||||
|
|
||||||
# Avoid having the default bitbake.conf disable sub-make parallelization
|
|
||||||
EXTRA_OEMAKE = ""
|
|
||||||
|
|
||||||
PACKAGECONFIG ??= ""
|
PACKAGECONFIG ??= ""
|
||||||
|
|
||||||
# Controls whether we use the local rust to build.
|
# Controls whether we use the local rust to build.
|
||||||
@@ -238,12 +235,9 @@ def ldflags_for(d, thing, arch):
|
|||||||
|
|
||||||
TARGET_LLVM_CPU="${@llvm_cpu(d)}"
|
TARGET_LLVM_CPU="${@llvm_cpu(d)}"
|
||||||
TARGET_LLVM_FEATURES = "${@llvm_features_from_tune(d)} ${@llvm_features_from_cc_arch(d)}"
|
TARGET_LLVM_FEATURES = "${@llvm_features_from_tune(d)} ${@llvm_features_from_cc_arch(d)}"
|
||||||
TARGET_LLVM_CPU_class-cross="${@llvm_cpu(d)}"
|
|
||||||
TARGET_LLVM_FEATURES_class-cross = "${@llvm_features_from_tune(d)} ${@llvm_features_from_cc_arch(d)}"
|
|
||||||
|
|
||||||
# class-native implies TARGET=HOST, and TUNE_FEATURES only describes the real
|
# class-native implies TARGET=HOST, and TUNE_FEATURES only describes the real
|
||||||
# (original) target.
|
# (original) target.
|
||||||
TARGET_LLVM_CPU="${@llvm_cpu(d)}"
|
|
||||||
TARGET_LLVM_FEATURES_class-native = "${@llvm_features_from_cc_arch(d)}"
|
TARGET_LLVM_FEATURES_class-native = "${@llvm_features_from_cc_arch(d)}"
|
||||||
|
|
||||||
def rust_gen_target(d, thing, wd):
|
def rust_gen_target(d, thing, wd):
|
||||||
@@ -253,8 +247,10 @@ def rust_gen_target(d, thing, wd):
|
|||||||
prefix = prefix_for(d, thing)
|
prefix = prefix_for(d, thing)
|
||||||
|
|
||||||
features = ""
|
features = ""
|
||||||
|
cpu = "generic"
|
||||||
if thing is "TARGET":
|
if thing is "TARGET":
|
||||||
features = d.getVar('TARGET_LLVM_FEATURES', True) or ""
|
features = d.getVar('TARGET_LLVM_FEATURES', True) or ""
|
||||||
|
cpu = d.getVar('TARGET_LLVM_CPU', True)
|
||||||
features = features or d.getVarFlag('FEATURES', arch, True) or ""
|
features = features or d.getVarFlag('FEATURES', arch, True) or ""
|
||||||
|
|
||||||
# build tspec
|
# build tspec
|
||||||
@@ -270,7 +266,7 @@ def rust_gen_target(d, thing, wd):
|
|||||||
tspec['linker'] = "{}{}gcc".format(d.getVar('CCACHE', True), prefix)
|
tspec['linker'] = "{}{}gcc".format(d.getVar('CCACHE', True), prefix)
|
||||||
tspec['objcopy'] = "{}objcopy".format(prefix)
|
tspec['objcopy'] = "{}objcopy".format(prefix)
|
||||||
tspec['ar'] = "{}ar".format(prefix)
|
tspec['ar'] = "{}ar".format(prefix)
|
||||||
tspec['cpu'] = d.getVar('TARGET_LLVM_CPU', True)
|
tspec['cpu'] = cpu
|
||||||
if features is not "":
|
if features is not "":
|
||||||
tspec['features'] = features
|
tspec['features'] = features
|
||||||
tspec['dynamic-linking'] = True
|
tspec['dynamic-linking'] = True
|
||||||
@@ -326,6 +322,15 @@ def rust_gen_mk_cfg(d, thing):
|
|||||||
i = open(d.getVar('S', True) + '/mk/cfg/' + rust_base_sys + '.mk', 'r')
|
i = open(d.getVar('S', True) + '/mk/cfg/' + rust_base_sys + '.mk', 'r')
|
||||||
|
|
||||||
r = subprocess.call(['sed',
|
r = subprocess.call(['sed',
|
||||||
|
# CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a
|
||||||
|
# wide range of targets (not just HOST). Yocto's settings for them will
|
||||||
|
# be inappropriate, avoid having random targets try to use them, we'll
|
||||||
|
# add as needed.
|
||||||
|
'-e', 's/$(CFLAGS)//',
|
||||||
|
'-e', 's/$(CXXFLAGS)//',
|
||||||
|
'-e', 's/$(CPPFLAGS)//',
|
||||||
|
'-e', 's/$(LDFLAGS)//',
|
||||||
|
|
||||||
# update all triplets to the new one
|
# update all triplets to the new one
|
||||||
'-e', 's/{}/{}/g'.format(rust_base_sys, sys),
|
'-e', 's/{}/{}/g'.format(rust_base_sys, sys),
|
||||||
|
|
||||||
@@ -356,6 +361,13 @@ def rust_gen_mk_cfg(d, thing):
|
|||||||
if r:
|
if r:
|
||||||
raise Exception
|
raise Exception
|
||||||
o.write("OBJCOPY_{} := {}objcopy\n".format(sys, prefix))
|
o.write("OBJCOPY_{} := {}objcopy\n".format(sys, prefix))
|
||||||
|
# Note: this isn't how this variable is supposed to be used, but for
|
||||||
|
# non-msvc platforms nothing else touches it.
|
||||||
|
# These are the only extra flags passed to the rustllvm (c++ code) build.
|
||||||
|
# These are only used for host (even though we emit them for all targets)
|
||||||
|
# Without this, there are link failures due to GLIBC_CXX11_ABI issues in
|
||||||
|
# certain setups.
|
||||||
|
o.write("EXTRA_RUSTLLVM_CXXFLAGS_{} := {}\n".format(sys, cxxflags_for(d, thing)))
|
||||||
o.close()
|
o.close()
|
||||||
i.close()
|
i.close()
|
||||||
|
|
||||||
@@ -383,14 +395,6 @@ do_configure () {
|
|||||||
|
|
||||||
# FIXME: target_prefix vs prefix, see cross.bbclass
|
# FIXME: target_prefix vs prefix, see cross.bbclass
|
||||||
|
|
||||||
# CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a
|
|
||||||
# wide range of targets (not just HOST). Yocto's settings for them will
|
|
||||||
# be inappropriate, avoid using.
|
|
||||||
unset CFLAGS
|
|
||||||
unset LDFLAGS
|
|
||||||
unset CXXFLAGS
|
|
||||||
unset CPPFLAGS
|
|
||||||
|
|
||||||
# FIXME: this path to rustc (via `which rustc`) may not be quite right in the case
|
# FIXME: this path to rustc (via `which rustc`) may not be quite right in the case
|
||||||
# where we're reinstalling the compiler. May want to try for a real
|
# where we're reinstalling the compiler. May want to try for a real
|
||||||
# path based on bitbake vars
|
# path based on bitbake vars
|
||||||
|
|||||||
Reference in New Issue
Block a user