summaryrefslogtreecommitdiff
path: root/cc
diff options
context:
space:
mode:
author Cole Faust <colefaust@google.com> 2025-03-06 12:45:53 -0800
committer Cole Faust <colefaust@google.com> 2025-03-06 12:45:53 -0800
commit7d34512284783cceb91ae515f5d1c035c1e941fb (patch)
tree3cfba61cc3eec959806a9c1fe518aa495b01cdb1 /cc
parent30c64f436597dace49ed00c668a6a70a65a860cc (diff)
Allow genrules to depend on tools with symlinks
Symlink PackagingSpecs don't have a sourcePath, so it crashes soong if you try to add a tool with symlinks to a genrule. Make RuleBuilder ignore symlink packaging specs. We could make RuleBuilder add them to the sandbox later if needed. Bug: 395988167 Test: go test Change-Id: I4dd2bdec6ff6e94f5014889e4a9378ae4c20f9e3
Diffstat (limited to 'cc')
-rw-r--r--cc/genrule_test.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/cc/genrule_test.go b/cc/genrule_test.go
index 438eb9880..4e700a2cd 100644
--- a/cc/genrule_test.go
+++ b/cc/genrule_test.go
@@ -17,6 +17,7 @@ package cc
import (
"reflect"
"slices"
+ "strings"
"testing"
"android/soong/android"
@@ -254,3 +255,42 @@ func TestMultilibGenruleOut(t *testing.T) {
gen_64bit,
)
}
+
+// Test that a genrule can depend on a tool with symlinks. The symlinks are ignored, but
+// at least it doesn't cause errors.
+func TestGenruleToolWithSymlinks(t *testing.T) {
+ bp := `
+ genrule {
+ name: "gen",
+ tools: ["tool_with_symlinks"],
+ cmd: "$(location tool_with_symlinks) $(in) $(out)",
+ out: ["out"],
+ }
+
+ cc_binary_host {
+ name: "tool_with_symlinks",
+ symlinks: ["symlink1", "symlink2"],
+ }
+ `
+ ctx := PrepareForIntegrationTestWithCc.
+ ExtendWithErrorHandler(android.FixtureExpectsNoErrors).
+ RunTestWithBp(t, bp)
+ gen := ctx.ModuleForTests(t, "gen", "").Output("out")
+ toolFound := false
+ symlinkFound := false
+ for _, dep := range gen.RuleParams.CommandDeps {
+ if strings.HasSuffix(dep, "/tool_with_symlinks") {
+ toolFound = true
+ }
+ if strings.HasSuffix(dep, "/symlink1") || strings.HasSuffix(dep, "/symlink2") {
+ symlinkFound = true
+ }
+ }
+ if !toolFound {
+ t.Errorf("Tool not found")
+ }
+ // We may want to change genrules to include symlinks later
+ if symlinkFound {
+ t.Errorf("Symlinks found")
+ }
+}