Commit graph

2559 commits

Author SHA1 Message Date
Lukacs T. Berki
2cd5fe6206 Make RunBlueprint() return an error, if need be.
This is so that it doesn't need to abruptly call os.Exit(), denying
callers the opportunity to do cleanups.

Bug: 244730498
Test: Presubmits.
Change-Id: Ifd191d3bbbf2fdea2ca49e4fb552e5d1c557b80f
2023-06-20 09:44:50 +00:00
Colin Cross
6126fe8067 Optimize memory usage of ninjaString
ninjaString is an interface, which uses 16 bytes of memory on top
of the size of the concrete type.  A literalNinjaString is a string,
which is another 16 bytes for the string header for a total of 32
bytes.  A varNinjaString is two slices, which are 24 bytes each
for the slice headers, for a total of 64 bytes.  The slices contain
the first constant string, and then altenrating variable and string
parts of the ninjaString, resulting in 16 bytes plus 32 bytes per
variable.

This patch replaces the ninjaString interface with a *ninjaString
concrete struct type.  The ninjaString struct is a string and a
pointer to a slice of variable references, for a total of 24 bytes.

ninjaStrings with no variable references (the equivalent of the old
literalNinjaString) have a nil slice, and now use 24 bytes instead
of 32 bytes.

ninjaStrings with variable references allocate a slice of variable
references that contain 32-bit start and end offsets and a Variable
interface, but reuse the original string and so avoid the extra
string headers, resulting in 24 bytes for the slice header, and
24 bytes per variable.

These savings reduce the peak memory usage averaged across 10 runs of
/bin/time -v build/soong/soong_ui.bash --make-mode nothing
on the internal master branch cf_x86_64_phone-userdebug build
from 50114842kB to 45577638kB, a savings of 4537204kB or 9%.

The new Benchmark_parseNinjaString shows savings in both time and
memory.  Before:
Benchmark_parseNinjaString/constant/1-128       	594251787	         2.006 ns/op	       0 B/op	       0 allocs/op
Benchmark_parseNinjaString/constant/10-128      	21191347	        65.57 ns/op	      16 B/op	       1 allocs/op
Benchmark_parseNinjaString/constant/100-128     	 9983748	       130.2 ns/op	     112 B/op	       1 allocs/op
Benchmark_parseNinjaString/constant/1000-128    	 2632527	       445.1 ns/op	    1024 B/op	       1 allocs/op
Benchmark_parseNinjaString/variable/1-128       	 2964896	       419.4 ns/op	     176 B/op	       4 allocs/op
Benchmark_parseNinjaString/variable/10-128      	 1807341	       670.6 ns/op	     192 B/op	       7 allocs/op
Benchmark_parseNinjaString/variable/100-128     	 1000000	      1092 ns/op	     352 B/op	       7 allocs/op
Benchmark_parseNinjaString/variable/1000-128    	  300649	      3773 ns/op	    1584 B/op	       7 allocs/op
Benchmark_parseNinjaString/variables/1-128      	 2858432	       441.6 ns/op	     176 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/2-128      	 2360505	       513.4 ns/op	     208 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/3-128      	 1867136	       635.6 ns/op	     240 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/4-128      	 1584045	       752.1 ns/op	     272 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/5-128      	 1338189	       885.8 ns/op	     304 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/10-128     	 1000000	      1468 ns/op	     464 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/100-128    	   88768	     12895 ns/op	    3712 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/1000-128   	    8972	    133627 ns/op	   32896 B/op	       4 allocs/op

After:
Benchmark_parseNinjaString/constant/1-128       	584600864	         2.004 ns/op	       0 B/op	       0 allocs/op
Benchmark_parseNinjaString/constant/10-128      	19274581	        64.84 ns/op	      16 B/op	       1 allocs/op
Benchmark_parseNinjaString/constant/100-128     	 9017640	       127.6 ns/op	     112 B/op	       1 allocs/op
Benchmark_parseNinjaString/constant/1000-128    	 2630797	       453.0 ns/op	    1024 B/op	       1 allocs/op
Benchmark_parseNinjaString/variable/1-128       	 3460422	       347.0 ns/op	     136 B/op	       4 allocs/op
Benchmark_parseNinjaString/variable/10-128      	 2103404	       519.9 ns/op	     152 B/op	       7 allocs/op
Benchmark_parseNinjaString/variable/100-128     	 1315778	       906.5 ns/op	     312 B/op	       7 allocs/op
Benchmark_parseNinjaString/variable/1000-128    	  354812	      3284 ns/op	    1544 B/op	       7 allocs/op
Benchmark_parseNinjaString/variables/1-128      	 3386868	       361.5 ns/op	     136 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/2-128      	 2675594	       456.9 ns/op	     160 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/3-128      	 2344670	       520.0 ns/op	     192 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/4-128      	 1919482	       648.1 ns/op	     208 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/5-128      	 1560556	       723.9 ns/op	     240 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/10-128     	 1000000	      1169 ns/op	     352 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/100-128    	  116738	     10168 ns/op	    2800 B/op	       4 allocs/op
Benchmark_parseNinjaString/variables/1000-128   	   10000	    105646 ns/op	   24688 B/op	       4 allocs/op

