Commit graph

93250 commits

Author SHA1 Message Date
Greg Kaiser
e97c59a64f Merge "Remove TARGET_VNDK_USE_CORE_VARIANT" into main 2024-02-13 21:50:19 +00:00
Nikita Ioffe
3ce74d19b0 Remove unused PRODUCT_AVF_KERNEL_MODULES_ENABLED
Test: presubmit
Change-Id: I5742c94376e8d31ff1fe74ef6da6e5ae67e9ef5c
2024-02-13 19:16:23 +00:00
Nikita Ioffe
19b5d66747 Propagate RELEASE_AVF_MICRODROID_KERNEL_VERSION to Soong
Bug: 298011555
Test: builds
Change-Id: I69a895318ea13fb1bee7bf0aec8893672b7bdf49
2024-02-13 19:13:04 +00:00
Ivan Lozano
4304694312 Revert "aconfig: remove libcxx dependency for now"
This reverts commit 248510a659.

Reason for revert: aosp/2959366

Change-Id: Ib3a0e584f24f2a3ab51ca0b48e4c4897ed0d8174
Bug: 324826914
Test: SANITIZE_HOST=address m aconfig
2024-02-13 19:02:06 +00:00
Greg Kaiser
c26ea1995a Remove TARGET_VNDK_USE_CORE_VARIANT
We introduced this in
https://android-review.googlesource.com/c/platform/build/+/1087517
but now with VNDK deprecated, this is no longer in use so we
remove it for clarity.

Bug: 319529309
Test:  TreeHugger skipped running mokey_go32 boot test because there were no changes in the artifacts.  Additionally, built a Go device, booted, and /linkerconfig/ld.config.txt is the same and things run as normal.
Change-Id: Ifba30d7cc30c641f265abe52ed2cf7c02660a5ec
2024-02-13 15:52:21 +00:00
Jihoon Kang
9c1450e0d2 Modify dependencies of fake_device_config
This change modifes the dependencies of fake_device_config by setting
the sdk_version to none instead of core_current, and setting the
appropriate system_modules in order to resolve circular dependencies.

Test: m fake_device_config && BUILD_FROM_SOURCE_STUB m fake_device_config
Change-Id: I497e2db9ea3456057a1e3f5c624cbd2042da6837
2024-02-13 06:54:49 +00:00
Treehugger Robot
9b3d6f91aa Merge "Move setting default BOARD_VNDK_VERSION value" into main 2024-02-13 06:46:37 +00:00
Kiyoung Kim
09aaa26c06 Move setting default BOARD_VNDK_VERSION value
Current BOARD_VNDK_VERSION is being set from config.mk, but this is
before build system loads release config and checks if VNDK is
deprecated or not. Move this to envsetup so it can set up
BOARD_VNDK_VERSION only when VNDK is not deprecated with flag.

Bug: 324976878
Test: mainline release target build succeeded

Change-Id: I490cc431038f5cebc40d03c98d2666eaba906664
2024-02-13 13:40:40 +09:00
Jihoon Kang
7d2c5ff02d Merge "Add environment variable UNBUNDLED_BUILD_TARGET_SDK_WITH_DESSERT_SHA" into main 2024-02-13 04:27:21 +00:00
Inseob Kim
5fd1645f11 Merge "Revert^2 "Use vFRC version as-is for ToT sepolicy version"" into main 2024-02-13 04:02:36 +00:00
Inseob Kim
4e72d5e4da Revert^2 "Use vFRC version as-is for ToT sepolicy version"
fb3a97fc7d

Change-Id: I13612dee1ebc6aabbd3bc46fb4c30568dc23a6da
2024-02-13 02:20:00 +00:00
Dennis Shen
fc14608190 Merge "aconfig: remove libcxx dependency for now" into main 2024-02-13 01:30:49 +00:00
Kiyoung Kim
1d952f82a5 Merge "Do not set BOARD_VNDK_VERSION and PLATFORM_VNDK_VERSION" into main 2024-02-13 00:51:53 +00:00
Treehugger Robot
1348d34e4c Merge "envsetup: fix path to build/bazel/bin tools" into main 2024-02-12 20:20:37 +00:00
Dennis Shen
248510a659 aconfig: remove libcxx dependency for now
Contenxt: b/324826914, libcxx is the culprit of the linking failure.
Remove libcxx dependency for now.

