xref: /aosp_15_r20/external/toolchain-utils/compiler_wrapper/clang_syntax_flag.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 Lifunc processClangSyntaxFlag(builder *commandBuilder) (clangSyntax bool) {
8*760c253cSXin Li	builder.transformArgs(func(arg builderArg) string {
9*760c253cSXin Li		if arg.value == "-clang-syntax" {
10*760c253cSXin Li			clangSyntax = true
11*760c253cSXin Li			return ""
12*760c253cSXin Li		}
13*760c253cSXin Li		return arg.value
14*760c253cSXin Li	})
15*760c253cSXin Li	return clangSyntax
16*760c253cSXin Li}
17*760c253cSXin Li
18*760c253cSXin Lifunc checkClangSyntax(env env, clangCmd *command, gccCmd *command) (exitCode int, err error) {
19*760c253cSXin Li	clangSyntaxCmd := &command{
20*760c253cSXin Li		Path:       clangCmd.Path,
21*760c253cSXin Li		Args:       append(clangCmd.Args, "-fsyntax-only", "-stdlib=libstdc++"),
22*760c253cSXin Li		EnvUpdates: clangCmd.EnvUpdates,
23*760c253cSXin Li	}
24*760c253cSXin Li
25*760c253cSXin Li	getStdin, err := prebufferStdinIfNeeded(env, clangCmd)
26*760c253cSXin Li	if err != nil {
27*760c253cSXin Li		return 0, wrapErrorwithSourceLocf(err, "prebuffering stdin: %v", err)
28*760c253cSXin Li	}
29*760c253cSXin Li
30*760c253cSXin Li	exitCode, err = wrapSubprocessErrorWithSourceLoc(clangSyntaxCmd,
31*760c253cSXin Li		env.run(clangSyntaxCmd, getStdin(), env.stdout(), env.stderr()))
32*760c253cSXin Li	if err != nil || exitCode != 0 {
33*760c253cSXin Li		return exitCode, err
34*760c253cSXin Li	}
35*760c253cSXin Li	return wrapSubprocessErrorWithSourceLoc(gccCmd,
36*760c253cSXin Li		env.run(gccCmd, getStdin(), env.stdout(), env.stderr()))
37*760c253cSXin Li}
38