
project build/soong/
diff --git a/ui/build/config.go b/ui/build/config.go
index 1d793ad..0e8db52 100644
--- a/ui/build/config.go
+++ b/ui/build/config.go
@@ -1835,6 +1835,9 @@ func (c *configImpl) KatiBin() string {
 }
 
 func (c *configImpl) NinjaBin() string {
+	if customNinja, ok := c.environ.Get("CUSTOM_NINJA_BIN"); ok && customNinja != "" {
+		return customNinja
+	}
 	binName := "ninja"
 	if c.UseABFS() {
 		binName = "ninjago"
diff --git a/ui/build/config_test.go b/ui/build/config_test.go
index 3837bf3..36f172e 100644
--- a/ui/build/config_test.go
+++ b/ui/build/config_test.go
@@ -1135,3 +1135,41 @@ func TestGetMetricsUploaderApp(t *testing.T) {
 		})
 	}
 }
+
+func TestConfigCustomNinjaBin(t *testing.T) {
+	testCases := []struct {
+		description string
+		env         []string
+		expected    string
+	}{
+		{
+			description: "No CUSTOM_NINJA_BIN env var",
+			env:         []string{},
+			expected:    "prebuilts/build-tools/linux-x86/bin/ninja",
+		},
+		{
+			description: "CUSTOM_NINJA_BIN env var set",
+			env:         []string{"CUSTOM_NINJA_BIN=/usr/bin/ninja"},
+			expected:    "/usr/bin/ninja",
+		},
+	}
+
+	for _, tc := range testCases {
+		t.Run(tc.description, func(t *testing.T) {
+			env := Environment(tc.env)
+			c := &configImpl{
+				environ: &env,
+			}
+			actual := c.NinjaBin()
+			if tc.expected == "/usr/bin/ninja" {
+				if actual != tc.expected {
+					t.Errorf("expected NinjaBin to be %q, got %q", tc.expected, actual)
+				}
+			} else {
+				if !strings.HasSuffix(actual, "bin/ninja") && !strings.HasSuffix(actual, "bin/ninjago") {
+					t.Errorf("expected NinjaBin to end with bin/ninja or bin/ninjago, got %q", actual)
+				}
+			}
+		})
+	}
+}
diff --git a/ui/build/ninja.go b/ui/build/ninja.go
index 2b31024..d977557 100644
--- a/ui/build/ninja.go
+++ b/ui/build/ninja.go
@@ -244,6 +244,7 @@ func runNinja(ctx Context, config Config, ninjaArgs []string) {
 			"BUILD_BROKEN_INCORRECT_PARTITION_IMAGES",
 			// Do not do reanalysis just because we changed ninja commands.
 			"SOONG_NINJA",
+			"CUSTOM_NINJA_BIN",
 			"SOONG_USE_N2",
 			"RUST_BACKTRACE",
 			"RUST_LOG",
diff --git a/ui/build/rbe.go b/ui/build/rbe.go
index 8f99b14..9f7a200 100644
--- a/ui/build/rbe.go
+++ b/ui/build/rbe.go
@@ -119,7 +119,7 @@ func startRBE(ctx Context, config Config) {
 	e := ctx.BeginTrace(metrics.RunSetupTool, "rbe_bootstrap")
 	defer e.End()
 
-	ctx.Status.Status("Starting rbe...")
+	ctx.Status.Status("Starting ninja...")
 
 	cmd := Command(ctx, config, e, "startRBE bootstrap", rbeCommand(ctx, config, bootstrapCmd))
 
@@ -132,7 +132,7 @@ func stopRBE(ctx Context, config Config) {
 	cmd := Command(ctx, config, nil, "stopRBE bootstrap", rbeCommand(ctx, config, bootstrapCmd), "-shutdown")
 	output, err := cmd.CombinedOutput()
 	if err != nil {
-		ctx.Fatalf("rbe bootstrap with shutdown failed with: %v\n%s\n", err, output)
+		ctx.Fatalf("soong bootstrap with shutdown failed with: %v\n%s\n", err, output)
 	}
 
 	if !config.Environment().IsEnvTrue("ANDROID_QUIET_BUILD") && len(output) > 0 {

project hardware/lineage/compat/
diff --git a/Android.bp b/Android.bp
index 5069d3a..529c628 100644
--- a/Android.bp
+++ b/Android.bp
@@ -634,6 +634,31 @@ cc_prebuilt_library_shared {
     compile_multilib: "both",
 }
 
+cc_prebuilt_library_shared {
+    name: "libtinyxml2-v36",
+    vendor: true,
+    strip: {
+        none: true,
+    },
+    shared_libs: [
+        "liblog",
+        "libc++",
+        "libc",
+        "libm",
+        "libdl",
+    ],
+    target: {
+        android_arm: {
+            srcs: ["vndk/v34/arm/libtinyxml2-v34.so"],
+        },
+        android_arm64: {
+            srcs: ["vndk/v34/arm64/libtinyxml2-v34.so"],
+        },
+    },
+    compile_multilib: "both",
+}
+
+
 cc_library_shared {
     name: "libcomparetf2_shim",
     srcs: ["libcomparetf2/comparetf2.c"],
diff --git a/vndk/v34/arm/libtinyxml2-v34.so b/vndk/v34/arm/libtinyxml2-v34.so
index 1b9f2bd..a802a70 100755
Binary files a/vndk/v34/arm/libtinyxml2-v34.so and b/vndk/v34/arm/libtinyxml2-v34.so differ
diff --git a/vndk/v34/arm64/libtinyxml2-v34.so b/vndk/v34/arm64/libtinyxml2-v34.so
index 7056625..90f0c52 100755
Binary files a/vndk/v34/arm64/libtinyxml2-v34.so and b/vndk/v34/arm64/libtinyxml2-v34.so differ

project prebuilts/build-tools/
diff --git a/path/darwin-x86/date b/path/darwin-x86/date
deleted file mode 120000
index feaf26c8..00000000
--- a/path/darwin-x86/date
+++ /dev/null
@@ -1 +0,0 @@
-../../darwin-x86/bin/toybox
\ No newline at end of file
diff --git a/path/darwin-x86/tar b/path/darwin-x86/tar
deleted file mode 120000
index feaf26c8..00000000
--- a/path/darwin-x86/tar
+++ /dev/null
@@ -1 +0,0 @@
-../../darwin-x86/bin/toybox
\ No newline at end of file
diff --git a/path/linux-arm64/date b/path/linux-arm64/date
deleted file mode 120000
index 2f4bf7a7..00000000
--- a/path/linux-arm64/date
+++ /dev/null
@@ -1 +0,0 @@
-../../linux-arm64/bin/toybox
\ No newline at end of file
diff --git a/path/linux-arm64/tar b/path/linux-arm64/tar
deleted file mode 120000
index 2f4bf7a7..00000000
--- a/path/linux-arm64/tar
+++ /dev/null
@@ -1 +0,0 @@
-../../linux-arm64/bin/toybox
\ No newline at end of file
diff --git a/path/linux-x86/date b/path/linux-x86/date
deleted file mode 120000
index c6b4b1f8..00000000
--- a/path/linux-x86/date
+++ /dev/null
@@ -1 +0,0 @@
-../../linux-x86/bin/toybox
\ No newline at end of file
diff --git a/path/linux-x86/tar b/path/linux-x86/tar
deleted file mode 120000
index c6b4b1f8..00000000
--- a/path/linux-x86/tar
+++ /dev/null
@@ -1 +0,0 @@
-../../linux-x86/bin/toybox
\ No newline at end of file
