Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8b0ee73 authored by Thiébaud Weksteen's avatar Thiébaud Weksteen
Browse files

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
parent a1063c09
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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)

+36 −0
Original line number Diff line number Diff line
@@ -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 {