Commit graph

59 commits

Author SHA1 Message Date
Dan Willemsen
8b999ac63d Read Soong-exported configuration
This is to ensure that Make and Soong agree on configuration variables
like TARGET_GLOBAL_CFLAGS. Only a few variables are actually checked
currently until we make more actually the same.

Bug: 23566674
Change-Id: Ibede43d933ede4d470e182f9490ea6ec4ef52fbc
2016-05-12 13:36:33 -07:00
Dan Willemsen
9a97ba700b Only pass NINJA_ARGS to the main ninja compile
This way commands like "-t query <target>" will work against the main
build, instead of failing to find the target during the initial soong
build and stopping.

Change-Id: I9b6bd6ac431b95e12db69ec7f272669b9d292761
2016-05-05 16:55:21 -07:00
Colin Cross
facdca17d5 Update prebuilt build tools path
Build tools have been moved from prebuilts/sdk/tools to
prebuilts/build-tools.

Bug: 27857138
Change-Id: I60be42c197d420897dab77808c25818c9d2e81df
2016-05-04 16:02:02 -07:00
Dan Willemsen
cc60f01357 Handle symlinked OUT_DIRs (again)
My previous attempt at properly handling symlinked OUT_DIRs only worked
if the symlink was to a different directory, not one in the same
directory.

This time, make sure that both make and soong use the same
representation of the output directory by passing BUILDDIR to
bootstrap.bash. Soong has been updated to pick whether to use a relative
or absolute path back to the source tree depending on what makes sense.
If the BUILDDIR or the path back to the source tree change, re-run the
bootstrap.

Also, move the $OUT_DIR/Android.mk and $OUT_DIR/CleanSpec.mk generation
to before Kati runs. In the case that $TOP/out was symlinked to
$TOP/out.angler:

 1) Soong generates out.angler/soong/Android.mk
 2) Kati's find generator produces in-memory tree of the filesystem
 3) $(shell ) creates out.angler/Android.mk
 4) The emulated findleaves Android.mk search finds
    out.angler/soong/Android.mk since the in-memory tree is never updated.

This doesn't happen in the normal case, because we pass --prune=$OUT_DIR
to findleaves.

Change-Id: Ib0fdae2e80f75ddcf33a3c8c5ea0978f5308b437
2016-03-22 20:02:18 -07:00
Dan Willemsen
a800b9a83a Merge "Always run Soong" 2016-03-21 21:09:40 +00:00
Dan Willemsen
2d12ce1d88 Always run Soong
Without switching on USE_SOONG, this lets us verify that all builds have
blueprint/soong/go, and can generate a build.ninja file without
producing errors.

Change-Id: I79451ce24c8b5b6745e41d951153265441c33e8a
2016-03-15 00:36:07 +00:00
Shinichiro Hamaji
b95dc31033 Merge "Use KATI_DEPFILE for .P associated with object files" 2016-03-14 21:59:46 +00:00
Dan Willemsen
1487f31d83 Use hermetic ckati/makeparallel prebuilts
Currently, we're building against the native host version of libc++ and
other headers. Instead, use prebuilts of ckati/makeparallel built with
Soong against the included libc++ and sysroot. Building ckati /
makeparallel doesn't work well in unbundled branches that don't have all
of the libc++ dependencies to do successful host builds.

KATI is default variable defined when running under Kati, don't use it
for other purposes. Use CKATI instead.

Bug: 27533820
Change-Id: I82d66f5e34e3341a3cee4c5c83cd1d9a54d057ff
2016-03-09 17:19:30 -08:00
Dan Willemsen
441d646c6f Fix C++ on Darwin
We've been including the system libc++ headers even if we're building
against our version of libc++. Stop doing that, and only add the headers
to our path if we're using the system libraries.

If nothing is specified, on recent OSX versions, libc++ is the default
c++ library instead of libstdc++. We've been explicitly including the
libc++ headers on all versions, but that breaks old versions. Force us
over to libc++, since the system libstdc++ does not support C++11, and
libc++ is still supported on our oldest version (10.8).

Change-Id: I1fccee8da0f425e10ccc9d3247ed40664eb6ada0
2016-03-08 20:15:21 -08:00
Shinichiro Hamaji
4037c4225a Use KATI_DEPFILE for .P associated with object files
Also specify "-d keepdepfile" to ninja so .P files won't be
deleted by ninja.

