844 Commits

Author SHA1 Message Date
LaMont Jones
2895eed928 Enforce exclusive release config component directories
Enforce this requirement for delivery to aosp:
- "A release config shall exist in at most one of build/release and
  vendor/google_shared/build/release".

Bug: 349843674
Bug: 370829778
Bug: 371026851
Test: manual, TH
(cherry picked from https://android-review.googlesource.com/q/commit:639423daacc146457f10cf3d060bc2932dc903eb)
Merged-In: Ie4bc8137f2bd10f3b90efcffe8d2c8e317dcc2fc
Change-Id: Ie4bc8137f2bd10f3b90efcffe8d2c8e317dcc2fc
2024-10-11 00:57:09 +00:00
Cole Faust
16d227a725 Add default_visibility for soong modules
So that we don't get surprise usages.

Bug: 348717861
Test: m nothing
Change-Id: I47319a727092c1bd936cca88f5713ee977a48b48
2024-09-18 17:41:30 -07:00
Yu Liu
4faab81e8e Add a system test to check the mk and ninja files generated by incremental build.
Bug: 358428180
Test: Run the test locally.
Change-Id: If1862ee44976216f3c5a5c62d50c6d688d38023b
2024-09-12 23:56:31 +00:00
Cole Faust
2fec4128e0 Make globs compatible with hash-based ninja semantics
Previously, globs worked by having soong_build rewrite a ninja file
that ran the globs, and then dependended on the results of that ninja
file. soong_build also pre-filled their outputs so that it wouldn't
be immediately rerun on the 2nd build.

However, the pre-filling of outputs worked for ninja, because although
it updated their timestamps, the soong ninja file was then touched
by soong_build after that, so the soong_build ninja file was newer
and ninja wouldn't rerun soong. But N2 reruns actions if their inputs'
mtimes change in any way, not just if they're newer. Similarly,
hashed-based ninja implementations could not enforce an order on
file contents, so they would have the same problem.

To fix this, lift the glob checking out of ninja and into soong_ui.
Soong_build will output a globs report file every time it's run, and
every time soong_ui is run it will check the globs file, and if any
globs change, update an input to soong_build. soong_ui is essentially
doing what was done in ninja with bpglob actions before.

Bug: 364749114
Test: m nothing, m nothing again doesn't reanalyze, create a new file under a glob directory, m nothing again reanalyzes
Change-Id: I0dbc5ec58c89b869b59cd0602b82215c4972d799
2024-09-09 17:42:49 -07:00
Cole Faust
63ea1f966e Sandbox environment variables
So that the build can't access extra information unintentionally.
Particuarly ANDROID_BUILD_TOP is dangerous.

In the future PATH should be locked down as well.

Bug: 307824623
Test: Added a all_genrules target and built that
Change-Id: I88bb0efb0a82529a1c85875a53cf20c8384d07fe
2024-09-03 16:38:28 -07:00
Treehugger Robot
803ca1cf0d Merge "Sandbox the OUT_DIR environment variable" into main 2024-08-26 20:49:59 +00:00
Cole Faust
1ead86c1a5 Sandbox the OUT_DIR environment variable
Currently, OUT_DIR is inherited from the parent process, leading to
scripts being able to find the output directory when the enviornment
variable is set to an absolute path. When sandboxing a command,
also rewrite the OUT_DIR environment variable to the sandboxed one,
so that scripts can't find the real out dir.

Bug: 307824623
Test: Presubmits
Change-Id: I325071121a60bddc4105df680fbdfe3d11dc94e2
2024-08-26 11:12:10 -07:00
LaMont Jones
95b0ba4192 Align release config protos with style guide
Rename `enum workflow` to `enum Workflow`, and similarly for `message`
declarations.

This should reduce downstream issues when the protos are converted to
non-Go languages.

Bug: 347076012
Test: TH, manual
Change-Id: Iee20dc763fcef497d8b88f83f489604fda104100
2024-08-21 15:54:59 -07:00
LaMont Jones
cba2330e84 release-config: disallow new duplicate flag declarations
Flags must only be declared in one place in the tree.  This change
prevents new ones from being added while we fix the bad flags already
present.

Bug: 352105274
Test: manual
Merged-In: I8c4bf2b2852685e84177500f28fe8908016082b9
Change-Id: I8c4bf2b2852685e84177500f28fe8908016082b9
2024-07-17 15:48:10 -07:00
LaMont Jones
92b54c4907 Add more guardrails to release config compilation
Throw an error if a release config dir appears to contribute flagging
overrides to a release config without actually doing so (by having
release_configs/{name}.textproto).

Bug: None
Test: manual, TH
Change-Id: Ie71cd6898bda4b8da8d58c3e23fb89ed17ebebd1
2024-07-17 16:19:18 +00:00
LaMont Jones
9877b7e627 release_config: add value_directories to artifact
release_config_artifact.directories contains the ordered list of
release config map directories that contributed flag declarations and/or
flag values to the release config (ignoring inheritance).

release_config_artifact.value_directories contains the ordered list of
release config map directories where we found a release_config message
for this release config.

Also, improve various error messages.

Bug: None
Test: manual, TH
Change-Id: Ifb67e80fc8746ae466f2e3515c5b0c3ba07a291d
2024-07-12 14:47:52 -07:00
LaMont Jones
69763a549d Avoid C++ naming error
C++ hates it when there is a field with the same name as a message.

Bug: 351826222
Test: manual, TH
Change-Id: I45355baacce57309c72d1658a095b328841a8d9a
2024-07-08 13:29:49 -07:00
Yu Liu
88f4e331cc Merge "Experimental code to support build action caching." into main 2024-06-19 01:57:12 +00:00
LaMont Jones
21d04d99c8 Add RELEASE_ACONFIG_EXTRA_RELEASE_CONFIGS
This build flag causes us to create aconfig flag artifacts for the
given extra release configs.

Bug: 298444886
Test: manual
Change-Id: I10148f6e7318b0477438ed1d8baafbf4dc594c90
2024-06-18 17:16:42 -07:00
Yu Liu
fa29764f9f Experimental code to support build action caching.
Bug: 335718784
Test: build locally
Change-Id: Icc1f1fb15f9fe305e95dd51e2e7aff1e9cbf340c
2024-06-19 00:09:32 +00:00
LaMont Jones
1ecfa8fb9f Rename flag_artifacts field in proto
Having a message name and field name that are the same causes C++
generated code to fail.

Bug: 347076012
Test: manual, TH
Change-Id: I198e92dc906d476881ef351e603ef2ea63ce5848
2024-06-17 15:36:14 +00:00
Treehugger Robot
7467410787 Merge "Only write release config files if they've changed" into main 2024-06-14 17:49:23 +00:00
Treehugger Robot
000fe5ac5d Merge "release_config: various cleanup" into main 2024-06-14 01:46:45 +00:00
Cole Faust
2530b44656 Only write release config files if they've changed
Currently, when you do `m` repeatedly, it does a little bit of
rebuilding to copy release config files around. If we change
release-config to only rewrite the files if they've changed, we
get a proper "ninja: no work to do." message.

Bug: 346757289
Test: m repeatedly
Change-Id: I9c1f6d34ec20d14b684a0183c5ec457ea92440f9
2024-06-13 16:56:24 -07:00
LaMont Jones
97e29a9cb4 Properly track where a build flag is declared
This allows us to generate an error when it is then set in an earlier
location in the list.

Bug: 346883187
Test: manual
Change-Id: I1c8389ff0d5a16c080008967ab5e0b9b93101301
2024-06-13 15:49:29 -07:00
LaMont Jones
09721868db release_config: various cleanup
- move WriteMakefile to release_config.go
- use slices.Sort instead of slices.SortFunc where applicable.
- improve error message when inheriting an invalid release config

Bug: None
Test: manual
Change-Id: Id959ddccc75fad912518d5cce8d14da506e0bbea
2024-06-13 09:18:03 -07:00
LaMont Jones
50cf9be45c build_flag: when printing all flags, sort them.
Bug: None
Test: manual
Change-Id: I1d3d6e9d9e56d2987e43e4a41162df4d3c39ad31
2024-06-11 09:52:05 -07:00
LaMont Jones
fcb2d377ca build-flag: support set --redacted=true NAME
Simplify the process of redacting a flag.

Bug: None
Test: manual
Change-Id: Ib0f26c9846141030e1f23a389044debc9945bbbf
2024-06-11 09:04:26 -07:00
LaMont Jones
6b002a7d08 build-flag: ensure release_config declaration exists
If we are setting a flag for a release config in a map directory that
doesn't yet declare that release config, this map directory needs to
contribute to the release config.

Bug: 345278765
Test: manual
Change-Id: Ie4e74bce008c4c4fdc4bc16e3209f0d9ef9cf8a2
2024-06-11 09:04:26 -07:00
Treehugger Robot
db664386ec Merge "release_config: Do not force ranking in inheritance graph" into main 2024-06-07 01:07:53 +00:00
Treehugger Robot
211fdd6618 Merge "Drop IncludeTags" into main 2024-06-06 22:12:38 +00:00
LaMont Jones
4bb19b2414 release_config: Do not force ranking in inheritance graph
Let graphvis decide how to best display the release config graph.
Also add some color to the graph.

Bug: None
Test: manual
Change-Id: If8b9eb41eb78bd553fd5543938a2c1c098b41591
2024-06-06 12:22:26 -07:00
LaMont Jones
b4f866c73c Allow product-specific release configs.
Bug: 343794062
Test: manual
Change-Id: Ifdfab5978221f1396681a2c851bad7be502b6ea7
2024-06-04 14:27:07 -07:00
Yu Liu
fba4e70227 Merge "Upload build.trace.gz for user builds." into main 2024-06-04 17:24:50 +00:00
Joe Onorato
5219ed0b4b Merge changes from topic "list_releases" into main
* changes:
  Add list_releases command
  Add standalone list_products and list_variants commands.
2024-05-31 20:22:06 +00:00
Treehugger Robot
9b8cfd5144 Merge "Add prior_stages: to release config" into main 2024-05-31 16:40:49 +00:00
LaMont Jones
756bd68cde Limit release config inheritance from aliases
If the release config has a name matching build prefixes, it may not
inherit from an alias.

Bug: 340208722
Bug: 328495189
Test: manual
Change-Id: Idb7b1fa372db980c5732b700663553b7a9bf4a36
2024-05-30 20:23:01 -07:00
LaMont Jones
5195b82f42 Add prior_stages: to release config
Include those paths in the inheritance graph.

Bug: 348495189
Test: manual
Merged-In: I993af3a34ab7dd9a3346c6ffccb17e7abff23545
Change-Id: I993af3a34ab7dd9a3346c6ffccb17e7abff23545
2024-05-30 20:22:49 -07:00
Treehugger Robot
55ee3fcef6 Merge "Create inheritance graph" into main 2024-05-31 00:38:07 +00:00
LaMont Jones
ed22f82c01 Create inheritance graph
release-config now creates `inhertance_graph-${TARGET_PRODUCT}.dot`
showing the inheritance graph for all release configs present for
${TARGET_PRODUCT}.

Bug: 328495189
Test: manual, TH
Change-Id: I79242eaa848e0374b33f376e44d8938e9d398e21
2024-05-30 16:11:58 -07:00
Joe Onorato
53f3057037 Add list_releases command
Bug: 340648588
Test: list_releases
Change-Id: Ibce4704c64620b74c24952f16c2be902d8483f02
2024-05-30 15:52:09 -07:00
LaMont Jones
5a48f0d7f2 Better default value for RELEASE_PLATFORM_VERSION
If the release config name is a build prefix and different from the
inherited value, set RELEASE_PLATFORM_VERSION based on the release
config name.

Bug: 348495189
Test: manual
Change-Id: I95d715150cba9b57e343a8b8364d36f38dcc18a3
2024-05-30 14:43:48 -07:00
Treehugger Robot
89341ed9ad Merge "Build build_flags.json in soong" into main 2024-05-29 00:18:16 +00:00
LaMont Jones
194d492d55 all_flags.pb: Properly handle intermediate files
Bug: 343203557
Test: manual, TH
Change-Id: I9a4ef39b0c2a641ccd996187ce5f7629520dffc0
2024-05-28 13:24:19 -07:00
Justin Yun
5f53869dfe Build build_flags.json in soong
Define release_flags_json module type to install build_flags.json in
'etc'. release_flags_json reads the json files generated from the
soong release-config command.

Bug: 324996303
Test: build and see if the files are installed
Change-Id: I8cdcb7c61dd75cc54e4912d2ed7d1687f424151c
2024-05-23 14:58:08 +09:00
LaMont Jones
aae7c4a302 Merge "Generate specific message for build flag declarations artifact" into main 2024-05-22 22:07:20 +00:00
LaMont Jones
6d9ff256ed Generate specific message for build flag declarations artifact
Many of the fields in `flag_artifact` are not valid in
the all_build_flag_definitions artifact.

Bug: 328495189
Test: manual
Change-Id: I00eab1ef76f67f7db2118a6fc0d5771e3dd39fbb
2024-05-22 13:46:34 -07:00
Spandan Das
aa9369b71d Drop IncludeTags
This was previously used in conjunction with blueprint_package_includes
to prune Android.bp files from soong analysis.

Test: m nothing
Bug: 308188212
Change-Id: Ie82e20eec63bd0be70e1cf0290c70f62d5621c76
2024-05-22 19:23:47 +00:00
Cole Faust
a642853510 Merge "Log warnings to stdout instead of stderr" into main 2024-05-22 16:58:35 +00:00
LaMont Jones
44789260ad release_config_proto: revert enum rename
This caused the existing textproto files to be misparsed.

Bug: 328495189
Test: manual
Change-Id: I53dc5045839b575e5fcaace39a435c28648010f6
2024-05-22 06:42:59 -07:00
Treehugger Robot
d7b71490ae Merge "Export release flag types to make/soong" into main 2024-05-22 02:26:00 +00:00
Treehugger Robot
423b8f6869 Merge "Better errors from build-flag" into main 2024-05-22 01:53:20 +00:00
Cole Faust
3b30067f88 Log warnings to stdout instead of stderr
Currently, both stdout and stderr are redirected to a file. We want
stderr to be visible on the terminal in case the release config
fails, but we don't want to see the spam of warnings release config
always produces.

Move the warnings to stdout so they stay in the file when we start
showing stderr.

Test: m nothing
Change-Id: Ic869675f917270a472142b6e3a4210acaad7499b
2024-05-21 18:17:47 -07:00
Cole Faust
751a4a5fa2 Export release flag types to make/soong
And use the types to appropriately type selects on the release
variables.

Bug: 323382414
Test: Presubmits
Change-Id: Ide7eca95662caaa7b4be42e20399d9fcd7fed35f
2024-05-21 18:09:05 -07:00
LaMont Jones
310ccc2ad2 Better errors from build-flag
When `get_build_var` fails, output the error.

Bug: none
Test: manual
Change-Id: If4dc13e0e895823f50de1f5c7e929bb05eac69a0
2024-05-21 17:52:48 -07:00