2016-12-24 68 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}"