Clang / G CC ABI версии 1 не поддерживается на powerpc64 - PullRequest
0 голосов
/ 28 марта 2020

В настоящее время я помогаю сообществу Power Progress Community переносить UnrealEngine на архитектуру PowerPC64 с прямым порядком байтов.
Я работаю непосредственно на виртуальной машине PowerP C, размещенной на ОС POWER9, debian10, поэтому кросс-компиляции не требуется с х86.

Я следую этим (очень начальным) шагам:
a. build crosstool-ng (основная ветка от git http://github.com/crosstool-ng/crosstool-ng)
b. build powerpc64- linux -gnu toolchain (g cc 9.2.0)
c. build clang (llvm package 8.0.1)
d. build compiler-rt

Кажется, что все работает нормально до шага d.
Во время сценариев настройки компилятора-rt (cmake) попробуйте связать кусок скомпилированного файла clang с g cc crt1.o, вывод является следующим:

    Building C object CMakeFiles/cmTC_7e683.dir/testCCompiler.c.o
    /mnt/build/UnrealEngine2/Engine/Build/BatchFiles/Linux/Toolchain/DockerOnWindows/build_linux_toolchain/install-clang/bin/clang --targe
t=powerpc64-unknown-linux-gnu   --target=powerpc64-unknown-linux-gnu --sysroot=/mnt/build/UnrealEngine2/Engine/Build/BatchFiles/Linux/Tool
chain/DockerOnWindows/build_linux_toolchain/OUTPUT/powerpc64-unknown-linux-gnu    -o CMakeFiles/cmTC_7e683.dir/testCCompiler.c.o   -c /mnt
/build/UnrealEngine2/Engine/Build/BatchFiles/Linux/Toolchain/DockerOnWindows/build_linux_toolchain/build-rt-powerpc64-unknown-linux-gnu/CM
akeFiles/CMakeTmp/testCCompiler.c
    Linking C executable cmTC_7e683
    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7e683.dir/link.txt --verbose=1
    /mnt/build/UnrealEngine2/Engine/Build/BatchFiles/Linux/Toolchain/DockerOnWindows/build_linux_toolchain/install-clang/bin/clang --target=powerpc64-unknown-linux-gnu --target=powerpc64-unknown-linux-gnu --sysroot=/mnt/build/UnrealEngine2/Engine/Build/BatchFiles/Linux/Toolchain/DockerOnWindows/build_linux_toolchain/OUTPUT/powerpc64-unknown-linux-gnu   --target=powerpc64-unknown-linux-gnu -L/mnt/build/UnrealEngine2/Engine/Build/BatchFiles/Linux/Toolchain/DockerOnWindows/build_linux_toolchain/OUTPUT/powerpc64-unknown-linux-gnu/lib64 --sysroot=/mnt/build/UnrealEngine2/Engine/Build/BatchFiles/Linux/Toolchain/DockerOnWindows/build_linux_toolchain/OUTPUT/powerpc64-unknown-linux-gnu -fuse-ld=lld  CMakeFiles/cmTC_7e683.dir/testCCompiler.c.o  -o cmTC_7e683
    ld.lld: error: /mnt/build/UnrealEngine2/Engine/Build/BatchFiles/Linux/Toolchain/DockerOnWindows/build_linux_toolchain/OUTPUT/powerpc64-unknown-linux-gnu/usr/lib/../lib64/crt1.o: ABI version 1 is not supported
    clang-8: error: linker command failed with exit code 1 (use -v to see invocation)
    make[1]: *** [CMakeFiles/cmTC_7e683.dir/build.make:87: cmTC_7e683] Error 1
    make[1]: Leaving directory '/mnt/build/UnrealEngine2/Engine/Build/BatchFiles/Linux/Toolchain/DockerOnWindows/build_linux_toolchain/build-rt-powerpc64-unknown-linux-gnu/CMakeFiles/CMakeTmp'
    make: *** [Makefile:121: cmTC_7e683/fast] Error 2

Кажется, что clang и g cc используют разные версии ABI, и эти версии не могут работать вместе.
Какой путь имеет больше смысла сейчас?
Попробовать перестроить g cc другим способом, указать c конфигурацию clang или какую-нибудь опцию cmake на compiler-rt?

Я никогда не работал над этими аспектами ABI, поэтому каждый совет добро пожаловать.

Спасибо всем.
Ману

...