diff options
author | 2021-03-25 09:26:07 +0100 | |
---|---|---|
committer | 2021-03-25 09:59:49 +0100 | |
commit | e8b0ee73f4c2545aa0597a270cf6c56fdb60b1ab (patch) | |
tree | 25a74b647725038762e9b41b03f3241e0ec9c836 | |
parent | a1063c09f6f47b68d946ff61cef71692b19d48e5 (diff) |
rust: Add features list to rust_project.json
Bug: 183679729
Test: SOONG_GEN_RUST_PROJECT=1 m nothing
Test: manually check v1 feature resolution for libprofcollectd
Change-Id: Ib59b63372865f7f4545fe327e92d1642d76ce9c9
-rw-r--r-- | rust/project_json.go | 8 | ||||
-rw-r--r-- | rust/project_json_test.go | 36 |
2 files changed, 42 insertions, 2 deletions
diff --git a/rust/project_json.go b/rust/project_json.go index 8d3d250ce..c28bc7b76 100644 --- a/rust/project_json.go +++ b/rust/project_json.go @@ -49,7 +49,7 @@ type rustProjectCrate struct { RootModule string `json:"root_module"` Edition string `json:"edition,omitempty"` Deps []rustProjectDep `json:"deps"` - Cfgs []string `json:"cfgs"` + Cfg []string `json:"cfg"` Env map[string]string `json:"env"` } @@ -230,7 +230,7 @@ func (singleton *projectGeneratorSingleton) addCrate(ctx android.SingletonContex RootModule: rootModule, Edition: comp.edition(), Deps: make([]rustProjectDep, 0), - Cfgs: make([]string, 0), + Cfg: make([]string, 0), Env: make(map[string]string), } @@ -238,6 +238,10 @@ func (singleton *projectGeneratorSingleton) addCrate(ctx android.SingletonContex crate.Env["OUT_DIR"] = comp.CargoOutDir().String() } + for _, feature := range comp.Properties.Features { + crate.Cfg = append(crate.Cfg, "feature=\""+feature+"\"") + } + deps := make(map[string]int) singleton.mergeDependencies(ctx, rModule, &crate, deps) diff --git a/rust/project_json_test.go b/rust/project_json_test.go index 8f64f56e2..7af463528 100644 --- a/rust/project_json_test.go +++ b/rust/project_json_test.go @@ -18,6 +18,7 @@ import ( "encoding/json" "io/ioutil" "path/filepath" + "sort" "strings" "testing" @@ -115,6 +116,41 @@ func TestProjectJsonDep(t *testing.T) { validateJsonCrates(t, jsonContent) } +func TestProjectJsonFeature(t *testing.T) { + bp := ` + rust_library { + name: "liba", + srcs: ["a/src/lib.rs"], + crate_name: "a", + features: ["f1", "f2"] + } + ` + jsonContent := testProjectJson(t, bp) + crates := validateJsonCrates(t, jsonContent) + for _, c := range crates { + crate := validateCrate(t, c) + cfgs, ok := crate["cfg"].([]interface{}) + if !ok { + t.Fatalf("Unexpected type for cfgs: %v", crate) + } + expectedCfgs := []string{"feature=\"f1\"", "feature=\"f2\""} + foundCfgs := []string{} + for _, cfg := range cfgs { + cfg, ok := cfg.(string) + if !ok { + t.Fatalf("Unexpected type for cfg: %v", cfg) + } + foundCfgs = append(foundCfgs, cfg) + } + sort.Strings(foundCfgs) + for i, foundCfg := range foundCfgs { + if foundCfg != expectedCfgs[i] { + t.Errorf("Incorrect features: got %v; want %v", foundCfg, expectedCfgs[i]) + } + } + } +} + func TestProjectJsonBinary(t *testing.T) { bp := ` rust_binary { |