如何配置crosstool-ng以从生成的工具链名称中删除供应商名称。
例如,创建一个交叉工具链而不指定供应商部件会导致以下命名输出
臂未知-Linux的gnueabihf-G ++
如果我提供了一个供应商,例如“linaro”,那么我会有一个输出,如
臂Linaro的-Linux的gnueabihf-G ++
我想要的是让crosstool-ng输出如下名称
臂-Linux的gnueabihf-G ++
我知道你可以在menuconfig中使用“Tuple's sed transform”和“Tuple's alias”这些设施,但这些只能创建指向arm-unknown-gnueabihf-g ++等的符号链接。
我有一个工具链,附带我正在玩的电路板,这些工具链的供应商部分被省略了。所以我的问题是“他们如何做到这一点?”
答案 0 :(得分:4)
即使文档声明:
CT_TARGET_VENDOR:[...]可以设置为空,从目标元组中删除供应商字符串。
(见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}"