-include for .s files are removed because GCC doesn't
generate .d files for .s files.

Bug: 26839129
Change-Id: If00e93c7a33449ec314a5cdba438475a32979f4e
2016-03-03 18:19:37 +09:00
Ari Hausman-Cohen
3bbaa8a8ff Merge "Adding a brillo_tests task." 2016-03-01 22:38:07 +00:00
Ari Hausman-Cohen
746f40236b Adding a brillo_tests task.
Places whitelisted brillo tests and the whitelist itself
in a zip when run.

BUG: 27385399
Change-Id: I93c2ea8cc521292a6de811bb47bc87a727edd21f
TEST: manual make dist brillo_tests, confirmed desired files were in zip.
2016-02-29 13:48:06 -08:00
Shinichiro Hamaji
a9b464770b Merge "Link everything in libpthread.a to ckati" 2016-02-29 11:04:36 +00:00
Shinichiro Hamaji
f4511161d5 Link everything in libpthread.a to ckati
With this workaround, we can delete a lot of unnecessary code
in ckati: https://github.com/google/kati/commit/8380fb8525adfb5

Change-Id: I3de1bf4cd6f2a65ee9322e8504459621871612fc
2016-02-26 17:03:55 +09:00
Colin Cross
a65f1aee84 Make multiple rules to generate a file an error
Pass -w dupbuild=err to ninja to make defining multiple rules to build a
file an error instead of a warning.  Proceeding with the build would
result in undefined behavior, and nobody notices the warning.

Change-Id: Iadac88f8835121a8685bff835acba638100bb654
2016-02-23 15:40:11 -08:00
Dan Willemsen
3f60c4b6c0 Allow building kati & makeparallel with soong
This uses far fewer hacks in order to build these host tools, but will
require more libraries(libc++,etc) from unbundled and stripped down
branches.

Once this becomes the only option, all builds will happen after soong
runs. Then the toolchain / global cflags information will be able to be
moved from make to soong (and exported back to make).

Change-Id: I270b1d92bcef28a96fbc3ec9910d9bd0c101ac0f
2016-01-13 13:08:29 -08:00
Colin Cross
3ebb2f7326 Combine soong builds into make builds
Bootstrap soong if necessary, and wrap the kati and soong ninja files
into a single ninja file.

Change-Id: I0000c7eaa1adda763189681c57ec27a97a12ee1f
2015-12-15 16:05:57 -08:00
Colin Cross
ea20915b30 Switch to using kati env script
Kati generates a shell script to run ninja, but that makes it difficult
to customize the ninja command line.  Switch to sourcing the new env
script and then starting ninja manually.

Change-Id: I7139290a463018ddf5e05b4d61a0d2f18b1a2247
2015-11-17 12:10:13 -08:00
Ying Wang
4a4a0bc38f Sort out ANDROID_GOALS, KATI_GOALS and NINJA_GOALS.
ANDROID_GOALS: any Android goals that need to be built.
KATI_GOALS: goals that we need to pass to Kati.
NINJA_GOALS: goals we need to pass to Ninja.

For modifier Android goals (dist, INTERNAL_MODIFIER_TARGETS),
we don't need to pass them to Ninja. See also commit
80e46c7c5c.
Restore the dist rule removed by the above commit.

Previously "droid" was never passed to Ninja. That's incorrect.
"make droid docs" should build both docs and droiod.
Fixed with this change.

Change-Id: I5c28061fe0ebe7848872ee349056d029b787ff71
2015-11-03 17:10:28 -08:00
Will Drewry
c13f9c952d envsetup,product,ninja: enable symlink traversal
When searching device, product, or hardware, allow
find to follow symlinks.

Add KATI_EMULATE_FIND=false to allow disabling the find
emulator which changes findleaves.py behavior wrt
symlinks.

BUG=24605247
TEST=works with CL:783781 (without the find wrapper in that CL)

