aboutsummaryrefslogtreecommitdiffstats
path: root/ui
Commit message (Collapse)AuthorAgeFilesLines
* Add microfactory tracingDan Willemsen2017-07-134-38/+104
| | | | | | Test: m clean; load out/build.trace.gz in chrome://tracing Test: m -j nothing; load again Change-Id: I67d4e006a4bdde593b54c20d6d93a48278fe696d
* Drop make flags in soong_uiDan Willemsen2017-07-111-0/+5
| | | | | | | | | | | MAKELEVEL and MAKEFLAGS were are both unset by makeparallel when invoked from Make. In preparation for removing the Make wrapper (and makeparallel), strip them in soong_ui as well. Add MFLAGS for completeness. Test: m -j Change-Id: I029f9464d11b432e979b32ede360450f4facb038
* Parse environment options from the command lineDan Willemsen2017-07-112-0/+71
| | | | | | | | | | | | | | Make supports specifying all types of variables on the command line (using =, :=, +=, and other variable references. When running soong_ui through make/makeparallel these all effectively become environment variables. So in preparation to remove the Make wrapper, support a simplified form of this syntax, roughly equivalent to what the shell supports if specified before the command (<NAME>=<VALUE>). Test: m -j blueprint_tools Change-Id: I08fa2b86710f282e619b0cc324a3e5bbaf62d26e
* Support more ways to pass -j/-kDan Willemsen2017-07-113-21/+140
| | | | | | | | | | | | | | | In preparation to remove Make/makeparallel from soong_ui startup, we need to preserve compatibility with the different ways that make supports the -j option. Nothing changes unless Make/makeparallel is removed from the startup. Once that is removed, not specifying a -j value will be equivalent to '-j' instead of '-j1', like Ninja. A value will also be supported when specifying -k, like Ninja (though specifying it alone will be equivalent to '-k 0'). Test: m -j blueprint_tools Change-Id: I9d5d59bedd4f6e5cca76bdb4cd47e0b5b7d523f0
* Turn find emulator warnings into errorsDan Willemsen2017-06-211-0/+1
| | | | | | | | | | Test: build/soong/build_test.bash (multiproduct_kati) Change-Id: Ieb65a457c8c1ed4bff44a01aa2cc11203172ba9b Merged-In: Ieb65a457c8c1ed4bff44a01aa2cc11203172ba9b Merged-In: I70b696525a90c64cc05ad4caa1c3647d57ec9e9e (cherry picked from commit dc5b70f97cec60eef749176d25d2bf4928a31e12) (cherry picked from commit e8a25d55771eb8f043964a1ad41e22cc29b86c03) (cherry picked from commit 14b3f7f12b33aef7d70ae230ee434850cfb48c39)
* Only check for ninja stuckness after it's been running for a bitJeff Gaston2017-06-132-28/+15
| | | | | | | Bug: 62580037 Test: rm -rf out && m -j showcommands | grep "ninja may be stuck" || echo ok Change-Id: I8ff1bd216b5f8349ce9e06e5465a9f8d0663f8c0
* Have Soong try to enforce that genrules declare all their outputs.Jeff Gaston2017-06-094-1/+23
| | | | | | | | | | | This causes Soong to put the outputs of each genrule into a temporary location and copy the declared outputs back to the output directory. This gets the process closer to having an actual sandbox. Bug: 35562758 Test: make Change-Id: I8048fbf1a3899a86fb99d71b60669b6633b07b3e
* Run 'pstree' if ninja_log hasn't updated recentlyJeff Gaston2017-06-062-7/+87
| | | | | | | | | | This doesn't catch all the possible causes of timeouts, (like if Ninja is only partially stuck or if Kati is stuck) but it should clarify some causes of stuckness Bug: 62065855 Test: m -j showcommands NINJA_HEARTBEAT_INTERVAL=500ms Change-Id: I73a792ae91873b19d7b336166a2d47f37c549906
* Have installclean remove android-info.txt againDan Willemsen2017-06-011-0/+1
| | | | | | | | | | | | | | | | | I removed *.txt from the installclean list yesterday, but it turns out that android-info.txt being removed was the only thing triggering system.prop to be rebuilt on the incremental build servers. So continue android-info.txt so that the version information in system.prop is correct. I'll follow this up with a more complicated change to make the system.prop generation depend on the build number/versions more directly, but that's a more complicated change since we need to change how the build number file is written. Bug: 62252890 Test: m ...intermediates/system.prop; m installclean; m ...intermediates/system.prop Change-Id: I25dd8ddd99f7b2c927a8cbfb7f1aca1dd3e82a82
* Stop installcleaning $PRODUCT_OUT/*.{ini,txt,xlb}android-o-preview-3Dan Willemsen2017-05-311-3/+0
| | | | | | | | | | | | | | | | | | For *.ini/*.txt files we should be recreating them as the instructions change, so we shouldn't need to remove them. The biggest reason to remove them is that the auto-installclean was removing $PRODUCT_OUT/build_fingerprint.txt just after Kati wrote it out, causing the fingerprint to be blank on builds where the auto installclean code ran. There's no reference to xlb in our tree, and it's been around since the beginning of git history, so remove it. Bug: 62224537 Test: lunch aosp_arm-eng; m nothing; lunch aosp_arm-userdebug; m -j nothing; check out/target/product/generic/build_fingerprint.txt Change-Id: Id391af5c7d95ea78e4e68fae294d8295fccb1964
* Merge "Support Make rewriting APP-*"Dan Willemsen2017-05-261-1/+2
|\
| * Support Make rewriting APP-*Dan Willemsen2017-05-251-1/+2
| | | | | | | | | | Test: ALLOW_MISSING_DEPENDENCIES=true m -j APP-Calculator Change-Id: If5a0b60a0dbc615b6f47ea222616f8d34950ba0c
* | Merge "Allow version 9 toolchains for EXPERIMENTAL_USE_OPENJDK9"Tobias Thierer2017-05-261-4/+17
|\ \
| * | Allow version 9 toolchains for EXPERIMENTAL_USE_OPENJDK9Tobias Thierer2017-05-261-4/+17
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By default, the Android build enforces an OpenJDK 8 toolchain, whose name contains the strings "openjdk" and "1.8". After this CL, the check can be changed to enforce a toolchain name starting with "9" and without the need for "openjdk" having to occur in the name. This experimental new check can be enabled by running: export EXPERIMENTAL_USE_OPENJDK9=true To switch back to the standard check, run: unset EXPERIMENTAL_USE_OPENJDK9 Test: make ANDROID_COMPILE_WITH_JACK=false checkbuild tests \ && make checkbuild tests (with OpenJDK 8u45 toolchain on the PATH) Test: make EXPERIMENTAL_USE_OPENJDK9=true \ ANDROID_COMPILE_WITH_JACK=false checkbuild (with jdk 9-ea+170 toolchain on the PATH) Bug: 38177295 Change-Id: I75de3e23fe0b7f41eb6dd3f55dadd3fa3c3383bd
* / Revert "Revert "Disallow multiple build executions in parallel""Jeff Gaston2017-05-244-0/+390
|/ | | | | | | | | Bug: 36698966 Test: m -j & m -j # (run two builds at once) This reverts commit be9cd1192bf8774f529a1ca6d2b8ee3876a80d02. Change-Id: Ia15c0bf156a6de54da054eab8134f36bae0823ca
* Merge "Drop build support for LEGACY_USE_JAVA7."Tobias Thierer2017-05-241-9/+3
|\
| * Drop build support for LEGACY_USE_JAVA7.Tobias Thierer2017-05-231-9/+3
| | | | | | | | | | | | | | | | | | | | This flag allowed for building with an OpenJDK 7 toolchain. It was used for build bot builds that now work with an OpenJDK 8 toolchain. Hence, this feature is no longer required. This CL drops it. Bug: 27583810 Test: Treehugger build succeeds. Change-Id: Iba9cf12cff2597fa70aa9999e8a6bda190f29f3c
| * Revert "Disallow multiple build executions in parallel"Jeff Gaston2017-05-184-390/+0
| | | | | | | | | | | | | | | | This reverts commit 7db68be5e14c6ddc931500a484a9fb7b66d034ef. Reason for revert: postsubmit build encountered a failure Change-Id: I3c7304114f712d78f79afb1b9d84dc2eadcbc876
| * Disallow multiple build executions in parallelJeff Gaston2017-05-164-0/+390
| | | | | | | | | | | | | | Bug: 36698966 Test: run two 'make -j' executions in parallel in each of two terminals Change-Id: Ief91391fe1f0fdbf9655cc0ba1298e353396d705
* | Move dataclean and installclean to soong_uiDan Willemsen2017-05-184-88/+220
|/ | | | | | | | | This speeds things up a little bit, but the major win is that we don't need to recursively call into the build during the auto installclean. Test: m -j installclean Test: m -j dataclean Change-Id: I09ded8dbd8a2015c7848bc0042dfd3adad1b31c9
* Merge changes I9512642d,I6548889c,I8db5198fTreehugger Robot2017-05-161-0/+4
|\ | | | | | | | | | | | | * changes: Add build_test.sh, split common parts of soong_ui.bash Allow specifying a build variant Improve multiproduct_kati output
| * Improve multiproduct_kati outputDan Willemsen2017-05-151-0/+4
| | | | | | | | | | | | | | | | | | It now uses the same output style as ninja, overwriting status lines in smart terminals. Test: multiproduct_kati Test: multiproduct_kati | cat Change-Id: I8db5198ffdc5ebc5503241ac492379753d92978e
* | Move auto installclean to soong_uiDan Willemsen2017-05-153-3/+103
| | | | | | | | | | | | | | | | | | | | This way kati won't need to be run as often (either initially, or when switching products with the same device). Bug: 35970961 Test: m clean; m -j blueprint_tools; m -j blueprint_tools; m -j blueprint_tools Test: lunch aosp_arm-eng; m -j blueprint_tools; lunch full-eng; m -j blueprint_tools; <repeat> Change-Id: Ie9fca3c8f1dd412459ea47c7090c7c5fdb0bcf6e
* | Move version checking from Make into soong_uiDan Willemsen2017-05-156-14/+253
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When kati keeps state around, it has to regenerate the ninja file every time the state is changed. So move the java version checking into soong_ui, where we can parallelize it with other operations instead of only checking it occasionally. Bug: 35970961 Test: Put java7 in PATH, m -j Test: Put java8-google in PATH, m -j Test: Put a space in TOP, m -j Test: OUT_DIR=<case-preserving fs> m -j Test: OUT_DIR=<path with space> m -j Test: DIST_DIR=<path with sapce> m -j Change-Id: I3245c8dd6d856240d17d54cb05d593dc9df71a27
* | Move clean/clobber to soong_uiDan Willemsen2017-05-151-0/+11
|/ | | | | | | | | | | | | | | | | So that we don't have to load up all the makefile state just to remove the output directory. Starting from a completely empty out directory: kati: 16s soong_ui: 2.0s From a minimal out directory (m -j blueprint_tools): kati: 3.8s soong_ui: 0.4s Test: m -j clean Test: m -j clobber Change-Id: Ibeec6fbfa29387750342a752a55336caca4b3992
* Clean OUT_DIRDan Willemsen2017-05-121-1/+3
| | | | | | | | | | | | | | Otherwise Make and soong_ui disagree about where the soong.variables file should be. For example, when "OUT_DIR=out/": Error dumping make vars: Failed to parse make line: "make: Nothing to be done for `out/soong/soong.variables'." We would need to pass out//soong/soong.variables into make, since it doesn't attempt to match clean/unclean paths. Bug: 37553659 Test: OUT_DIR=out/ m -j Change-Id: Iebeea4868b96b11e8b08735f272e22be5db1d701
* Always run asan ckati on the build serversDan Willemsen2017-05-052-5/+16
| | | | | | | | | | | | We're seeing some rare crashes that appear to be stack overflows. To get better debugging, use the asan version of ckati when 'dist' is specified. Bug: 36182021 Test: m -j Test: m -j dist Test: make -j dist (w/o lunch) Change-Id: Ic3a5590974bfd718bf1929355d344b5933ac1d4f
* Add exec.Cmd wrapper for logging / sandboxingDan Willemsen2017-05-0510-72/+285
| | | | | | | | | | | | | | | | | | | | | | | Wrap os/exec.Cmd to use our Context and Config interfaces for automatic logging and error handling. It also simplifies environment modification based on the Config's environment. This also adds sandboxing on Macs using sandbox-exec. A simple profile is provided that only logs on violations, though multiproduct_kati on AOSP has no violations. This isn't applied to ninja, only make / soong / kati to start with. I measured <5% time increase in reading all makefiles, and no noticable difference when kati doesn't regenerate. I'd like to spin up a process to dump violation logs into our log file, but the log reporting changed over the range of Mac versions that we support, so that's going to be more complicated. Opening Console.app works in all cases if you're local -- just search/filter for sandbox. Linux sandboxing will be implemented later -- the sandbox definition is opaque enough to support a different implementation. Test: multiproduct_kati on AOSP master on Mac Change-Id: I7046229333d0dcc8f426a493e0f7380828879f17
* Support ASAN for ckati and ninjaDan Willemsen2017-04-273-2/+14
| | | | | | | | I missed this when converting to soong_ui. Test: m -j blueprint_tools (check soong.log) Test: SANITIZE_HOST=address m -j blueprint_tools Change-Id: I01eb567db6848dc36dd679557291a4e600a63bba
* Blacklist DISPLAY / GREP_OPTIONSDan Willemsen2017-04-181-0/+4
| | | | | | | | | | We keep having makefiles reading $DISPLAY, and GREP_OPTIONS with --color=always has caused problems with shell commands in the past. Bug: 37333696 Test: GREP_OPTIONS="--color=always" m -j Test: DISPLAY=test m -j (modify an Android.mk to check DISPLAY) Change-Id: Iafab37d61ecde5c6fdb35a05f18709abc17e8554
* Export JAVAC_WRAPPER environment.Yoshisato Yanagisawa2017-04-051-0/+1
| | | | | | | | | | To allow to inject a wrapper program for compiling java code, let me allow soong to export JAVAC_WRAPPER. Test: Set JAVAC_WRAPPER and ANDROID_COMPILE_WITH_JACK=false envs, Test: and make -j 32 Change-Id: Ib77fe00bd781f8f4ddf965c5e7905eab466a057a
* Fix OUT_DIR_COMMON_BASE with soong_uiandroid-o-preview-1Dan Willemsen2017-03-021-0/+16
| | | | | | | | | | | | | | | | | | | Currently, Kati is the only one that is respecting OUT_DIR_COMMON_BASE, causing the build to fail when ninja tries to match up the Soong and Kati ninja files. The soong_ui.bash script change is necessary to move the microfactory built outputs to the correct location. The config.go change takes care of setting OUT_DIR in the environment of every subprocess, so that we could remove the OUT_DIR_COMMON_BASE handling from Make once the USE_SOONG_UI=false path goes away. Bug: 35929763 Test: m -j blueprint_tools Test: OUT_DIR=... m -j blueprint_tools Test: OUT_DIR_COMMON_BASE=... m -j blueprint_tools Change-Id: I4184f2b4392d32c5bea51e51162a48df0e5c90d5
* Updates for the new ckati dropDan Willemsen2017-02-241-5/+3
| | | | | | | | | | | | | We can start removing out directories again in multiproduct_kati, since the opendir bug has been fixed. Add --color_warnings to the Kati command line. Since this is different from Make, take this opportunity to reorder the command line to make more sense. This wasn't done before because kati forces a regen whenever the command line changes. Test: USE_SOONG_UI=true m -j blueprint_tools Change-Id: I5ad03359fbc16db482722946202297c1ae0f2b90
* Merge "Improve signal handling in soong_ui"Treehugger Robot2017-02-221-20/+54
|\
| * Improve signal handling in soong_uiDan Willemsen2017-02-221-20/+54
| | | | | | | | | | | | | | Bug: 35214134 Test: ctrl-C during build Test: add for{} to hang soong_ui in multiple places, ensure it exits Change-Id: Ic71eedd4b1814ab2f3c441ae61a97570eda4fe16
* | Filter kati output to collapse verbose messagesDan Willemsen2017-02-217-3/+270
|/ | | | | | | | | | | | 1. Collapses the "including .../Android.mk ..." lines like ninja does, so that we overwrite the last line if there wasn't anything else to print. 2. Strips ansi control codes so that log files don't include unreadable characters. Test: m -j Test: m -j | tee output.log (with colored output) Change-Id: Ib18437f6f9d37084360097a9d586800c833072c5
* Merge "Ship the build log and trace on the build servers"Dan Willemsen2017-02-091-0/+14
|\
| * Ship the build log and trace on the build serversDan Willemsen2017-02-071-0/+14
| | | | | | | | | | Test: m -j; m -j dist Change-Id: I4718e7a0cda6719bbab4243038ea2666c212cf19
* | ui: Fix soong-executed ninja wrappingDan Willemsen2017-02-061-0/+1
|/ | | | | | | | | For proper ninja smart terminal support, we need to pass stdin to ./soong. Otherwise it starts a new line if the terminal isn't wide enough. Test: `rm -rf out/soong/.bootstrap; m -j` in narrow terminal Change-Id: I643a526001adc2323a420a03fa1df282554c7886
* Add build tracingDan Willemsen2017-02-069-1/+451
| | | | | | | | | | | This creates a rotating build.trace.gz in the out directory that can be loaded with chrome://tracing. It'll include start and end timings for make/soong/kati/ninja, and it will import and time-correct the ninja log files. Test: m -j; load out/build.trace.gz in chrome://tracing Test: multiproduct_kati -keep; load out/multiproduct*/build.trace.gz Change-Id: Ic060fa9515eb88d95dbe16712479dae9dffcf626
* Add multiproduct_katiDan Willemsen2017-02-061-0/+12
| | | | | | | | | | | | | | | This is a replacement for build/tools/kati_all_products.sh using the new Soong ui/build package. It doesn't even attempt to run ninja, and it can be configured to run only the product config, or only the product config and Soong. For AOSP on my machine: -only-config 1.4s -only-soong 1m20s <none> 13m Test: multiproduct_kati Change-Id: Ie3e6e7bdf692e46a8b8eb828f437190f8003500b
* Add a Go replacement for our top-level Make wrapperDan Willemsen2017-02-0615-0/+1773
Right now this mostly just copies what Make is doing in build/core/ninja.mk and build/core/soong.mk. The only major feature it adds is a rotating log file with some verbose logging. There is one major functional difference -- you cannot override random Make variables during the Make phase anymore. The environment variable is set, and if Make uses ?= or the equivalent, it can still use those variables. We already made this change for Kati, which also loads all of the same code and actually does the build, so it has been half-removed for a while. The only "UI" this implements is what I'll call "Make Emulation" mode -- it's expected that current command lines will continue working, and we'll explore alternate user interfaces later. We're still using Make as a wrapper, but all it does is call into this single Go program, it won't even load the product configuration. Once this is default, we can start moving individual users over to using this directly (still in Make emulation mode), skipping the Make wrapper. Ideas for the future: * Generating trace files showing time spent in Make/Kati/Soong/Ninja (also importing ninja traces into the same stream). I had this working in a previous version of this patch, but removed it to keep the size down and focus on the current features. * More intelligent SIGALRM handling, once we fully remove the Make wrapper (which hides the SIGALRM) * Reading the experimental binary output stream from Ninja, so that we can always save the verbose log even if we're not printing it out to the console Test: USE_SOONG_UI=true m -j blueprint_tools Change-Id: I884327b9a8ae24499eb6c56f6e1ad26df1cfa4e4