xref: /aosp_15_r20/external/toolchain-utils/compiler_wrapper/android_config_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	"path/filepath"
10*760c253cSXin Li	"testing"
11*760c253cSXin Li)
12*760c253cSXin Li
13*760c253cSXin Liconst androidGoldenDir = "testdata/android_golden"
14*760c253cSXin Li
15*760c253cSXin Lifunc TestAndroidConfigDoesNotSpecifyCrashDir(t *testing.T) {
16*760c253cSXin Li	withTestContext(t, func(ctx *testContext) {
17*760c253cSXin Li		useLlvmNext := false
18*760c253cSXin Li		useCCache := false
19*760c253cSXin Li		cfg, err := getConfig("android", useCCache, useLlvmNext, "123")
20*760c253cSXin Li		if err != nil {
21*760c253cSXin Li			t.Fatal(err)
22*760c253cSXin Li		}
23*760c253cSXin Li		ctx.updateConfig(cfg)
24*760c253cSXin Li
25*760c253cSXin Li		cmd := ctx.must(callCompiler(ctx, ctx.cfg, ctx.newCommand(clangX86_64, mainCc)))
26*760c253cSXin Li		if err := verifyArgCount(cmd, 0, "-fcrash-diagnostics-dir=.*"); err != nil {
27*760c253cSXin Li			t.Error(err)
28*760c253cSXin Li		}
29*760c253cSXin Li	})
30*760c253cSXin Li}
31*760c253cSXin Li
32*760c253cSXin Lifunc TestAndroidConfig(t *testing.T) {
33*760c253cSXin Li	withTestContext(t, func(ctx *testContext) {
34*760c253cSXin Li		useLlvmNext := false
35*760c253cSXin Li		useCCache := false
36*760c253cSXin Li		cfg, err := getConfig("android", useCCache, useLlvmNext, "123")
37*760c253cSXin Li		if err != nil {
38*760c253cSXin Li			t.Fatal(err)
39*760c253cSXin Li		}
40*760c253cSXin Li		ctx.updateConfig(cfg)
41*760c253cSXin Li
42*760c253cSXin Li		runGoldenRecords(ctx, androidGoldenDir, []goldenFile{
43*760c253cSXin Li			createAndroidClangPathGoldenInputs(ctx),
44*760c253cSXin Li			createBisectGoldenInputs(filepath.Join(ctx.tempDir, "clang")),
45*760c253cSXin Li			createAndroidCompileWithFallbackGoldenInputs(ctx),
46*760c253cSXin Li		})
47*760c253cSXin Li	})
48*760c253cSXin Li}
49*760c253cSXin Li
50*760c253cSXin Lifunc createAndroidClangPathGoldenInputs(ctx *testContext) goldenFile {
51*760c253cSXin Li	gomaPath := path.Join(ctx.tempDir, "gomacc")
52*760c253cSXin Li	ctx.writeFile(gomaPath, "")
53*760c253cSXin Li	defaultPath := filepath.Join(ctx.tempDir, "clang")
54*760c253cSXin Li	clangTidyPath := filepath.Join(ctx.tempDir, "clang-tidy")
55*760c253cSXin Li
56*760c253cSXin Li	deepPath := "a/b/c/d/e/f/g/clang"
57*760c253cSXin Li	linkedDeepPath := "symlinked/clang_other"
58*760c253cSXin Li	ctx.writeFile(filepath.Join(ctx.tempDir, "/pathenv/clang"), "")
59*760c253cSXin Li	ctx.symlink(deepPath, linkedDeepPath)
60*760c253cSXin Li	return goldenFile{
61*760c253cSXin Li		Name: "clang_path.json",
62*760c253cSXin Li		Records: []goldenRecord{
63*760c253cSXin Li			{
64*760c253cSXin Li				WrapperCmd: newGoldenCmd(defaultPath, mainCc),
65*760c253cSXin Li				Cmds:       okResults,
66*760c253cSXin Li			},
67*760c253cSXin Li			{
68*760c253cSXin Li				WrapperCmd: newGoldenCmd(defaultPath, mainCc),
69*760c253cSXin Li				Cmds:       errorResults,
70*760c253cSXin Li			},
71*760c253cSXin Li			{
72*760c253cSXin Li				Env:        []string{"WITH_TIDY=1"},
73*760c253cSXin Li				WrapperCmd: newGoldenCmd(defaultPath, mainCc),
74*760c253cSXin Li				Cmds:       okResults,
75*760c253cSXin Li			},
76*760c253cSXin Li			{
77*760c253cSXin Li				WrapperCmd: newGoldenCmd(filepath.Join(ctx.tempDir, "clang++"), mainCc),
78*760c253cSXin Li				Cmds:       okResults,
79*760c253cSXin Li			},
80*760c253cSXin Li			{
81*760c253cSXin Li				WrapperCmd: newGoldenCmd(clangTidyPath, mainCc),
82*760c253cSXin Li				Cmds:       okResults,
83*760c253cSXin Li			},
84*760c253cSXin Li			{
85*760c253cSXin Li				Env:        []string{"WITH_TIDY=1"},
86*760c253cSXin Li				WrapperCmd: newGoldenCmd(clangTidyPath, mainCc),
87*760c253cSXin Li				Cmds:       okResults,
88*760c253cSXin Li			},
89*760c253cSXin Li			{
90*760c253cSXin Li				WrapperCmd: newGoldenCmd(deepPath, mainCc),
91*760c253cSXin Li				Cmds:       okResults,
92*760c253cSXin Li			},
93*760c253cSXin Li			{
94*760c253cSXin Li				WrapperCmd: newGoldenCmd(linkedDeepPath, mainCc),
95*760c253cSXin Li				Cmds:       okResults,
96*760c253cSXin Li			},
97*760c253cSXin Li			{
98*760c253cSXin Li				Env:        []string{"PATH=" + filepath.Join(ctx.tempDir, "/pathenv")},
99*760c253cSXin Li				WrapperCmd: newGoldenCmd("clang", mainCc),
100*760c253cSXin Li				Cmds:       okResults,
101*760c253cSXin Li			},
102*760c253cSXin Li			{
103*760c253cSXin Li				WrapperCmd: newGoldenCmd(defaultPath, mainCc, "--gomacc-path", gomaPath),
104*760c253cSXin Li				Cmds:       okResults,
105*760c253cSXin Li			},
106*760c253cSXin Li		},
107*760c253cSXin Li	}
108*760c253cSXin Li}
109*760c253cSXin Li
110*760c253cSXin Lifunc createAndroidCompileWithFallbackGoldenInputs(ctx *testContext) goldenFile {
111*760c253cSXin Li	env := []string{
112*760c253cSXin Li		"ANDROID_LLVM_PREBUILT_COMPILER_PATH=fallback_compiler",
113*760c253cSXin Li		"ANDROID_LLVM_STDERR_REDIRECT=" + filepath.Join(ctx.tempDir, "fallback_stderr"),
114*760c253cSXin Li		"ANDROID_LLVM_FALLBACK_DISABLED_WARNINGS=-a -b",
115*760c253cSXin Li	}
116*760c253cSXin Li	defaultPath := filepath.Join(ctx.tempDir, "clang")
117*760c253cSXin Li	return goldenFile{
118*760c253cSXin Li		Name: "compile_with_fallback.json",
119*760c253cSXin Li		Records: []goldenRecord{
120*760c253cSXin Li			{
121*760c253cSXin Li				WrapperCmd: newGoldenCmd(defaultPath, mainCc),
122*760c253cSXin Li				Env:        env,
123*760c253cSXin Li				Cmds:       okResults,
124*760c253cSXin Li			},
125*760c253cSXin Li			{
126*760c253cSXin Li				WrapperCmd: newGoldenCmd(defaultPath, mainCc),
127*760c253cSXin Li				Env:        env,
128*760c253cSXin Li				Cmds: []commandResult{
129*760c253cSXin Li					{
130*760c253cSXin Li						ExitCode: 1,
131*760c253cSXin Li					},
132*760c253cSXin Li					okResult,
133*760c253cSXin Li				},
134*760c253cSXin Li			},
135*760c253cSXin Li			{
136*760c253cSXin Li				WrapperCmd: newGoldenCmd(defaultPath, mainCc),
137*760c253cSXin Li				Env:        env,
138*760c253cSXin Li				Cmds: []commandResult{
139*760c253cSXin Li					{
140*760c253cSXin Li						ExitCode: 1,
141*760c253cSXin Li					},
142*760c253cSXin Li					{
143*760c253cSXin Li						ExitCode: 1,
144*760c253cSXin Li					},
145*760c253cSXin Li				},
146*760c253cSXin Li			},
147*760c253cSXin Li		},
148*760c253cSXin Li	}
149*760c253cSXin Li}
150