Change-Id: Ia9d0e4add391a56f34828a09a6cec3f435ccc548
2015-11-02 14:18:45 -08:00
Colin Cross
42470e915d Remove use of .INTERMEDIATE
make 3.81 has a bug where combining an up-to-date .INTERMEDIATE rule
with -j causes an infinite loop (http://savannah.gnu.org/bugs/?15919).
.INTERMEDIATE was only necessary to support multiple outputs while only
running a command once, remove .INTERMEDIATE by replacing
$(KATI_OUTPUTS) dependencies with $(KATI_BUILD_NINJA).  We can assume
that $(KATI_NINJA_SH) will be updated at the same time as
$(KATI_BUILD_NINJA), and not explicitly depend on it.

Also remove generateonly and fastincremental, which are no longer
necessary and were overcomplicating ninja.mk.  kati now always runs due
to FORCE, and ninja is run by a phony rule that depends on
$(KATI_BUILD_NINJA).

Bug: 25344116
Change-Id: I99d2713b1532ea11d83da9a11b1be26cfe13a5d2
2015-10-28 13:31:40 -07:00
Colin Cross
88dc18a319 Put NINJA_ARGS last
Put NINJA_ARGS at the end of the command line so it can contain tools,
which expect to be last.

Change-Id: I5f47307d01aa52eb74a333b19ffe3a7cd8950b01
2015-10-20 15:12:12 -07:00
Shinichiro Hamaji
ecea601b8a Stop passing --gen_all_phony_targets to kati
6ff74ce8ee

should have made this workaround unnecessary. Now, even with
old build/core, "m -j32 PRODUCT-aosp_mips64-eng dist" does not
output a ninja file with "$(cat )".

Bug: 24384320
Change-Id: I262edf00dce39f39ec4e55d5ed7b1b6f8d931f33
2015-10-08 15:25:16 +09:00
Colin Cross
b959980487 Merge "Move the dist-as-droid handling from make to ninja" 2015-10-02 17:58:20 +00:00
Colin Cross
b4a4278595 Have all targets in build.ninja
We should pass --gen_all_targets to have targets which are not declared
as .PHONY.  However, this triggers some nasty behavior inherited from
make, where targets can get variables from things that depend on them.
--gen_all_targets will traverse the targets starting at random points in
the dependency tree, and any variables set higher in the tree will not
be visible.  To work around this, keep --gen_all_phony_targets, which
will start traversing at the phony targets first.  This will enter the
tree traversal at points we know don't use inherited variables, like
checkbuild or the PARSE_TIME_MAKE_GOALS, and will reach all the
dependencies that use inherited variables in the right order.
--gen_all_targets will then fill in any remaining targets that were not
in the main dependency tree, and hopefully none of them use any
inherited variables.

Bug: 24384320
Change-Id: I1ff07b7ef26e9481baae678e7fe0933b6d05f2a7
2015-09-30 15:43:50 -07:00
Colin Cross
ebf32c2236 Move ninja files to $(OUT_DIR)
Move the ninja files from $(PRODUCT_OUT)/build.ninja to
$(OUT_DIR)/build-$(TARGET_PRODUCT).ninja.  This will improve incremental
builds of host modules after swithing target products, because the
.ninja_deps file will be accurate across builds.

Change-Id: Ia12746ccde0de31f6fccd111b2bdbd48fc6900d7
2015-09-30 21:35:40 +00:00
Colin Cross
8f26a45bb6 makeparallel needs global CFLAGS now
After 3ad3549519 (Don't add CFLAGS to
CPPFLAGS), makeparallel now needs to explicitly include CFLAGS like
kati.

Change-Id: Ib50328da147f03647bb5b99f6d69948d644eece9
2015-09-30 05:11:40 +00:00
Colin Cross
80e46c7c5c Move the dist-as-droid handling from make to ninja
dist is a strange dual-use target, as both a flag and a goal.  make dist
<target> means build <target>, but copy any dist-for-goals files to
$DIST_DIR.  make dist without a target means build droid with
dist-for-goals files.  This requires special handling of MAKECMDGOALS to
detect the case where dist is the only goal, which breaks when ninja.mk
doesn't pass all the goals to kati.  Instead, let ninja handle the
default goal.  Pass dist to kati if it is specified in order to turn on
the dist-for-goal rules, but filter it out of the goals passed to
ninja.  If there are any other goals, ninja will build them.  If there
are no goals, ninja will fall back to the default goal, which is droid.

Change-Id: Iafb184d28cb312cb7c5682cd3ff4f310b2d9f7e9
2015-09-29 17:15:09 -07:00
Colin Cross
8f9f01bbc3 Revert "Have all targets in build.ninja"
--gen_all_targets seems to be dropping some intermediate targets,
causing problems when kati is passed a goal and then ninja is run with
checkbuild as a goal, for example with:
m -j PRODUCT-aosp_flounder-userdebug checkbuild

This reverts commit 92bbf5667d.

Change-Id: If34a790028f8da98fcc713e3f7000d06c63dcf80
2015-09-29 14:21:24 -07:00
Colin Cross
52b697a488 Revert "Pass all goals to kati when "dist" is in goals"
This isn't actually necessary, dist doesn't use MAKEDISTGOALS other than
to check if it contains any other real targets.  The real issue is
caused by --gen_all_targets, and is broader than just "dist".

This reverts commit d3701e9e96.

Change-Id: Iaea1f158dbd1d4b9035954efef40b33485e6c6b3
2015-09-29 14:20:28 -07:00
Colin Cross
02d04b4ddc Merge "Pass all goals to kati when "dist" is in goals" 2015-09-29 17:09:03 +00:00
Shinichiro Hamaji
d3701e9e96 Pass all goals to kati when "dist" is in goals
Bug: 24339367
Change-Id: Iee80d65fe169ec005900a96446aa7a432fc68872
2015-09-29 15:52:58 +09:00
Shinichiro Hamaji
92bbf5667d Have all targets in build.ninja
We should pass --gen_all_targets instead of --gen_all_phony_targets
to have targets which are not declared as .PHONY.

Bug: 24384320
Change-Id: I616d8c74e6efd9d69b1a935cfc5116b716f100ff
2015-09-29 14:18:59 +09:00
Shinichiro Hamaji
8b08f3a864 Reland: Only put PARSE_TIME_MAKE_GOALS into KATI_TARGETS
Only goals that modify the parsing need to be passed to kati, filter out
everything else and only pass it to ninja.

Also, always specify --gen_all_phony_targets. With this flag, kati emits
all phony targets in the ninja file so a ninja file generated only with
PARSE_TIME_MAKE_GOALS can handle targets which don't change the parsing.

This is a reland attempt of
https://android-review.googlesource.com/#/c/172800/

The two issues should have been fixed by Ying in internal trees.

Bug: 24339367
Change-Id: I8ba2254f9bff271da2a7aa7684fd3d987e07c9d3
2015-09-28 16:03:21 -07:00
Colin Cross
fe5e6894d2 Set BUILDING_WITH_NINJA flag when parsing makefiles for ninja build
Distinguish between parsing makefiles in make for a pre-ninja build,
parsing makefiles in kati for a ninja build, and parsing makefiles in
make for a non-ninja build by leaving USE_NINJA=true enabled for the
kati pass but also setting BUILDING_WITH_NINJA.

Change-Id: I63f1ce1efe08cd86fdf41f8051901f720b38cfaf
2015-09-28 15:36:05 -07:00
Colin Cross
c53d6b90b3 Remove checkbuild and test from parse time goals
The tests goal is not a parse time goal.

The checkbuild goal is only a parse time goal so that it doesn't result
in a circular dependency between droid and checkbuild when
ANDROID_BUILD_EVERYTHING_BY_DEFAULT is set.  Get rid of the circular
dependency by making droid depend on droid_targets, and droid_targets
depend on the targets that are normally built for droid.  checkbuild can
then always depend on droid_targets, and droid can condtionally depend
on checkbuild without introducing a circular dependency.

Bug: 24413153
Change-Id: I231d80e05ffe321384a5efbcdf5578f86ad84da0
2015-09-25 16:43:36 -07:00
Shinichiro Hamaji
5ff665d407 Revert "Only put PARSE_TIME_MAKE_GOALS into KATI_TARGETS"
This reverts commit cb31f040e3.

This could be the cause of an internal build breakage.

Change-Id: Ic5d2a2ce1f2d214a8201db5c570682d8336763b9
2015-09-25 14:21:37 +09:00
Shinichiro Hamaji
cb31f040e3 Only put PARSE_TIME_MAKE_GOALS into KATI_TARGETS
Only goals that modify the parsing need to be passed to kati, filter out
everything else and only pass it to ninja.

Also, always specify --gen_all_phony_targets. With this flag, kati emits
all phony targets in the ninja file so a ninja file generated only with
PARSE_TIME_MAKE_GOALS can handle targets which don't change the parsing.

Bug: 24339367
Change-Id: I63237160c3c86817b53635665d56906790ec4e6a
2015-09-25 13:49:46 +09:00
Shinichiro Hamaji
3c524993c7 Merge "Make it possible to change the number of remote jobs" 2015-09-25 04:34:37 +00:00
Ying Wang
ce2843f455 The pattern %tests is too broad.
We had fixed the filtering of %tests in art/Android.mk.
Actually the %tests leads to false build<suffix>.ninja when you run:
$ mmma cts/tests/tests/nativeopengl/libnativeopengltests
because the new mmma calls make with goals like
MODULES-IN/cts/tests/tests/nativeopengl/libnativeopengltests .

Bug: 24309760
Change-Id: I35af2e8d046ae40f3b90ec0a92473fcab8ff5db5
2015-09-24 11:34:46 -07:00
Shinichiro Hamaji
c1cba69970 Make it possible to change the number of remote jobs
User can overwrite NINJA_REMOTE_NUM_JOBS for this purpose. The
number is passed to ninja instead of to kati so no we don't
need to regenerate a ninja file when a user changes this value.

Change-Id: I2ccfaaae4492d84a8b8045dff612cb5f6ebe2c79
2015-09-24 16:22:44 +09:00
Dan Willemsen
3ad3549519 Don't add CFLAGS to CPPFLAGS
Except for kati, we never use COMMON_GLOBAL_CPPFLAGS without also using
COMMON_GLOBAL_CFLAGS, which leads to duplicate command line entries.

Change-Id: I25d625924e9d157175a9e88bc3f15b7214cfb4ed
2015-09-23 16:23:02 -07:00
Colin Cross
87e0e8a764 Merge "Revert "Only put PARSE_TIME_MAKE_GOALS into KATI_TARGETS"" 2015-09-23 21:53:08 +00:00
Colin Cross
84a8ca3173 Revert "Only put PARSE_TIME_MAKE_GOALS into KATI_TARGETS"
If there are any goals on the command line, kati hides targets that are
not dependencies of those goals.  Revert this until kati is modified to
include all targets.

This reverts commit b71d24931c.

Bug: 24339367
Change-Id: I7c3a950aef8efc9a0eb72bd29ee07710d2faca99
2015-09-23 21:49:27 +00:00
Colin Cross
f8579330a5 Merge "Only put PARSE_TIME_MAKE_GOALS into KATI_TARGETS" 2015-09-23 20:54:16 +00:00
Ying Wang
127da9e4aa Use md5sum as the build.ninja filename suffix if the suffix gets too long.
Use md5sum as the build.ninja filename suffix if the suffix is longer
than 64 characters. Also store the original suffix in a corresponding
.suf file for human lookup.
This fixes the "File name too long" error when kati tries to write to
build.ninja with the long original suffix.

Bug: 24302576
Change-Id: Ie04b0c14e1a9d593aa5c2a6b357b19a9e8a7158e
2015-09-22 16:16:12 -07:00
Colin Cross
b71d24931c Only put PARSE_TIME_MAKE_GOALS into KATI_TARGETS
Only goals that modify the parsing need to be passed to kati, filter out
everything else and only pass it to ninja.

Change-Id: I28788a3409d601fe838749bcf15394bc8f3d775b
2015-09-22 14:24:00 -07:00
Colin Cross
af6c071a5f Pass --ninja to makeparallel for ninja
When parallelism is being handled by ninja, pass --ninja to makeparallel
to have it translate -j with no number to default ninja parallelism, and
-k to -k0.

Bug: 24199503
Change-Id: Ic1be7572f93b33e4a71ed23e9e73dea1d4255703
2015-09-18 15:02:40 -07:00
Dan Willemsen
b384eb84c3 Merge "kati: Handle MAKECMDGOALS modifications" 2015-09-15 00:28:42 +00:00
Dan Willemsen
cb1bd116ed kati: Handle MAKECMDGOALS modifications
For some special targets (PRODUCT-%), the MAKECMDGOALS variable is
modified. Before this change, using one would result in a "no rule to
make target" error, since the new target was not stubbed out.

Change-Id: I879642a48b84a66789d4bdb7db1b6fd1130819b7
2015-09-14 16:30:51 -07:00