В настоящее время я помогаю сообществу 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, поэтому каждый совет добро пожаловать.
Спасибо всем.
Ману