Bug: b/324826914
Test: atest aconfig_storage_file.test
Change-Id: I55b1a41efbf4486715f465a8d56a4e2e6ab0254a
2024-02-12 20:09:51 +00:00
LaMont Jones
e8a3be2ea2 envsetup: fix path to build/bazel/bin tools
Bug: None
Test: manual
Change-Id: If0124eb5f5d85064e0063403cca477b98d42a922
2024-02-12 09:55:41 -08:00
Michael Merg
7fa165b044 Merge "Create IDE query script" into main 2024-02-12 16:28:58 +00:00
Michael Merg
6bafd75d51 Create IDE query script
This will be the integration point to provide build artifacts to Cider G.

NOTE FOR REVIEWERS - original patch and result patch are not identical.
PLEASE REVIEW CAREFULLY.
Diffs between the patches:
 	files := flag.Args()
> -
> -			if prev, ok := modules[f]; ok && !strings.HasSuffix(prev.Name, ".impl") {
> -				log.Printf("File %q found in module %q but is already part of module %q", f, m.Name, prev.Name)
> +			if modules[f] != nil {
> +				log.Printf("File %q found in module %q but is already covered by module %q", f, m.Name, modules[f].Name)
> -		var genFiles []*pb.GeneratedFile
> +		var generated []*pb.GeneratedFile
> -				// Note: Contents will be filled below.
> -				genFiles = append(genFiles, &pb.GeneratedFile{Path: relPath})
> +				contents, err := os.ReadFile(d)
> +				if err != nil {
> +					fmt.Printf("Generated file %q not found - will be skipped.\n", d)
> +					continue
> +				}
> +
> +				generated = append(generated, &pb.GeneratedFile{
> +					Path:     relPath,
> +					Contents: contents,
> +				})
> -		file.Generated = genFiles
> +		file.Generated = generated
> -	for _, s := range sources {
> -		for _, g := range s.GetGenerated() {
> -			contents, err := os.ReadFile(path.Join(env.OutDir, g.GetPath()))
> -			if err != nil {
> -				fmt.Printf("Failed to read generated file %q: %v. File contents will be missing.\n", g.GetPath(), err)
> -				continue
> -			}
> -			g.Contents = contents
> -		}
> -	}
> -
> -		if strings.HasSuffix(name, "-jarjar") {
> +		if strings.HasSuffix(name, "-jarjar") || strings.HasSuffix(name, ".impl") {

Original patch:
 diff --git a/tools/ide_query/ide_query.go b/tools/ide_query/ide_query.go
old mode 100644
new mode 100644
--- a/tools/ide_query/ide_query.go
+++ b/tools/ide_query/ide_query.go
@@ -1,3 +1,5 @@
+// Binary ide_query generates and analyzes build artifacts.
+// The produced result can be consumed by IDEs to provide language features.
 package main

 import (
@@ -34,10 +36,10 @@

 var _ flag.Value = (*LunchTarget)(nil)

-// Get implements flag.Value.
-func (l *LunchTarget) Get() any {
-	return l
-}
+// // Get implements flag.Value.
+// func (l *LunchTarget) Get() any {
+// 	return l
+// }

 // Set implements flag.Value.
 func (l *LunchTarget) Set(s string) error {
@@ -64,13 +66,12 @@
 	env.RepoDir = os.Getenv("TOP")
 	flag.Var(&env.LunchTarget, "lunch_target", "The lunch target to query")
 	flag.Parse()
-	if flag.NArg() == 0 {
+	files := flag.Args()
+	if len(files) == 0 {
 		fmt.Println("No files provided.")
 		os.Exit(1)
 		return
 	}
-
-	files := flag.Args()

 	ctx := context.Background()
 	javaDepsPath := pa
[[[Original patch trimmed due to size. Decoded string size: 2916. Decoded string SHA1: 5d8fd4a92cc403da51c9ddb8442da2e391e6fcb1.]]]

Result patch:
 diff --git a/tools/ide_query/ide_query.go b/tools/ide_query/ide_query.go
index 2e76738..0fdb6de 100644
--- a/tools/ide_query/ide_query.go
+++ b/tools/ide_query/ide_query.go
@@ -1,3 +1,5 @@
+// Binary ide_query generates and analyzes build artifacts.
+// The produced result can be consumed by IDEs to provide language features.
 package main

 import (
@@ -34,10 +36,10 @@

 var _ flag.Value = (*LunchTarget)(nil)

-// Get implements flag.Value.
-func (l *LunchTarget) Get() any {
-	return l
-}
+// // Get implements flag.Value.
+// func (l *LunchTarget) Get() any {
+// 	return l
+// }

 // Set implements flag.Value.
 func (l *LunchTarget) Set(s string) error {
@@ -64,14 +66,13 @@
 	env.RepoDir = os.Getenv("TOP")
 	flag.Var(&env.LunchTarget, "lunch_target", "The lunch target to query")
 	flag.Parse()
-	if flag.NArg() == 0 {
+	files := flag.Args()
+	if len(files) == 0 {
 		fmt.Println("No files provided.")
 		os.Exit(1)
 		return
 	}

-	files := flag.Args()
-
 	ctx := context.Background()
 	javaDepsPath := path
[[[Result patch trimmed due to size. Decoded string size: 3022. Decoded string SHA1: a8824749eafbbb8d09c4e95fe491a16e3ea82569.]]]

NOTE FOR REVIEWERS - original patch and result patch are not identical.
PLEASE REVIEW CAREFULLY.
Diffs between the patches:
 	var javaFiles []string
> +	for _, f := range files {
> +		switch {
> +		case strings.HasSuffix(f, ".java") || strings.HasSuffix(f, ".kt"):
> +			javaFiles = append(javaFiles, f)
> +		default:
> +			log.Printf("File %q is supported - will be skipped.", f)
> +		}
> +	}
> +
> -	modules := make(map[string]*javaModule) // file path -> module
> -	for _, f := range files {
> +	fileToModule := make(map[string]*javaModule) // file path -> module
> +	for _, f := range javaFiles {
> -			if modules[f] != nil {
> -				log.Printf("File %q found in module %q but is already covered by module %q", f, m.Name, modules[f].Name)
> +			if fileToModule[f] != nil {
> +				// TODO(michaelmerg): Handle the case where a file is covered by multiple modules.
> +				log.Printf("File %q found in module %q but is already covered by module %q", f, m.Name, fileToModule[f].Name)
> -			modules[f] = m
> +			fileToModule[f] = m
> -	for _, m := range modules {
> +	for _, m := range fileToModule {
> +	type depsAndGenerated struct {
> +		Deps      []string
> +		Generated []*pb.GeneratedFile
> +	}
> +	moduleToDeps := make(map[string]*depsAndGenerated)
> -		m := modules[f]
> +		m := fileToModule[f]
> +		file.Status = &pb.Status{Code: pb.Status_OK}
> +		if moduleToDeps[m.Name] != nil {
> +			file.Generated = moduleToDeps[m.Name].Generated
> +			file.Deps = moduleToDeps[m.Name].Deps
> +			continue
> +		}
> +
> -
> +		moduleToDeps[m.Name] = &depsAndGenerated{deps, generated}
> -		file.Status = &pb.Status{Code: pb.Status_OK}

Original patch:
 diff --git a/tools/ide_query/ide_query.go b/tools/ide_query/ide_query.go
old mode 100644
new mode 100644
--- a/tools/ide_query/ide_query.go
+++ b/tools/ide_query/ide_query.go
@@ -72,6 +72,16 @@
 		os.Exit(1)
 		return
 	}
+
+	var javaFiles []string
+	for _, f := range files {
+		switch {
+		case strings.HasSuffix(f, ".java") || strings.HasSuffix(f, ".kt"):
+			javaFiles = append(javaFiles, f)
+		default:
+			log.Printf("File %q is supported - will be skipped.", f)
+		}
+	}

 	ctx := context.Background()
 	javaDepsPath := path.Join(env.RepoDir, env.OutDir, "soong/module_bp_java_deps.json")
@@ -85,22 +95,23 @@
 		log.Fatalf("Failed to load java modules: %v", err)
 	}

-	modules := make(map[string]*javaModule) // file path -> module
-	for _, f := range files {
+	fileToModule := make(map[string]*javaModule) // file path -> module
+	for _, f := range javaFiles {
 		for _, m := range javaModules {
 			if !slices.Contains(m.Srcs, f) {
 				continue
 			}
-			if modules[f] != nil {
-				log.Printf("File %q found in
[[[Original patch trimmed due to size. Decoded string size: 2629. Decoded string SHA1: 4517ba713fdb898ba9d77c4acbe934c08a2d9fe0.]]]

Result patch:
 diff --git a/tools/ide_query/ide_query.go b/tools/ide_query/ide_query.go
index 0fdb6de..7335875 100644
--- a/tools/ide_query/ide_query.go
+++ b/tools/ide_query/ide_query.go
@@ -73,6 +73,16 @@
 		return
 	}

+	var javaFiles []string
+	for _, f := range files {
+		switch {
+		case strings.HasSuffix(f, ".java") || strings.HasSuffix(f, ".kt"):
+			javaFiles = append(javaFiles, f)
+		default:
+			log.Printf("File %q is supported - will be skipped.", f)
+		}
+	}
+
 	ctx := context.Background()
 	javaDepsPath := path.Join(env.RepoDir, env.OutDir, "soong/module_bp_java_deps.json")
 	// TODO(michaelmerg): Figure out if module_bp_java_deps.json is outdated.
@@ -85,22 +95,23 @@
 		log.Fatalf("Failed to load java modules: %v", err)
 	}

-	modules := make(map[string]*javaModule) // file path -> module
-	for _, f := range files {
+	fileToModule := make(map[string]*javaModule) // file path -> module
+	for _, f := range javaFiles {
 		for _, m := range javaModules {
 			if !slices.Contains(m.Srcs, f) {
 				continue
 			}

[[[Result patch trimmed due to size. Decoded string size: 2717. Decoded string SHA1: 5e5223251ebdc548258bc27daf3528d662c39410.]]]

Change-Id: Ibe5d386399affd2951206bb5a714972e0e2fee92
2024-02-12 13:57:59 +00:00
Stephen Hines
68a4bdb3eb Test modules should always be last
```
error: items after a test module
   --> build/make/tools/aconfig/aconfig/src/test.rs:18:1
    |
18  | pub mod test_utils {
    | ^^^^^^^^^^^^^^^^^^
...
345 | pub use test_utils::*;
    |         ^^^^^^^^^^
    |
    = help: for further information visit
https://rust-lang.github.io/rust-clippy/master/index.html#items_after_test_module
    = note: `-D clippy::items-after-test-module` implied by `-D
warnings`
    = help: to override `-D warnings` add
`#[allow(clippy::items_after_test_module)]`
```

Bug: http://b/321303117
Test: toolchain/android_rust/test_compiler.py --prebuilt-path dist/rust-dev.tar.xz --target aosp_cf_x86_64_phone --all-rust
Change-Id: I2c95af50a5d389fc37e1abc677e9b4d34b6562b4
2024-02-09 16:46:48 -08:00
Treehugger Robot
6b11584633 Merge "proguard: add keep rules for @TestApi" into main 2024-02-09 22:15:07 +00:00
Dennis Shen
8b5244c841 aconfig: aconfig storage cpp api on device integration test
Bug: 321077378
Test: atest aconfig_storage.test.cpp
Change-Id: I99532e9288f411d6025868341883fdbef600cfd7
2024-02-09 21:10:43 +00:00
Dennis Shen
91ba7d56ea Merge "aconfig: add storage api rust test on the host" into main 2024-02-09 21:00:16 +00:00
Dennis Shen
2ea228ef70 Merge "aosp: reenable the filtered out test point in atest" into main 2024-02-09 20:09:28 +00:00
Dennis Shen
997e65779a Merge "aconfig: create c++ interlop from rust flag apis" into main 2024-02-09 16:53:53 +00:00
Dennis Shen
4f6f12841c aosp: reenable the filtered out test point in atest
A more systematic fix. Now for each test point, we create temp file
copies at temp dir and explicitly set the file permission of these temp
files. This should bypass the issue that test build artifact file
permission are not guaranteed. Because we will generate these test
storage files on the fly at run time.

Bug: b/324459233
Test: atest aconfig_storage_file.test
Change-Id: Iaa7083be6cc49421090ab4c74e54c4bcf8e35801
2024-02-09 16:51:17 +00:00
Dennis Shen
213dbb71a5 aconfig: add storage api rust test on the host
Bug: 321077378
Test: atest aconfig_storage.test.rust
Change-Id: I3301834909441dea471c0d4b1aae0a117af7dc29
2024-02-09 15:54:22 +00:00
Dennis Shen
0b0f11fecb Merge "aconfig: turn off the offending test point" into main 2024-02-09 15:07:21 +00:00
Dennis Shen
2f0929d867 aconfig: turn off the offending test point
Bug: b/324459233
Test: atest aconfig_storage_file.test and the test point is no longer executed.
Change-Id: I34b5da7a1b152f213926cc2e1f9511785e9d384f
2024-02-09 12:48:52 +00:00
Dennis Shen
618e66a28b aconfig: create c++ interlop from rust flag apis
Using cxx to generate c++ code for the apis that are marked to exported
in the ffi mod in src/lib.rs. For generated code simplicity, it returns
a new flag struct for each rust api.

Create a cc_library to wrap around generated c++ code. See the created
aconfig_storage.hpp for the exported header. Note there is a nested
aconfig_storage::test_only_api namespace, where we place test only apis.
The production apis are placed under aconfig_storage namespace.

Bug: 321077378
Test: m libaconfig_storage_cc
Change-Id: I73a85a26d3749908abc461362f5e0bfc3f85bf4d
2024-02-09 02:51:08 +00:00
Yifei Zhang
f0581e65be proguard: add keep rules for @TestApi
Test: build
Bug: 319319578
Change-Id: I739a80c66de57d0ce68624246613722edf2d106f
2024-02-08 16:15:56 -08:00
Makoto Onuki
af0a5d71cd Merge changes I8af63d1c,I10ceeae9 into main
* changes:
  Basic `ParcelFileDescriptor` on Ravenwood.
  Update XML template to reflect null device.
2024-02-08 23:40:51 +00:00
Treehugger Robot
9689e9007d Merge "Add the WebViewBootstrap module to the base system." into main 2024-02-08 22:17:07 +00:00
Treehugger Robot
1d0e62cd5d Merge "Add ravenwood test config template" into main 2024-02-08 21:21:48 +00:00
Jeff Sharkey
91412af6e2 Basic ParcelFileDescriptor on Ravenwood.
One of the final foundational building blocks, which wraps a Java
`FileDescriptor` object.  Since many of the existing APIs here offer
to work with "raw" int FD values, we need to reach "behind the
curtain" to read/write the internal value.  Thankfully `SharedSecrets`
already offers a way to gain access without requiring us to open
up the entire `java.io` area of the `java.base` module.

Bring along `android.util.CloseGuard` as a no-op wrapper.

Bug: 324417456
Test: atest CtsOsTestCasesRavenwood
Merged-in: I8af63d1c5a4bb2ef76bd43594a1072f2ca537d68
Change-Id: I8af63d1c5a4bb2ef76bd43594a1072f2ca537d68
2024-02-08 11:33:58 -08:00
Jeff Sharkey
4416313943 Update XML template to reflect null device.
Ravenwood doesn't need a device, so add a "null" filter so that
atest doesn't hang waiting for one.

Bug: 292141694
Test: atest-dev CtsOsTestCasesRavenwood CtsOsTestCases
Merged-in: I10ceeae92c7622ea44ecbc315e23babe8b36516a
Change-Id: I10ceeae92c7622ea44ecbc315e23babe8b36516a
2024-02-08 11:33:45 -08:00
Makoto Onuki
e406793f57 Add ravenwood test config template
Modeled after robolectric_test_config_template.xml

Bug: 292141694
Test: m nothing --no-skip-soong-tests
Test: m hoststubgen ravenwood-runtime tradefed atest && atest-dev HostStubGenTest-framework-test
Merged-in: I9ef906074df65c93d9e1a4b4998e6137196075ed
Change-Id: I9ef906074df65c93d9e1a4b4998e6137196075ed
2024-02-08 11:33:37 -08:00
Dennis Shen
e7fde3a86f Merge "aconfig: add top level flag read lib api" into main 2024-02-08 18:17:27 +00:00
Dennis Shen
1452104995 aconfig: add top level flag read lib api
1, update android build soong targets as now libmemmap2 has been
introduced to android code base.

2, add three public apis for package offset query, flag offset query,
and flag value query. These apis assume the stoarge location pb file is
at /metadata/aconfig/aconfig_storage.pb. This file will be created by
storage daemon. For testing purposes, we also expose impl version of
these apis that accept a custom storage location pb file.

Bug: 321077378
Test: atest aconfig_storage_file.test
Change-Id: I91b284e2dfcdb8ff3674d463ed1c13696d9ae020
2024-02-08 14:57:51 +00:00
Mitch Phillips
ce3cfdc17f Re-enable MTE stack on fullmte builds.
The new toolchain has been rolled, and so we can re-enable stack MTE
instrumentation.

Bug: 320448268
Bug: 292478827
Test: atest bionic-unit-tests bionic-unit-tests-static \
      CtsTaggingHostTestCases debuggerd_test CtsGwpAsanTestCases \
      gwp_asan_unittest CtsHostsideWebViewTests # on husky_fullmte
Change-Id: Ie238a015edba3c6ca2e1266cee9142b0d8927cc2
2024-02-08 14:56:19 +01:00
Ikjoon Jang
96b16f654d Merge "Revert "Use vFRC version as-is for ToT sepolicy version"" into main 2024-02-08 04:47:21 +00:00
Ikjoon Jang
fb3a97fc7d Revert "Use vFRC version as-is for ToT sepolicy version"
Revert submission 2952245-vfrc_as_tot_sepolicy

Reason for revert: DroidMonitor-triggered revert due to breakage https://android-build.corp.google.com/builds/quarterdeck?branch=git_main&target=mainline_modules_arm64-mainline-userdebug&lkgb=11421838&lkbb=11421957&fkbb=11421841, b/324335916

Reverted changes: /q/submissionid:2952245-vfrc_as_tot_sepolicy

Bug: 324335916
Change-Id: I573db8b1a7f7874e146eea1135594eb0f1b6658f
2024-02-08 02:53:55 +00:00
Jihoon Kang
c4500afd1b Add environment variable UNBUNDLED_BUILD_TARGET_SDK_WITH_DESSERT_SHA
UNBUNDLED_BUILD_TARGET_SDK_WITH_DESSERT_SHA enables user to specify
${codename}.${sha} as min_sdk_version and target_sdk_version in order to
support mainline train building into android build.

Test: TH
Bug: 295905124
Change-Id: I6c793bc83e88ec620ed5e2e87d0371bc2455cf1b
2024-02-08 01:46:28 +00:00
Inseob Kim
b9835251d1 Merge "Use vFRC version as-is for ToT sepolicy version" into main 2024-02-08 01:12:47 +00:00
Kiyoung Kim
1e14cdfd56 Do not set BOARD_VNDK_VERSION and PLATFORM_VNDK_VERSION
Do not set BOARD_VNDK_VERSION and PLATFORM_VNDK_VERSION if VNDK is
deprecated. BOARD_VNDK_VERSION and PLATFORM_VNDK_VERSION should not be
used once VNDK is deprecated with KEEP_VNDK=false

Bug: 316829758
Test: AOSP CF build succeeded
Change-Id: Iead60663bed3653e63e7a444a873cfaea50780b0
2024-02-07 21:07:23 +09:00
Richard Coles
a468160ee0 Add the WebViewBootstrap module to the base system.
When the flag is enabled, add the module to the base system.

Bug: 318717084
Test: build with/without flag
Change-Id: Ifd8c7cc85c711786f491a76d452ad1cac18b655b
2024-02-07 06:27:27 -05:00
Ziwei Zhang
a8de90ce4c Merge "Generate 2.0 config for Mobly test." into main 2024-02-07 07:38:39 +00:00
Dennis Song
150fbac783 Merge "Allow merging target files without framework ab_partitions.txt" into main 2024-02-07 03:00:00 +00:00
Dennis Song
bc7e0a9f25 Allow merging target files without framework ab_partitions.txt
Introduce a new option `--allow-partial-ab` in merge_target_files,
which allows merging a non-AB framework with an AB vendor.

The reason for adding this option is to support merging a real
device framework with a cuttlefish vendor. Cuttlefish enables AB
partition by default; however, some real devices do not.

Bug: 318326532
Test: merge_target_files
Test: atest --host releasetools_test
Change-Id: Iaebd06796153fe82fbf56e86fcc8c500b6d60771
2024-02-06 14:40:57 +00:00
Mårten Kongstad
0dc4e61753 Merge "aconfig: move all tests to presubmit" into main 2024-02-06 12:36:48 +00:00
Alice Ryhl
dc7efff9f6 Merge "Add kcmdlinectrl to base system" into main 2024-02-06 07:52:10 +00:00