Bug: 286423944
Test: ninja_strings_test.go
Test: out/soong/build*.ninja is the same before and after this change
Change-Id: I1ecffbaccb0d0469a41fa31255c1b17311e01687
2023-06-15 21:53:56 -07:00
Chris Parsons
1b5e9aba43 Make skip-cloning blueprint option public
This allows non-test integrations to set this mode.

Test: Treehugger
Change-Id: I4c69be30bd9ac917113ee8e4d0425dd40753f66f
2023-06-13 01:25:06 +00:00
Liz Kammer
6f42cdc60f Add description to json module actions
Test: m json-module-graph and spot check
Change-Id: Ia825cd6910d42ce7be34200f5d4a669f2d675727
2023-06-08 10:01:06 -04:00
Treehugger Robot
2259132d96 Merge "Add a function to check missing deps" 2023-05-23 16:07:01 +00:00
LaMont Jones
12ccb17d4e context: Allow running some singletons in parallel.
Many of the singletons are trivial and can be run in parallel, improving
the performance during analysis.

Bug: 281536768
Test: manual, presubmit
Change-Id: Ia63e4bc42a68e65dfa800e770982fa5826355fad
2023-05-19 19:03:08 +00:00
LaMont Jones
ff04c33f2a live_tracker: wrap add functions with mutex
There is already a mutex for the structure, but several add functions do
not use the mutex to protect access.

Bug: 281536768
Test: manual, presubmits
Change-Id: I34e95d8722b8e5fb753c099d7aedee5c4734715d
2023-05-19 18:01:16 +00:00
Liz Kammer
6af6061b12 Add a function to check missing deps
Test: go test Soong tests
Change-Id: If24e52b51a00bc45d6b6a2212d4e045bb36c598c
2023-05-18 09:52:46 -04:00
William Escande
a74d05b939 bpfmt: Test comment line while sorting arrays
Test: bpfmt test
Change-Id: I4a11ac200a7b10d3abb76db78f4be2ef772763cf
2023-05-17 15:17:49 -07:00
David Duarte
65aa5a505f bpfmt: Preserve line of comment when sorting arrays
When given as an input
```
array: [
    "a",
    // Unicorn
    "b",
]
```
bpfmt with `-s` option was outputing
```
array: [
    "a", // Unicorn
    "b",
]
```

Which is not ideal because the comment was targetting
the second value and now it seems to be targetting the
first one

This patch preserve the difference in line number between
the value and the comment to give the same output when
```
array: [
    "a",
    // Unicorn
    "b",
]
```
is given as input

Test: Manual tests + run bpfmt -w -s on packages/modules/Bluetooth
Change-Id: I2b58f20da463bea77c22a4e6978aa9beb4b4fcc8
2023-05-17 13:36:13 -07:00
Jeongik Cha
2621c909e5 Replace GetOutputsFromModuleNames with GetWeightedOutputsFromPredicate
Bug: 273282046
Test: m --ninja_weight_source=ninja_log
Change-Id: I3f35406a7334f737ea010d5453c85e5f2d993708
2023-04-15 00:57:28 +09:00
Steven Moreland
aefc0a9b9b Merge "Add name hint to blueprint." 2023-04-11 20:26:04 +00:00
Steven Moreland
d457f11884 Add name hint to blueprint.
Bug: N/A
Test: updated
Change-Id: Iac9218aa7621dd6223dc26a9f2ebec5d68211328
2023-04-10 20:21:15 +00:00
Treehugger Robot
a85a30c611 Merge "Add variant name to module info" 2023-04-07 17:15:06 +00:00
Liz Kammer
6717f89de4 Add variant name to module info
Without this, we cannot correctly join action and module graph
information as we cannot distinguish variants on action graph.

