Blame view

scripts/gcc-plugin.sh 1.06 KB
6b90bd4ba   Emese Revfy   GCC plugin infras...
1
  #!/bin/sh
b24413180   Greg Kroah-Hartman   License cleanup: ...
2
  # SPDX-License-Identifier: GPL-2.0
6b90bd4ba   Emese Revfy   GCC plugin infras...
3
  srctree=$(dirname "$0")
ed58c0e9e   Kees Cook   gcc-plugins: abor...
4
5
6
7
8
9
  
  SHOW_ERROR=
  if [ "$1" = "--show-error" ] ; then
  	SHOW_ERROR=1
  	shift || true
  fi
6b90bd4ba   Emese Revfy   GCC plugin infras...
10
11
12
13
14
15
16
17
18
19
20
21
22
  gccplugins_dir=$($3 -print-file-name=plugin)
  plugincc=$($1 -E -x c++ - -o /dev/null -I"${srctree}"/gcc-plugins -I"${gccplugins_dir}"/include 2>&1 <<EOF
  #include "gcc-common.h"
  #if BUILDING_GCC_VERSION >= 4008 || defined(ENABLE_BUILD_WITH_CXX)
  #warning $2 CXX
  #else
  #warning $1 CC
  #endif
  EOF
  )
  
  if [ $? -ne 0 ]
  then
ed58c0e9e   Kees Cook   gcc-plugins: abor...
23
24
25
  	if [ -n "$SHOW_ERROR" ] ; then
  		echo "${plugincc}" >&2
  	fi
6b90bd4ba   Emese Revfy   GCC plugin infras...
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  	exit 1
  fi
  
  case "$plugincc" in
  	*"$1 CC"*)
  		echo "$1"
  		exit 0
  		;;
  
  	*"$2 CXX"*)
  		# the c++ compiler needs another test, see below
  		;;
  
  	*)
  		exit 1
  		;;
  esac
  
  # we need a c++ compiler that supports the designated initializer GNU extension
  plugincc=$($2 -c -x c++ -std=gnu++98 - -fsyntax-only -I"${srctree}"/gcc-plugins -I"${gccplugins_dir}"/include 2>&1 <<EOF
  #include "gcc-common.h"
  class test {
  public:
  	int test;
  } test = {
  	.test = 1
  };
  EOF
  )
  
  if [ $? -eq 0 ]
  then
  	echo "$2"
  	exit 0
  fi
ed58c0e9e   Kees Cook   gcc-plugins: abor...
61
62
63
64
  
  if [ -n "$SHOW_ERROR" ] ; then
  	echo "${plugincc}" >&2
  fi
6b90bd4ba   Emese Revfy   GCC plugin infras...
65
  exit 1