2016-12-24 71 views
3

如何配置crosstool-ng从生成的工具链名称中删除供应商名称。如何从crosstool-ng工具链名称中删除供应商名称

例如而不指定供应商部分来创建一个臂横工具链将导致以下命名输出

臂未知-Linux的gnueabihf-G ++

如果我提供的供应商比如 “Linaro的” 那么我会具有输出诸如

臂Linaro的-Linux的gnueabihf-G ++

我要的是让的crosstool-ng到输出名称如下

ARM-Linux的gnueabihf-G ++

据我所知,您可以使用“元组战略经济对话转换“和”Tuple的别名“这些设施从menuconfig但这些只创建符号链接到arm-unknown-gnueabihf-g ++等。

我有一个工具链附带我正在玩这个工具链供应商的部分被省略。所以我的问题是“他们是怎么做到的?”

+0

因为'自身arm'也没有很好的定义,我认为增加更多的信息,如供应商,是相当有利的。 –

+0

umlaute感谢您的回复 – onio

+0

我希望我可以为此 – tofutim

回答

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}"