Компиляция Clang из источника с пользовательским G cc - установить цель по умолчанию - PullRequest
0 голосов
/ 26 марта 2020

Проблема

Когда я компилирую g cc Я устанавливаю --target=x86_64-mytoolchain-linux-gnu. Соответственно отрегулируйте для arm64.

Я скомпилировал clang из источника следующим образом:

mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX="/opt/clang" \
-DCMAKE_PREFIX_PATH="/opt/clang" \
-DCMAKE_BUILD_TYPE=Release \
-DGCC_INSTALL_PREFIX="/opt/gcc/" \
-DLLVM_INCLUDE_TESTS=FALSE \
-DLLVM_TARGETS_TO_BUILD="x86" \
-DLLVM_ENABLE_LTO=ON \
-DCMAKE_C_COMPILER="/opt/gcc/bin/gcc" \
-DCMAKE_CXX_COMPILER="/opt/gcc/bin/g++" \
-DCMAKE_C_FLAGS="${CFLAGS}" \
-DCMAKE_CXX_FLAGS="${CPPFLAGS}" \
-DCMAKE_C_LINK_FLAGS="${LDFLAGS}" \
-DCMAKE_CXX_LINK_FLAGS="${LDFLAGS} -L$/opt/gcc/lib64 -Wl,-rpath,$/opt/gcc/lib64"

Вывод clang -v:

clang version 9.0.1 
Target: x86_64-unknown-linux-gnu
Thread model: posix

Цель по умолчанию не совпадает мой пользовательский G CC target.

Я не могу скомпилировать C ++ без указания -target x86_64-mytoolchain-linux-gnu вручную. Если я укажу это, то он автоматически найдет все подходящие включения и библиотеки. Все работает, как и ожидалось.

Вопрос

Когда я компилирую clang из источника, как я могу указать цель, которую он будет использовать по умолчанию? Кажется, единственный элемент управления, который у меня есть, это 'x86'.

1 Ответ

0 голосов
/ 26 марта 2020

Оказывается, цель по умолчанию определяется LLVM во время его компиляции.

Укажите это при сборке LLVM:

-DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-mytoolchain-linux-gnu"

Теперь при компиляции clang вывод clang -v:

clang version 9.0.1 
Target: x86_64-mytoolchain-linux-gnu
Thread model: posix
...