Google 删除了 Android 内核的交叉编译器。他们现在在哪里?

Google removed cross compilers for Android Kernel. Where are they now?

到目前为止,我已经使用了 UBERTC 预构建的交叉编译器,但是在编译 android 内核时出现错误,而且他们自 2016 年以来就没有更新过他们的东西,所以我只想寻找替代方案。

Google 显然应该有它们。但是我找不到它们。它们应该是 here,但回购是空的,最后一次提交说:

Remove aarch64-linux-android gcc-4.9 libs and includes

Android has moved to LLVM.

The bins were already removed. Remove everything else except for OWNERS.

所以,我想他们已经把它们转移到别处了。但是在哪里呢?

我不想听到您需要编译整个 AOSP 树才能到达编译器。我真的希望有别的办法。

我找到了旧的工具链。有趣的是:在清除存储库之前的最新提交 由于某种原因不包含 gcc。所以我不得不“爬”上 git 树以找到包含它的树。这里是32-bit ARM toochain and 64-bit ARM toolchan。这是 2019 年的 gcc 4.9

他们的意思

Android has moved to LLVM.

是你应该能够 cross-compile 内核与 clangllvm 并且不应该再使用他们的 stand-alone 解决方案。但他们没有提供任何关于如何做到这一点的信息。所以是的,干得好。

下载看起来像这样:

# clone the repo, it will be empty
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9 toolchain
# go to the repo folder
cd toolchain
# use the hash of the commit to restore the commit which actually contains the toolchain
git checkout e9b2ab0932573a0ca90cad11ab75d9619f19c458

对于像我这样还没有完全了解 llvmclang 的人,还有一些替代工具链。 Here is one from arm.com based on gcc 11.2. There are also Linaro 个。

无论如何,您有时应该使用旧工具链来构建旧内核,因为新编译器往往会抛出更多警告,默认情况下 Makefile 将其视为错误。例如,我无法使用 arm.com 编译我的内核,因为它们太聪明并且发现了太多警告,我还没有找到办法禁用。修改 Makefile 似乎不是一个有效的选项,因为它有 ~2k 行长。

如果有人知道如何禁用它们,我也很想知道。但现在我会尝试坚持使用旧内核的 google 工具链。

GLHF,哈哈。