使用AOSP 9.0.0_r30源代码,首先使用这些命令在构建期间输出详细的构建日志:
make clean
make showcommands -j8 > ~/BuildAndroid.txt
然后在~/BuildAndroid.txt
中搜索“lld”(全字匹配)。我找不到任何东西。 Clang链接器应该有lld关键字。搜索“ld”有50个结果,但它们几乎不是链接命令。但其中一个是“ld.mc”,但它是候选者。
并搜索一些cpp源文件名,如“TextDropShadowCache”。我只得到2个命令,这两个命令都是clang ++编译命令。
libhwui.so的link命令引用了一个文件“libhwui.so.rsp”,似乎可能(只能猜测)包含“TextDropShadowCache.o”:
prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++ /OpenSource/Build/Android/9.0.0_r30/soong/.intermediates/bionic/libc/crtbegin_so/android_x86_64_core/crtbegin_so.o @/OpenSource/Build/Android/9.0.0_r30/soong/.intermediates/frameworks/base/libs/hwui/libhwui/android_x86_64_core_shared/libhwui.so.rsp ......
如果这是真的,那么libhwui.so.rsp是如何产生的?
该命令也引出了这个问题:What does @ mean in this clang command in AOSP build log?
根据上面的问题,@表示从文件读取一个长命令,因此它很可能是一个列出libhwui.so所需的所有obj文件的文件。
所以问题基本上得到解答,但未经验证,因为libhwui.so.rsp似乎在构建后被删除。
AOSP 9.0构建系统如何链接可执行文件?
我找到了pppd的链接命令行,它只是使用了
prebuilts /铛/主机/ Linux的86 /铛-4691093 / bin中/铛++
将所有.o / .a / .so文件作为输入,将pppd作为输出。
但这仍然无法解释为什么没有使用TextDropShadowCache.o作为输入的链接命令,也许他们使用一些脚本来读取多个.o文件?