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)