Build system with Ninja for Google Android.
# Update Ninja for Android.bp/.mk (apply patch to $AOSP required)
cd "$AOSP"; source build/envsetup.sh; lunch
cd "$AOSP"; GOROOT="$AOSP"/prebuilts/go/linux-x86/ ./out/soong_ui --disable-build-ninja
# Build source in Android.bp
export PATH=$AOSP/prebuilts/build-tools/linux-x86/bin/:$PATH
cd "$AOSP"; python "$ANDROIDBUILD"/src/soongcache.py -i out/soong/build.ninja -o soong.cache
cd "$AOSP"; python "$ANDROIDBUILD"/src/ninjabuild.py -sn out/combined-"$PROJECT".ninja -sc soong.cache -f "$FILEPATH" -l debug -o out.txt
# Build source in Android.mk
export PATH=$AOSP/prebuilts/build-tools/linux-x86/bin/:$PATH
cd "$AOSP"; python "$ANDROIDBUILD"/src/katicache.py -i out/build-"$PROJECT".ninja -o kati.cache
cd "$AOSP"; python "$ANDROIDBUILD"/src/ninjabuild.py -kn out/combined-"$PROJECT".ninja -kc kati.cache -f "$FILEPATH" -l debug -o out.txt
# out/soong/.intermediates/packages/apps/Settings/Settings/android_common/base.zip: g.java.buildBundleModule
ninja -f out/combined-aosp_arm64.ninja -t targets depth 2
ninja -f out/combined-aosp_arm64.ninja Settings-soong
# out/soong/.intermediates/system/core/adb/adbd/android_arm64_armv8-a_core/versioned-stripped/adbd: g.cc.strip
ninja -f out/combined-aosp_arm64.ninja -t targets depth 2
ninja -f out/combined-aosp_arm64.ninja adbd-soong
# out/soong/.intermediates/system/core/adb/libadbd_services/android_arm_armv8-a_core_shared/versioned-stripped/libadbd_services.so: g.cc.strip
ninja -f out/combined-aosp_arm64.ninja -t targets depth 2
ninja -f out/combined-aosp_arm64.ninja libadbd_services-soong
# out/soong/.intermediates/frameworks/base/ext/android_common/turbine-combined/ext.jar: g.java.combineJar
ninja -f out/combined-aosp_arm64.ninja -t targets depth 2
ninja -f out/combined-aosp_arm64.ninja ext-soong
# out/soong/.intermediates/frameworks/base/framework/android_common_test_com.android.media/jarjar/framework.jar: g.java.jarjar
ninja -f out/combined-aosp_arm64.ninja -t targets depth 2
ninja -f out/combined-aosp_arm64.ninja framework-soong
$AOSP/build/make
envsetup.sh
mmma
build/soong/soong_ui.bash --build-mode --modules-in-dirs-no-deps --dir=$AOSP system/core/adb
$AOSP/build/soong
soong_ui.bash
scripts/microfactory.bash
soong_build_go
source build/blueprint/microfactory/microfactory.bash
build_go soong_ui android/soong/cmd/soong_ui
soong_build_go soong_ui android/soong/cmd/soong_ui
exec out/soong_ui --build-mode --modules-in-dirs-no-deps --dir=$AOSP system/core/adb
$AOSP/build/soong/cmd
soong_ui/main.go
build.Build(buildCtx, config, toBuild)
$AOSP/build/soong/ui
build/build.go
runMakeProductConfig
runSoong
runKati
createCombinedBuildNinjaFile
runNinja
$AOSP/out/
build-aosp_arm64.ninja
combined-aosp_arm64.ninja
subninja out/build-aosp_arm64.ninja
subninja out/soong/build.ninja
microfactory_Linux
ninja-aosp_arm64.sh
soong/
build.ninja
soong.log
soong_ui
wget https://github.com/Kitware/CMake/releases/download/v3.19.2/cmake-3.19.2-Linux-x86_64.tar.gz
tar zxvf cmake-3.19.2-Linux-x86_64.tar.gz
export PATH=$PWD/cmake-3.19.2-Linux-x86_64/bin:$PATH
git clone https://github.com/ninja-build/ninja.git; cd ninja
cmake -DCMAKE_BUILD_TYPE=Release -B .
cmake --build . --parallel --config Release
strip ./ninja
upx -9 ninja
ninja -t list
ninja subtools:
browse browse dependency graph in a web browser
clean clean built files
commands list all commands required to rebuild given targets
deps show dependencies stored in the deps log
graph output graphviz dot file for targets
path find dependency path between two targets
query show inputs/outputs for a path
targets list targets by their rule or depth in the DAG
compdb dump JSON compilation database to stdout
recompact recompacts ninja-internal data structures
git clone https://github.com/google/blueprint.git; cd blueprint
./bootstrap.bash
PATH=/path/to/ninja:$PATH; ./blueprint.bash
upx -9 ./bin/*
git clone https://github.com/google/kati.git; cd kati
PATH=/path/to/ninja:$PATH; make -j4 ckati ckati_tests
upx -9 ckati
-
Blueprint
-
Kati
-
Ninja
https://android.googlesource.com/platform/external/ninja/
https://note.qidong.name/2018/02/android-ninja-tips/
https://opensource.google/projects/ninja
https://www.jianshu.com/p/d118615c1943
https://github.com/evmar/n2 (Ninja written in Rust)
-
Soong
https://android.googlesource.com/platform/build/soong/
https://android.googlesource.com/platform/build/soong/+/HEAD/docs/best_practices.md
https://android.googlesource.com/platform/build/soong/+/HEAD/docs/perf.md
https://android.googlesource.com/platform/build/+/master/README.md
https://android.googlesource.com/platform/build/+/master/Usage.txt
https://android-review.googlesource.com/q/topic:%22blueprint_microfactory%22+status:merged
https://android-review.googlesource.com/c/platform/external/ninja/+/461005
https://ci.android.com/builds/latest/branches/aosp-build-tools/targets/linux/view/soong_build.html