// Copyright 2019 The ChromiumOS Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package main import ( "path/filepath" "strings" ) const skipSysrootAutodetectionFlag = "--cros-skip-wrapper-sysroot-autodetection" func processSysrootFlag(builder *commandBuilder) { hadSkipSysrootMagicFlag := false fromUser := false userSysroot := "" builder.transformArgs(func(arg builderArg) string { switch { // In rare cases (e.g., glibc), we want all sysroot autodetection logic to be // disabled. This flag can be passed to disable that. case arg.value == skipSysrootAutodetectionFlag: hadSkipSysrootMagicFlag = true return "" case arg.fromUser && strings.HasPrefix(arg.value, "--sysroot="): fromUser = true sysrootArg := strings.Split(arg.value, "=") if len(sysrootArg) == 2 { userSysroot = sysrootArg[1] } return arg.value default: return arg.value } }) if hadSkipSysrootMagicFlag { return } sysroot, syrootPresent := builder.env.getenv("SYSROOT") if syrootPresent { builder.updateEnv("SYSROOT=") } if sysroot == "" { // Use the bundled sysroot by default. sysroot = filepath.Join(builder.rootPath, "usr", builder.target.target) } if !fromUser { builder.addPreUserArgs("--sysroot=" + sysroot) } else { sysroot = userSysroot } libdir := "-L" + sysroot + "/usr/lib" if strings.Contains(builder.target.target, "64") { libdir += "64" } builder.addPostUserArgs(libdir) }