From e426a20988185695675a2c456e0c24dcea515baf Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 11 Feb 2023 23:07:08 -0800 Subject: [PATCH 8/9] gcc: Allow g++ to work differently from gcc Compile gcc.cc with -DIN_GPP defined when building g++ so that the code can respond appropriately for the default target language. This allows the driver to customize the specs used, selecting different linker scripts, adjusting the use of crtbegin.o/crtend.o etc. By default, this change has no effect; targets need to explicitly check for IN_GPP to have alternate behavior. Signed-off-by: Keith Packard --- gcc/cp/Make-lang.in | 7 ++++++- gcc/gpp.cc | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 gcc/gpp.cc diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index 2de4e47c659..39c659b9537 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -68,7 +68,12 @@ CFLAGS-cp/module.o += -DMODULE_VERSION='($(subst -,,$(MODULE_VERSION))U)' endif # Create the compiler driver for g++. -GXX_OBJS = $(GCC_OBJS) cp/g++spec.o +GXX_OBJS = $(GCC_OBJS:gcc.o=gpp.o) cp/g++spec.o + +CFLAGS-gpp.o = $(CFLAGS-gcc.o) +gpp.o: $(BASEVER) +gpp.o: gcc.o + xg++$(exeext): $(GXX_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS) +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ $(GXX_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \ diff --git a/gcc/gpp.cc b/gcc/gpp.cc new file mode 100644 index 00000000000..3cd7b45e808 --- /dev/null +++ b/gcc/gpp.cc @@ -0,0 +1,21 @@ +/* Compiler driver program that can handle many languages. + Copyright (C) 1987-2022 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#define IN_GPP +#include "gcc.cc" -- 2.39.0