From c85d08f63be6b7a762797415ef222cc73e15dbf7 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Tue, 9 May 2023 15:00:58 -0700 Subject: [PATCH] Make mk2rbc output paths relative to android root Previously, mk2rbc would output absolute paths in the load statements. This caused issues with the new module resolution logic in rbcrun, and is not something we'd want to check in anyways. Bug: 280685526 Test: go test Change-Id: Iae6e3f6be9cecc8e19b6e1fd33c5575ff6864654 --- mk2rbc/mk2rbc.go | 23 +++++++++++++++++++++++ mk2rbc/mk2rbc/mk2rbc.go | 13 +++++++++++-- mk2rbc/soong_variables_test.go | 4 ++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc.go index 77394d964..8225df60d 100644 --- a/mk2rbc/mk2rbc.go +++ b/mk2rbc/mk2rbc.go @@ -163,6 +163,21 @@ var ignoredDefines = map[string]bool{ var identifierFullMatchRegex = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$") +func RelativeToCwd(path string) (string, error) { + cwd, err := os.Getwd() + if err != nil { + return "", err + } + path, err = filepath.Rel(cwd, path) + if err != nil { + return "", err + } + if strings.HasPrefix(path, "../") { + return "", fmt.Errorf("Could not make path relative to current working directory: " + path) + } + return path, nil +} + // Conversion request parameters type Request struct { MkFile string // file to convert @@ -320,6 +335,14 @@ func (gctx *generationContext) emitPreamble() { loadedSubConfigs := make(map[string]string) for _, mi := range gctx.starScript.inherited { uri := mi.path + if strings.HasPrefix(uri, "/") && !strings.HasPrefix(uri, "//") { + var err error + uri, err = RelativeToCwd(uri) + if err != nil { + panic(err) + } + uri = "//" + uri + } if m, ok := loadedSubConfigs[uri]; ok { // No need to emit load statement, but fix module name. mi.moduleLocalName = m diff --git a/mk2rbc/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc/mk2rbc.go index cc83430a8..08c363f1b 100644 --- a/mk2rbc/mk2rbc/mk2rbc.go +++ b/mk2rbc/mk2rbc/mk2rbc.go @@ -187,7 +187,7 @@ func main() { quit(fmt.Errorf("the product launcher input variables file failed to convert")) } - err := writeGenerated(*launcher, mk2rbc.Launcher(outputFilePath(files[0]), outputFilePath(*inputVariables), + err := writeGenerated(*launcher, mk2rbc.Launcher(outputModulePath(files[0]), outputModulePath(*inputVariables), mk2rbc.MakePath2ModuleName(files[0]))) if err != nil { fmt.Fprintf(os.Stderr, "%s: %s", files[0], err) @@ -205,7 +205,7 @@ func main() { quit(fmt.Errorf("the board launcher input variables file failed to convert")) } err := writeGenerated(*boardlauncher, mk2rbc.BoardLauncher( - outputFilePath(files[0]), outputFilePath(*inputVariables))) + outputModulePath(files[0]), outputModulePath(*inputVariables))) if err != nil { fmt.Fprintf(os.Stderr, "%s: %s", files[0], err) ok = false @@ -402,6 +402,15 @@ func outputFilePath(mkFile string) string { return path } +func outputModulePath(mkFile string) string { + path := outputFilePath(mkFile) + path, err := mk2rbc.RelativeToCwd(path) + if err != nil { + panic(err) + } + return "//" + path +} + func writeGenerated(path string, contents string) error { if err := os.MkdirAll(filepath.Dir(path), os.ModeDir|os.ModePerm); err != nil { return err diff --git a/mk2rbc/soong_variables_test.go b/mk2rbc/soong_variables_test.go index c883882c4..58e98f68e 100644 --- a/mk2rbc/soong_variables_test.go +++ b/mk2rbc/soong_variables_test.go @@ -42,8 +42,8 @@ func TestSoongVariables(t *testing.T) { {"BUILD_ID", VarClassSoong, starlarkTypeString}, {"PLATFORM_SDK_VERSION", VarClassSoong, starlarkTypeInt}, {"DEVICE_PACKAGE_OVERLAYS", VarClassSoong, starlarkTypeList}, - {"ENABLE_CFI", VarClassSoong, starlarkTypeBool}, - {"ENABLE_PREOPT", VarClassSoong, starlarkTypeBool}, + {"ENABLE_CFI", VarClassSoong, starlarkTypeString}, + {"ENABLE_PREOPT", VarClassSoong, starlarkTypeString}, }} if !reflect.DeepEqual(expected, actual) { t.Errorf("\nExpected: %v\n Actual: %v", expected, actual)