전에 만들었던 AZURE ARM VM 인스턴스를 다시 시작시키고, 돈도 확인하고 214,015원 크레딧 남았다고 뜨네요. 하루 만원씩 꼬박꼬박 나가는것 같기도 하고요.. 9월에 이 프로젝트는 끝내야 겠네요.
여러가지 Build error를 만나고 일단 prebuilts 툴들부터 ARM64용으로 싹 다 교체를 들어갑니다.. 일단 lunch를 통과해야하니.. 급한 go부터 갈아치워봅시다.
go는 다행스럽게도 메인 프로젝트에서 ARM용 바이너리를 만들고 있습니다.
https://go.dev/dl/에서
go1.19.linux-arm64.tar.gz 다운로드
현재 AOSP master branch에서 사용하는 go는 최신 1.19이므로(ubuntu 20.04에서는 1.13을 설치해서 별 도움 안되고. 22.04 도 기대하긴 힘드니. 그냥 바이너리를 받아서 /prebuilts/go/linux-aarch64 에 다가 몽땅 풀어줍시다. 풀면 go 디렉토리가 나오는데 이걸 linux-aarch64로 변환
그리고 각종 스크립트를 뜯어 고치기 시작합니다. 최종 목표는 prebuilts/linux-x86에 들어 있는 모든 바이너리, 라이브러리에 상응하는 prebuilts/linux-aarch64로 똑같이 만들어 넣어주는 것입니다.
- build/soong/scripts/microfactory.bash
lunch실행 못 하는게 go때문이라서, 우선 잡아줘야 하고요.diff --git a/scripts/microfactory.bash b/scripts/microfactory.bash
index 192b38f23..67230c73c 100644
--- a/scripts/microfactory.bash
+++ b/scripts/microfactory.bash
@@ -23,8 +23,15 @@
# Ensure GOROOT is set to the in-tree version.
case $(uname) in
Linux)
- export GOROOT="${TOP}/prebuilts/go/linux-x86/"
- ;;
+ case $(uname -m) in
+ aarch64)
+ export GOROOT="${TOP}/prebuilts/go/linux-aarch64/"
+ ;;
+ *)
+ export GOROOT="${TOP}/prebuilts/go/linux-x86/"
+ ;;
+ esac
+ ;; Darwin) export GOROOT="${TOP}/prebuilts/go/darwin-x86/" ;;
- prebuilts/build-tools/build-prebuilts.sh
그 뒤 자동으로 prebuilts 파일들을 만들어 줄 것으로 기대했으나. 역시나 누가 만들다가 말았던가 없앤 모양입니다. x86과 이해관계가 있는 사람들일것으로 의심을 하지만, x86이 주류 개발 플랫폼인건 어쩔 수 없으니.. 에휴.. Darwin도 뭔가 지원이 이상하고.. Apple형님들이 M1에서 쓸 걸로 좀 만들어 주면 좋은데… AOSP니 안하겠죠?? MS형님들에게 기대해야하나… 싶지만, 그래서 제가 합니다. 이 파일에서는 arm64로 machine 이름을 이미 musl 라이브러리 빌드시 사용하고 있어서. 그대로 일단 차용은 했는데. 글쎄요. 나중에 다시 정리하도록 하죠. 근데… 워드프레스 편집기 바꾸고 싶은 마음이 심히 샘솟는 군요.ID
@AOSPonARM:/mnt/bsp/prebuilts/build-tools$ git diff
diff --git a/build-prebuilts.sh b/build-prebuilts.sh
index 7973148..a9dd177 100755
--- a/build-prebuilts.sh
+++ b/build-prebuilts.sh
@@ -35,6 +35,7 @@ build_soong=1
use_musl=false
clean=true
+host_arch="x86_64"
while getopts ":-:" opt; do
case "$opt" in
-)
@@ -43,6 +44,9 @@ while getopts ":-:" opt; do
musl) use_musl=true ;;
skip-go) unset build_go ;;
skip-soong-tests) skip_soong_tests=--skip-soong-tests ;;
armonarm) use_armhost=true
use_musl=true
host_arch="arm64" ;;
*) echo "Unknown option --${OPTARG}"; exit 1 ;;
esac;;
*) echo "'${opt}' '${OPTARG}'"
@@ -71,18 +75,26 @@ EOF
fi Use toybox and other prebuilts even outside of the build (test running, go, etc) -export PATH=${TOP}/prebuilts/build-tools/path/${OS}-x86:$PATH
+if [ -n "${use_armhost}" ]; thenexport PATH=${TOP}/prebuilts/build-tools/path/${OS}-arm64:$PATH
+elseexport PATH=${TOP}/prebuilts/build-tools/path/${OS}-x86:$PATH
+fi if [ -n "${build_soong}" ]; then
SOONG_OUT=${OUT_DIR}/soongSOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-x86
if [ -n "${use_armhost}" ]; then
SOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-arm64
else
SOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-x86
fi
[[ -z "${clean}" ]] || rm -rf ${SOONG_OUT}
mkdir -p ${SOONG_OUT}
rm -rf ${SOONG_OUT}/dist ${SOONG_OUT}/dist-common
cat > ${SOONG_OUT}/soong.variables << EOF
{
"Allow_missing_dependencies": true,"HostArch":"x86_64",
"HostArch":${host_arch},
${secondary_arch}
${cross_compile}
"HostMusl": $use_musl,
@@ -237,7 +249,7 @@ EOF
cat > ${SOONG_OUT}/soong.variables << EOF
{
"Allow_missing_dependencies": true,"HostArch":"x86_64",
"HostArch":${host_arch},
${secondary_arch}
"SanitizeHost": ["address"],
"VendorVars": {
@@ -248,7 +260,11 @@ EOF
}
EOFexport ASAN_SYMBOLIZER_PATH=${PWD}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-symbolizer
if [ -n "${use_armhost}" ]; then
export ASAN_SYMBOLIZER_PATH=${PWD}/prebuilts/clang/host/linux-arm64/llvm-binutils-stable/llvm-symbolizer
else
export ASAN_SYMBOLIZER_PATH=${PWD}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-symbolizer
fi # Clean up non-ASAN installed versions
rm -rf ${SOONG_HOST_OUT}
@@ -292,8 +308,14 @@ if [ -n "${build_go}" ]; then
cp -a ${TOP}/toolchain/go/* ${GO_OUT}/
(
cd ${GO_OUT}/src
export GOROOT_BOOTSTRAP=${TOP}/prebuilts/go/${OS}-x86
export GOROOT_FINAL=./prebuilts/go/${OS}-x86
+if [ -n "${use_armhost}" ]; then
export GOROOT_BOOTSTRAP=${TOP}/prebuilts/go/${OS}-x86
export GOROOT_FINAL=./prebuilts/go/${OS}-x86
else
export GOROOT_BOOTSTRAP=${TOP}/prebuilts/go/${OS}-arm64
export GOROOT_FINAL=./prebuilts/go/${OS}-arm64
fi
export GO_TEST_TIMEOUT_SCALE=100
./make.bash
rm -rf ../pkg/bootstrap
이 정도 수정하고 lunch 하면 ckati가 딴지겁니다..
You're building on Linux
Warning: Cannot display lunch menu.
Note: You can invoke lunch with an explicit target:
usage: lunch [target]
Which would you like? [aosp_arm-eng]
Pick from common choices above (e.g. 13) or specify your own (e.g. aosp_barbet-eng):
16:01:46 Build sandboxing disabled due to nsjail error.
16:01:46 Failed to run dumpvars: fork/exec prebuilts/build-tools/linux-x86/bin/ckati: exec format error
그래서 AOSP소스 루트에서 prebuilts/build-tools/build-prebuilts.sh –armonarm 을 호기롭게 실행시켜보면, 딱 수정한만큼 보람차게 마음엔 안내키지만 그래도 반가운 Warning을 보게 되고, soong_ui.bash실행에서 ninja가 딴지 거는 것을 볼 수 있습니다. 이제 다음 타겟은 이 두 녀석이 되겠네요…
16:03:39 ****
16:03:39 You are building on a machine with 15.6GB of RAM
16:03:39
16:03:39 The minimum required amount of free memory is around 16GB,
16:03:39 and even with that, some configurations may not work.
16:03:39
16:03:39 If you run into segfaults or other errors, try reducing your
16:03:39 -j value.
16:03:39 **
16:03:40 Build sandboxing disabled due to nsjail error.
16:03:40 Failed to run soong bootstrap: fork/exec prebuilts/build-tools/linux-x86/bin/ninja: exec format error