xref: /aosp_15_r20/external/toolchain-utils/compiler_wrapper/sysroot_flag_test.go (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
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"
9*760c253cSXin Li	"regexp"
10*760c253cSXin Li	"testing"
11*760c253cSXin Li)
12*760c253cSXin Li
13*760c253cSXin Lifunc TestOmitSysrootGivenSysrootSuppressionFlag(t *testing.T) {
14*760c253cSXin Li	escapedAutodetectionFlag := regexp.QuoteMeta(skipSysrootAutodetectionFlag)
15*760c253cSXin Li	withTestContext(t, func(ctx *testContext) {
16*760c253cSXin Li		runWithCompiler := func(compiler string) {
17*760c253cSXin Li			cmd := ctx.must(callCompiler(ctx, ctx.cfg,
18*760c253cSXin Li				ctx.newCommand(compiler, skipSysrootAutodetectionFlag, mainCc)))
19*760c253cSXin Li			if err := verifyArgOrder(cmd, mainCc); err != nil {
20*760c253cSXin Li				t.Error(err)
21*760c253cSXin Li			}
22*760c253cSXin Li			if err := verifyArgCount(cmd, 0, "--sysroot.*"); err != nil {
23*760c253cSXin Li				t.Error(err)
24*760c253cSXin Li			}
25*760c253cSXin Li			if err := verifyArgCount(cmd, 0, "-L.*"); err != nil {
26*760c253cSXin Li				t.Error(err)
27*760c253cSXin Li			}
28*760c253cSXin Li			if err := verifyArgCount(cmd, 0, escapedAutodetectionFlag); err != nil {
29*760c253cSXin Li				t.Error(err)
30*760c253cSXin Li			}
31*760c253cSXin Li		}
32*760c253cSXin Li
33*760c253cSXin Li		runWithCompiler(gccX86_64)
34*760c253cSXin Li		runWithCompiler(clangX86_64)
35*760c253cSXin Li	})
36*760c253cSXin Li}
37*760c253cSXin Li
38*760c253cSXin Lifunc TestOmitSysrootGivenUserDefinedSysroot(t *testing.T) {
39*760c253cSXin Li	withTestContext(t, func(ctx *testContext) {
40*760c253cSXin Li		runWithCompiler := func(compiler string) {
41*760c253cSXin Li			cmd := ctx.must(callCompiler(ctx, ctx.cfg,
42*760c253cSXin Li				ctx.newCommand(compiler, "--sysroot=/somepath", mainCc)))
43*760c253cSXin Li			if err := verifyArgOrder(cmd, "--sysroot=/somepath", mainCc); err != nil {
44*760c253cSXin Li				t.Error(err)
45*760c253cSXin Li			}
46*760c253cSXin Li			if err := verifyArgCount(cmd, 1, "--sysroot.*"); err != nil {
47*760c253cSXin Li				t.Error(err)
48*760c253cSXin Li			}
49*760c253cSXin Li		}
50*760c253cSXin Li
51*760c253cSXin Li		runWithCompiler(gccX86_64)
52*760c253cSXin Li		runWithCompiler(clangX86_64)
53*760c253cSXin Li	})
54*760c253cSXin Li}
55*760c253cSXin Li
56*760c253cSXin Lifunc TestSetSysrootFlagFromEnv(t *testing.T) {
57*760c253cSXin Li	withTestContext(t, func(ctx *testContext) {
58*760c253cSXin Li		ctx.env = []string{"SYSROOT=/envpath"}
59*760c253cSXin Li		cmd := ctx.must(callCompiler(ctx, ctx.cfg,
60*760c253cSXin Li			ctx.newCommand(gccX86_64, mainCc)))
61*760c253cSXin Li		if err := verifyEnvUpdate(cmd, "SYSROOT="); err != nil {
62*760c253cSXin Li			t.Error(err)
63*760c253cSXin Li		}
64*760c253cSXin Li		if err := verifyArgOrder(cmd, "--sysroot=/envpath", mainCc); err != nil {
65*760c253cSXin Li			t.Error(err)
66*760c253cSXin Li		}
67*760c253cSXin Li	})
68*760c253cSXin Li}
69*760c253cSXin Li
70*760c253cSXin Lifunc TestClearEmptySysrootFlagInEnv(t *testing.T) {
71*760c253cSXin Li	withTestContext(t, func(ctx *testContext) {
72*760c253cSXin Li		ctx.env = []string{"SYSROOT="}
73*760c253cSXin Li		cmd := ctx.must(callCompiler(ctx, ctx.cfg,
74*760c253cSXin Li			ctx.newCommand(gccX86_64, mainCc)))
75*760c253cSXin Li		if err := verifyEnvUpdate(cmd, "SYSROOT="); err != nil {
76*760c253cSXin Li			t.Error(err)
77*760c253cSXin Li		}
78*760c253cSXin Li		if err := verifyArgOrder(cmd, "--sysroot=.*/x86_64-cros-linux-gnu", mainCc); err != nil {
79*760c253cSXin Li			t.Error(err)
80*760c253cSXin Li		}
81*760c253cSXin Li	})
82*760c253cSXin Li}
83*760c253cSXin Li
84*760c253cSXin Lifunc TestSetSysrootRelativeToWrapperPath(t *testing.T) {
85*760c253cSXin Li	withTestContext(t, func(ctx *testContext) {
86*760c253cSXin Li		ctx.cfg.gccRootRelPath = "somepath"
87*760c253cSXin Li		cmd := ctx.must(callCompiler(ctx, ctx.cfg,
88*760c253cSXin Li			ctx.newCommand(gccX86_64, mainCc)))
89*760c253cSXin Li		if err := verifyArgOrder(cmd,
90*760c253cSXin Li			"--sysroot="+ctx.tempDir+"/somepath/usr/x86_64-cros-linux-gnu", mainCc); err != nil {
91*760c253cSXin Li			t.Error(err)
92*760c253cSXin Li		}
93*760c253cSXin Li	})
94*760c253cSXin Li}
95*760c253cSXin Li
96*760c253cSXin Lifunc TestSetSysrootRelativeToSymlinkedWrapperPath(t *testing.T) {
97*760c253cSXin Li	withTestContext(t, func(ctx *testContext) {
98*760c253cSXin Li		ctx.cfg.gccRootRelPath = "somepath"
99*760c253cSXin Li		linkedWrapperPath := path.Join(ctx.tempDir, "a/linked/path/x86_64-cros-linux-gnu-gcc")
100*760c253cSXin Li		ctx.symlink(path.Join(ctx.tempDir, gccX86_64), linkedWrapperPath)
101*760c253cSXin Li
102*760c253cSXin Li		cmd := ctx.must(callCompiler(ctx, ctx.cfg,
103*760c253cSXin Li			ctx.newCommand(linkedWrapperPath, mainCc)))
104*760c253cSXin Li		if err := verifyArgOrder(cmd,
105*760c253cSXin Li			"--sysroot="+ctx.tempDir+"/somepath/usr/x86_64-cros-linux-gnu", mainCc); err != nil {
106*760c253cSXin Li			t.Error(err)
107*760c253cSXin Li		}
108*760c253cSXin Li	})
109*760c253cSXin Li}
110