1*760c253cSXin Li// Copyright 2019 The ChromiumOS Authors 2*760c253cSXin Li// Use of this source code is governed by a BSD-style license that can be 3*760c253cSXin Li// found in the LICENSE file. 4*760c253cSXin Li 5*760c253cSXin Lipackage main 6*760c253cSXin Li 7*760c253cSXin Liimport ( 8*760c253cSXin Li "path/filepath" 9*760c253cSXin Li "strings" 10*760c253cSXin Li) 11*760c253cSXin Li 12*760c253cSXin Liconst skipSysrootAutodetectionFlag = "--cros-skip-wrapper-sysroot-autodetection" 13*760c253cSXin Li 14*760c253cSXin Lifunc processSysrootFlag(builder *commandBuilder) { 15*760c253cSXin Li hadSkipSysrootMagicFlag := false 16*760c253cSXin Li fromUser := false 17*760c253cSXin Li userSysroot := "" 18*760c253cSXin Li builder.transformArgs(func(arg builderArg) string { 19*760c253cSXin Li switch { 20*760c253cSXin Li // In rare cases (e.g., glibc), we want all sysroot autodetection logic to be 21*760c253cSXin Li // disabled. This flag can be passed to disable that. 22*760c253cSXin Li case arg.value == skipSysrootAutodetectionFlag: 23*760c253cSXin Li hadSkipSysrootMagicFlag = true 24*760c253cSXin Li return "" 25*760c253cSXin Li 26*760c253cSXin Li case arg.fromUser && strings.HasPrefix(arg.value, "--sysroot="): 27*760c253cSXin Li fromUser = true 28*760c253cSXin Li sysrootArg := strings.Split(arg.value, "=") 29*760c253cSXin Li if len(sysrootArg) == 2 { 30*760c253cSXin Li userSysroot = sysrootArg[1] 31*760c253cSXin Li } 32*760c253cSXin Li return arg.value 33*760c253cSXin Li 34*760c253cSXin Li default: 35*760c253cSXin Li return arg.value 36*760c253cSXin Li } 37*760c253cSXin Li }) 38*760c253cSXin Li 39*760c253cSXin Li if hadSkipSysrootMagicFlag { 40*760c253cSXin Li return 41*760c253cSXin Li } 42*760c253cSXin Li 43*760c253cSXin Li sysroot, syrootPresent := builder.env.getenv("SYSROOT") 44*760c253cSXin Li if syrootPresent { 45*760c253cSXin Li builder.updateEnv("SYSROOT=") 46*760c253cSXin Li } 47*760c253cSXin Li if sysroot == "" { 48*760c253cSXin Li // Use the bundled sysroot by default. 49*760c253cSXin Li sysroot = filepath.Join(builder.rootPath, "usr", builder.target.target) 50*760c253cSXin Li } 51*760c253cSXin Li if !fromUser { 52*760c253cSXin Li builder.addPreUserArgs("--sysroot=" + sysroot) 53*760c253cSXin Li } else { 54*760c253cSXin Li sysroot = userSysroot 55*760c253cSXin Li } 56*760c253cSXin Li 57*760c253cSXin Li libdir := "-L" + sysroot + "/usr/lib" 58*760c253cSXin Li if strings.Contains(builder.target.target, "64") { 59*760c253cSXin Li libdir += "64" 60*760c253cSXin Li } 61*760c253cSXin Li builder.addPostUserArgs(libdir) 62*760c253cSXin Li} 63