如何配置crosstool-ng从生成的工具链名称中删除供应商名称。
例如,创建臂交叉工具链而不指定供应商零件将导致以下命名输出
如果我为“linaro”提供了一个供应商,那么我将得到一个输出,例如
我想要的是使crosstool-ng输出如下名称
我知道您可以使用menuconfig中的这些功能使用“Tuple的sed变换”和“Tuple的别名”,但是这些仅创建到arm-unknown-gnueabihf-g++等的符号链接(symbolic link)。
我有一个正在玩的板子附带的工具链,这些工具链中省略了供应商的部分。所以我的问题是“他们怎么做到的?”
最佳答案
即使文档指出:
(请参阅http://crosstool-ng.github.io/docs/configuration/)
如果未给出CT_TARGET_VENDOR的值,则当前行为将变为“未知”。
早在2011年,在crosstool-ng邮件列表中就讨论了这种情况,并且提供了一个补丁,其中包含一个可能对您有帮助的解决方案。
该补丁的目的是:
在crosstool-ng源代码的脚本/函数中。
另请:https://sourceware.org/ml/crossgcc/2011-10/msg00047.html
diff -r a31d097e28cd -r 5b1330e7264a scripts/functions
--- a/scripts/functions Wed Oct 19 15:27:32 2011 +1300
+++ b/scripts/functions Wed Oct 19 16:23:36 2011 +1300
@@ -944,6 +944,20 @@
fi
}
+# Computes the target tuple from the configuration and the supplied
+# vendor string
+CT_BuildOneTargetTuple() {
+ local vendor="${1}"
+ local target
+
+ target="${CT_TARGET_ARCH}"
+ target="${target}${vendor:+-${vendor}}"
+ target="${target}${CT_TARGET_KERNEL:+-${CT_TARGET_KERNEL}}"
+ target="${target}${CT_TARGET_SYS:+-${CT_TARGET_SYS}}"
+
+ echo "${target}"
+}
+
# Compute the target tuple from what is provided by the user
# Usage: CT_DoBuildTargetTuple
# In fact this function takes the environment variables to build the target
@@ -994,10 +1008,7 @@
CT_DoKernelTupleValues
# Finish the target tuple construction
- CT_TARGET="${CT_TARGET_ARCH}"
- CT_TARGET="${CT_TARGET}${CT_TARGET_VENDOR:+-${CT_TARGET_VENDOR}}"
- CT_TARGET="${CT_TARGET}${CT_TARGET_KERNEL:+-${CT_TARGET_KERNEL}}"
- CT_TARGET="${CT_TARGET}${CT_TARGET_SYS:+-${CT_TARGET_SYS}}"
+ CT_TARGET=$(CT_BuildOneTargetTuple "${CT_TARGET_VENDOR}")
# Sanity checks
__sed_alias=""
@@ -1012,7 +1023,14 @@
esac
# Canonicalise it
- CT_TARGET=$(CT_DoConfigSub "${CT_TARGET}")
+ if [ -n "${CT_TARGET_VENDOR}" ]; then
+ CT_TARGET=$(CT_DoConfigSub "${CT_TARGET}")
+ else
+ # Canonicalise with a fake vendor string then strip it out
+ local target=$(CT_BuildOneTargetTuple "CT_INVALID")
+ CT_TARGET=$(CT_DoConfigSub "${target}" |sed -r -s s:CT_INVALID-::)
+ fi
+
# Prepare the target CFLAGS
CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_ENDIAN_CFLAG}"
CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_ARCH_CFLAG}"