aboutsummaryrefslogtreecommitdiffstats
path: root/sys/targets
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2023-01-20 16:29:26 +0100
committerAleksandr Nogikh <wp32pw@gmail.com>2023-01-20 16:45:08 +0100
commit318db27c3d8459052fa5dc195b2a965428e3c142 (patch)
tree09f429f2bbd66943cb4024a917e9dd64ff86bbf4 /sys/targets
parentb986d195b8a71d1f3cf3c13e47367fb369d0bfc3 (diff)
sys/targets: make the SOURCEDIR setting more granular
If a syz-ci is run on multiple arches, it's useful to be able to use the same set of env variables. For this to become possible, make SOURCEDIR_ configuration more granular. Earlier it was just SOURCEDIR or SOURCEDIR_{TargetOS}. Support also the SOUREDIR_{TargetOS}_{TargetArch}_{HostOS}_{HostArch} variable.
Diffstat (limited to 'sys/targets')
-rw-r--r--sys/targets/targets.go26
1 files changed, 20 insertions, 6 deletions
diff --git a/sys/targets/targets.go b/sys/targets/targets.go
index c891df41b..6933b2e47 100644
--- a/sys/targets/targets.go
+++ b/sys/targets/targets.go
@@ -672,10 +672,7 @@ func initTarget(target *Target, OS, arch string) {
target.DataOffset = 512 << 20
}
target.NumPages = (16 << 20) / target.PageSize
- sourceDir := os.Getenv("SOURCEDIR_" + strings.ToUpper(OS))
- if sourceDir == "" {
- sourceDir = os.Getenv("SOURCEDIR")
- }
+ sourceDir := getSourceDir(target)
for sourceDir != "" && sourceDir[len(sourceDir)-1] == '/' {
sourceDir = sourceDir[:len(sourceDir)-1]
}
@@ -822,7 +819,7 @@ func (target *Target) lazyInit() {
// Only fail on CI for native build.
// On CI we want to fail loudly if cross-compilation breaks.
// Also fail if SOURCEDIR_GOOS is set b/c in that case user probably assumes it will work.
- if (target.OS != runtime.GOOS || !runningOnCI) && os.Getenv("SOURCEDIR_"+strings.ToUpper(target.OS)) == "" {
+ if (target.OS != runtime.GOOS || !runningOnCI) && getSourceDir(target) == "" {
if _, err := exec.LookPath(target.CCompiler); err != nil {
target.BrokenCompiler = fmt.Sprintf("%v is missing (%v)", target.CCompiler, err)
return
@@ -874,7 +871,7 @@ func (target *Target) lazyInit() {
// fatal error: asm/unistd.h: No such file or directory
// fatal error: asm/errno.h: No such file or directory
// collect2: error: ld terminated with signal 11 [Segmentation fault]
- if runningOnCI || os.Getenv("SOURCEDIR_"+strings.ToUpper(target.OS)) != "" {
+ if runningOnCI || getSourceDir(target) != "" {
return // On CI all compilers are expected to work, so we don't do the following check.
}
args := []string{"-x", "c++", "-", "-o", "/dev/null"}
@@ -955,6 +952,23 @@ func processMergedFlags(flags []string) []string {
return newFlags
}
+func getSourceDir(target *Target) string {
+ // First try the most granular env option.
+ name := fmt.Sprintf("SOURCEDIR_%s_%s_%s_%s",
+ strings.ToUpper(target.OS), strings.ToUpper(target.Arch),
+ strings.ToUpper(runtime.GOOS), strings.ToUpper(runtime.GOARCH),
+ )
+ if ret := os.Getenv(name); ret != "" {
+ return ret
+ }
+ // .. then the older one.
+ name = fmt.Sprintf("SOURCEDIR_%s", strings.ToUpper(target.OS))
+ if ret := os.Getenv(name); ret != "" {
+ return ret
+ }
+ return os.Getenv("SOURCEDIR")
+}
+
func needSyscallDefine(nr uint64) bool { return true }
func dontNeedSyscallDefine(nr uint64) bool { return false }