Test: m json-module-graph
Change-Id: If7379845fc865d8a150f3995df6bf601456a71c3
2023-04-07 09:11:30 -04:00
Treehugger Robot
44baecd513 Merge "Add a stronger wording to don't use ModuleFromName" 2023-04-05 04:03:15 +00:00
Liz Kammer
c9df6d7964 Add a stronger wording to don't use ModuleFromName
Test: n/a
Change-Id: I42de1e46a50a103fca0d6f60a0748f5cc107bac7
2023-04-04 11:56:55 -04:00
Sam Delmerico
48020c8daa improve error handling for SourceRootDirs
Previously, warnings about missing modules were printed directly to
stderr. Instead we can pass these messages along as errors using the
existing pathways.

Bug: 269457150
Test: m nothing
Test: add -external to PRODUCT_SOURCE_ROOT_DIRS and observe missing
  module errors
Change-Id: Ib6624b9edbd103247f7f6e6d4c3030f1959aa56c
2023-03-30 14:19:39 -04:00
Treehugger Robot
82aa0ffb51 Merge "ignore bp files from PRODUCT_SOURCE_ROOT_DIRS" 2023-03-29 17:04:37 +00:00
Sam Delmerico
08bd504b62 ignore bp files from PRODUCT_SOURCE_ROOT_DIRS
Soong analyzes the entire source tree even though not every lunch target
needs to know about every module. For example, OEM sources can be
ignored for cuttlefish products. This functionality allows blueprint to
ignore a list of undesired directories.

Bug: 269457150
Change-Id: Icbbf8f3b66813ad639a7ebd27b1a3ec153cbf269
2023-03-27 14:43:07 -04:00
Jeongik Cha
4589dfd812 Add GetOutputsFromModuleNames in Context
To build ninja hint including output path from module name

Test: m --ninja_weight_source=soong
Bug: 273282046
Change-Id: Ibb94c2c4efef4a6dedc973cbb90625231845d42e
2023-03-23 11:17:11 +09:00
Cole Faust
bef8688e45 Optimize and simplify order-only dep deduplication
This reduces the extract_phonys (now deduplicate_order_only_deps)
event's time from ~1.9s to ~1.5s on aosp-master, and from ~5.3s to ~4.6s
on internal master.

It does so by making keyForPhonyCandidate be based on a hash instead
of joining all the deps together. Having a hash allows us to also use
it as the name of the phony target, which simplifies the code a little.

