linux/scripts/dummy-tools/gcc
<<
>>
Prefs
   1#!/bin/sh
   2# SPDX-License-Identifier: GPL-2.0-only
   3#
   4# Staring v4.18, Kconfig evaluates compiler capabilities, and hides CONFIG
   5# options your compiler does not support. This works well if you configure and
   6# build the kernel on the same host machine.
   7#
   8# It is inconvenient if you prepare the .config that is carried to a different
   9# build environment (typically this happens when you package the kernel for
  10# distros) because using a different compiler potentially produces different
  11# CONFIG options than the real build environment. So, you probably want to make
  12# as many options visible as possible. In other words, you need to create a
  13# super-set of CONFIG options that cover any build environment. If some of the
  14# CONFIG options turned out to be unsupported on the build machine, they are
  15# automatically disabled by the nature of Kconfig.
  16#
  17# However, it is not feasible to get a full-featured compiler for every arch.
  18# Hence these dummy toolchains to make all compiler tests pass.
  19#
  20# Usage:
  21#
  22# From the top directory of the source tree, run
  23#
  24#   $ make CROSS_COMPILE=scripts/dummy-tools/ oldconfig
  25#
  26# Most of compiler features are tested by cc-option, which simply checks the
  27# exit code of $(CC). This script does nothing and just exits with 0 in most
  28# cases. So, $(cc-option, ...) is evaluated as 'y'.
  29#
  30# This scripts caters to more checks; handle --version and pre-process __GNUC__
  31# etc. to pretend to be GCC, and also do right things to satisfy some scripts.
  32
  33# Check if the first parameter appears in the rest. Succeeds if found.
  34# This helper is useful if a particular option was passed to this script.
  35# Typically used like this:
  36#   arg_contain <word-you-are-searching-for> "$@"
  37arg_contain ()
  38{
  39        search="$1"
  40        shift
  41
  42        while [ $# -gt 0 ]
  43        do
  44                if [ "$search" = "$1" ]; then
  45                        return 0
  46                fi
  47                shift
  48        done
  49
  50        return 1
  51}
  52
  53# To set CONFIG_CC_IS_GCC=y
  54if arg_contain --version "$@"; then
  55        echo "gcc (scripts/dummy-tools/gcc)"
  56        exit 0
  57fi
  58
  59if arg_contain -E "$@"; then
  60        # For scripts/cc-version.sh; This emulates GCC 20.0.0
  61        if arg_contain - "$@"; then
  62                sed -n '/^GCC/{s/__GNUC__/20/; s/__GNUC_MINOR__/0/; s/__GNUC_PATCHLEVEL__/0/; p;}'
  63                exit 0
  64        else
  65                echo "no input files" >&2
  66                exit 1
  67        fi
  68fi
  69
  70# To set CONFIG_AS_IS_GNU
  71if arg_contain -Wa,--version "$@"; then
  72        echo "GNU assembler (scripts/dummy-tools) 2.50"
  73        exit 0
  74fi
  75
  76if arg_contain -S "$@"; then
  77        # For scripts/gcc-x86-*-has-stack-protector.sh
  78        if arg_contain -fstack-protector "$@"; then
  79                if arg_contain -mstack-protector-guard-reg=fs "$@"; then
  80                        echo "%fs"
  81                else
  82                        echo "%gs"
  83                fi
  84                exit 0
  85        fi
  86
  87        # For arch/powerpc/tools/gcc-check-mprofile-kernel.sh
  88        if arg_contain -m64 "$@" && arg_contain -mlittle-endian "$@" &&
  89                arg_contain -mprofile-kernel "$@"; then
  90                if ! test -t 0 && ! grep -q notrace; then
  91                        echo "_mcount"
  92                fi
  93                exit 0
  94        fi
  95fi
  96
  97# To set GCC_PLUGINS
  98if arg_contain -print-file-name=plugin "$@"; then
  99        plugin_dir=$(mktemp -d)
 100
 101        mkdir -p $plugin_dir/include
 102        touch $plugin_dir/include/plugin-version.h
 103
 104        echo $plugin_dir
 105        exit 0
 106fi
 107
 108# inverted return value
 109if arg_contain -D__SIZEOF_INT128__=0 "$@"; then
 110        exit 1
 111fi
 112