Bug: None (original cl introducing extractPhonys also didn't have a bug)
Test: go tests
Change-Id: I2ff6e4614f19ccbfe99112ea7ae1ea33cd1df21b
2023-03-16 16:43:55 -07:00
Cole Faust
ef778a12ac Merge "Fix error messages not printing names" am: 2ed895448b
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2477772

Change-Id: I24c36250b68c7b69363d450e1016eac82f2fc3ee
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-03-09 00:29:28 +00:00
Cole Faust
2ed895448b Merge "Fix error messages not printing names" 2023-03-08 23:57:31 +00:00
Cole Faust
ff87a5128b Fix error messages not printing names
Bug: 271424349
Test: Presubmits
Change-Id: I8dd6ab7109c29bd8a03fd2f898eebe1a50a28914
2023-03-08 11:53:24 -08:00
Usta Shrestha
80d4d41953 Use phony ninja outputs to reduce file-size am: 2bae13b095
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2449271

Change-Id: Id6d6187eef662ab628c268caa9b26391df075da5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-03-07 16:30:56 +00:00
Usta Shrestha
2bae13b095 Use phony ninja outputs to reduce file-size
1. scan if any set of order-only deps are repeated
  2. if so extract them as a phony output to be shared

Test: m libc
Bug: NA
Change-Id: I0689111b97bbbd1f3b26650e8ae2e0a4ffb5085e
2023-03-07 01:39:27 -05:00
Kevin Dagostino
0ce4909fd2 Enable parallelCompile since golang is now >= 1.9 am: ad7bcc7b50
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2469723

Change-Id: If58146bc8c54081ee318362f33a79db8cfbd51f5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-03-06 18:00:20 +00:00
Kevin Dagostino
ad7bcc7b50 Enable parallelCompile since golang is now >= 1.9
Test: m nothing
Change-Id: I38cdd83ca9b17263155433abb65fb4f97b5ec70b
2023-03-03 21:57:29 +00:00
Usta Shrestha
35136c7d74 cosmetic: readability am: 4cff07db25
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2449269

Change-Id: I90f60e52e43528e26681278244bccb8667675444
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-03-02 05:07:10 +00:00
Usta Shrestha
66a29aefa0 Add unit test for EventHandler am: 3e334cfed2
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2458548

Change-Id: I18705ae924814febb401af5e447920ea507bcaf0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-02-28 19:35:06 +00:00
Usta Shrestha
4cff07db25 cosmetic: readability
Test: run `m nothing`
Bug: NA
Change-Id: Id58635cc949f07e5263ad67b0e78c66d19abba40
2023-02-27 11:41:51 -05:00
Usta Shrestha
3e334cfed2 Add unit test for EventHandler
Test: the added file
Bug: NA
Change-Id: Id50105e84585348ce8540f52407224daeb8eb0d4
2023-02-27 11:41:51 -05:00
Treehugger Robot
a50172080b Merge "cosmetic: use _ for unused args" am: 1821351760
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2449270

Change-Id: I57324caea1736d8b4c6e95c2956caacd5b53f1c7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-02-23 19:46:21 +00:00
Usta Shrestha
2833cebfa2 cosmetic: readability am: ce85ecb176
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2444579

Change-Id: I4772e567093cace606edcdb6fe486dacbd92ed4b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-02-23 19:14:04 +00:00
Treehugger Robot
1821351760 Merge "cosmetic: use _ for unused args" 2023-02-23 16:21:18 +00:00
Usta Shrestha
7f3c51ca43 cosmetic: use _ for unused args
Test: run `m nothing`
Bug: NA
Change-Id: Idfdb0d4121244e25847822114a2d12c6bb18ebd1
2023-02-23 02:28:12 +00:00
Usta Shrestha
ce85ecb176 cosmetic: readability
Test: run `m nothing` and `m nothing --empty_ninja_file`
Bug: NA
Change-Id: I6fd81667ea2d636139ae38bc36315f8710b72c25
2023-02-23 02:27:26 +00:00
Sam Delmerico
112f8ce34f apply gofmt am: 26e44b7b78
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2448682

Change-Id: I9627ededb4270842ccc5f205b720c002c30c52a5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-02-22 15:43:22 +00:00
Sam Delmerico
26e44b7b78 apply gofmt
Change-Id: I2416e246b3d8485a6b7810b998cff2f45f6a0494
2023-02-21 15:11:20 -05:00
Liz Kammer
01fb1d4c41 Add event handler for each mutator am: a988f08000
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2432532

Change-Id: I977d86f07f9d68534e2f1714379e0882d74b8b48
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-02-14 19:53:24 +00:00
Liz Kammer
addb326e69 Add getter for EventHandler so its easier to mock am: 073f69d723
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2434332

Change-Id: I5623fa879897e896ba1762172bd0b1a0dc6addf7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-02-14 19:51:29 +00:00
Liz Kammer
a988f08000 Add event handler for each mutator
Collect additional metrics for individual mutators in order to
understand impact of individual mutators.

Test: m nothing
Change-Id: Ic3ecb1e79a79dd665c9f60d29f0dfd3732481c2d
2023-02-13 18:02:23 -05:00
Liz Kammer
073f69d723 Add getter for EventHandler so its easier to mock
Test: m nothing
Change-Id: Ied338a25f12404ddc88c3b3cb7d7f2ff9ade3aab
2023-02-13 18:02:22 -05:00
Chris Parsons
33d423ce03 Close ninja file descriptor am: 58a29728ea
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2428033

Change-Id: I47bb7ac1f2628b3aed73491d71ab0415edfe4654
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-02-09 17:45:29 +00:00
Chris Parsons
58a29728ea Close ninja file descriptor
With this close() missing, especially with large ninja files, soong paid
the runtime cost at arbitrary times during the rest of its execution (or
during process cleanup).

Test: Manual runs of `m nothing` and verifying timing metrics
Change-Id: Ibdfbf7371cfc4c58c485e76f96b8e9b9ad900972
2023-02-08 23:33:56 -05:00
Cole Faust
c03d43564a Show the ninja string that failed to parse in errors am: c5baf11a2d
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2393625

Change-Id: Ie6c2eac046adda1bd4a2a57c33658fdc8c6b01a8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-01-20 00:21:49 +00:00
Cole Faust
c5baf11a2d Show the ninja string that failed to parse in errors
So that it's easier to debug what the problem is.

Test: m nothing
Change-Id: I97e81f98f0365e981d34c6b8bec8528de1b7e514
2023-01-19 14:23:04 -08:00
Treehugger Robot
025144564c Merge changes I516c984b,I2b3354de am: a405cf7f6a am: a82dd5f183
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2364231

Change-Id: I46274bfec11afcdb580f7fb1839862c29130df06
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-12-21 16:40:18 +00:00
Treehugger Robot
a82dd5f183 Merge changes I516c984b,I2b3354de am: a405cf7f6a
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/2364231

Change-Id: I29db8b42c0449ee8b2510ca4d5f549e2665ebeb0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-12-21 16:06:25 +00:00