11debfc3dSmrg# Top level -*- makefile -*- fragment for GNU C - C language. 2*8feb0f0bSmrg# Copyright (C) 1994-2020 Free Software Foundation, Inc. 31debfc3dSmrg 41debfc3dSmrg#This file is part of GCC. 51debfc3dSmrg 61debfc3dSmrg#GCC is free software; you can redistribute it and/or modify 71debfc3dSmrg#it under the terms of the GNU General Public License as published by 81debfc3dSmrg#the Free Software Foundation; either version 3, or (at your option) 91debfc3dSmrg#any later version. 101debfc3dSmrg 111debfc3dSmrg#GCC is distributed in the hope that it will be useful, 121debfc3dSmrg#but WITHOUT ANY WARRANTY; without even the implied warranty of 131debfc3dSmrg#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 141debfc3dSmrg#GNU General Public License for more details. 151debfc3dSmrg 161debfc3dSmrg# You should have received a copy of the GNU General Public License 171debfc3dSmrg# along with GCC; see the file COPYING3. If not see 181debfc3dSmrg# <http://www.gnu.org/licenses/>. 191debfc3dSmrg 201debfc3dSmrg# This file provides the language dependent support in the main Makefile. 211debfc3dSmrg# Each language makefile fragment must provide the following targets: 221debfc3dSmrg# 231debfc3dSmrg# foo.all.cross, foo.start.encap, foo.rest.encap, 241debfc3dSmrg# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf, 251debfc3dSmrg# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall, 261debfc3dSmrg# foo.mostlyclean, foo.clean, foo.distclean, 271debfc3dSmrg# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4 281debfc3dSmrg# 291debfc3dSmrg# where `foo' is the name of the language. 301debfc3dSmrg# 311debfc3dSmrg# It should also provide rules for: 321debfc3dSmrg# 331debfc3dSmrg# - making any compiler driver (eg: gcc) 341debfc3dSmrg# - the compiler proper (eg: cc1) 351debfc3dSmrg# - define the names for selecting the language in LANGUAGES. 361debfc3dSmrg 371debfc3dSmrg# 381debfc3dSmrg# Define the names for selecting c in LANGUAGES. 391debfc3dSmrgc: cc1$(exeext) 401debfc3dSmrg 411debfc3dSmrg# Tell GNU make to ignore these if they exist. 421debfc3dSmrg.PHONY: c gcc 431debfc3dSmrg 441debfc3dSmrg# The C front end driver. This is different from the drivers for other 451debfc3dSmrg# front ends, because there is no C language specific driver (i.e. nothing 461debfc3dSmrg# is to cc1 as e.g. g++ is to cc1plus, or gfortran is to f951). 471debfc3dSmrgCFLAGS-c/gccspec.o += $(DRIVER_DEFINES) 481debfc3dSmrg 491debfc3dSmrg# The C compiler itself. 501debfc3dSmrg 511debfc3dSmrg# Language-specific object files for C and Objective C. 521debfc3dSmrgC_AND_OBJC_OBJS = attribs.o c/c-errors.o c/c-decl.o c/c-typeck.o \ 531debfc3dSmrg c/c-convert.o c/c-aux-info.o c/c-objc-common.o c/c-parser.o \ 54a2dc1f3fSmrg c/c-fold.o c/gimple-parser.o \ 551debfc3dSmrg $(C_COMMON_OBJS) $(C_TARGET_OBJS) 561debfc3dSmrg 571debfc3dSmrg# Language-specific object files for C. 581debfc3dSmrgC_OBJS = c/c-lang.o c-family/stub-objc.o $(C_AND_OBJC_OBJS) 591debfc3dSmrgc_OBJS = $(C_OBJS) cc1-checksum.o c/gccspec.o 601debfc3dSmrg 611debfc3dSmrg# Use strict warnings for this front end. 621debfc3dSmrgc-warn = $(STRICT_WARN) 631debfc3dSmrg 641debfc3dSmrgifeq ($(if $(wildcard ../stage_current),$(shell cat \ 651debfc3dSmrg ../stage_current)),stageautofeedback) 661debfc3dSmrg$(C_OBJS): ALL_COMPILERFLAGS += -fauto-profile=cc1.fda 671debfc3dSmrg$(C_OBJS): cc1.fda 681debfc3dSmrgendif 691debfc3dSmrg 701debfc3dSmrg# compute checksum over all object files and the options 711debfc3dSmrg# re-use the checksum from the prev-final stage so it passes 721debfc3dSmrg# the bootstrap comparison and allows comparing of the cc1 binary 731debfc3dSmrgcc1-checksum.c : build/genchecksum$(build_exeext) checksum-options \ 741debfc3dSmrg $(C_OBJS) $(BACKEND) $(LIBDEPS) 751debfc3dSmrg if [ -f ../stage_final ] \ 761debfc3dSmrg && cmp -s ../stage_current ../stage_final; then \ 771debfc3dSmrg cp ../prev-gcc/cc1-checksum.c cc1-checksum.c; \ 781debfc3dSmrg else \ 791debfc3dSmrg build/genchecksum$(build_exeext) $(C_OBJS) $(BACKEND) $(LIBDEPS) \ 801debfc3dSmrg checksum-options > cc1-checksum.c.tmp && \ 811debfc3dSmrg $(SHELL) $(srcdir)/../move-if-change cc1-checksum.c.tmp cc1-checksum.c; \ 821debfc3dSmrg fi 831debfc3dSmrg 841debfc3dSmrgcc1$(exeext): $(C_OBJS) cc1-checksum.o $(BACKEND) $(LIBDEPS) 851debfc3dSmrg +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) \ 861debfc3dSmrg cc1-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS) 871debfc3dSmrg 881debfc3dSmrgcc1.fda: ../stage1-gcc/cc1$(exeext) ../prev-gcc/$(PERF_DATA) 891debfc3dSmrg $(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov cc1.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1 901debfc3dSmrg 911debfc3dSmrg# 921debfc3dSmrg# Build hooks: 931debfc3dSmrg 941debfc3dSmrgc.info: 951debfc3dSmrgc.dvi: 961debfc3dSmrgc.pdf: 971debfc3dSmrgc.html: 981debfc3dSmrgc.install-info: 991debfc3dSmrgc.install-pdf: 1001debfc3dSmrgc.install-html: 1011debfc3dSmrgc.all.cross: 1021debfc3dSmrgc.start.encap: 1031debfc3dSmrgc.rest.encap: 1041debfc3dSmrgc.srcinfo: 1051debfc3dSmrgc.srcextra: gengtype-lex.c 1061debfc3dSmrg -cp -p $^ $(srcdir) 1071debfc3dSmrgc.tags: force 1081debfc3dSmrg cd $(srcdir)/c; etags -o TAGS.sub *.c *.h; \ 1091debfc3dSmrg etags --include TAGS.sub --include ../TAGS.sub 1101debfc3dSmrgc.man: 1111debfc3dSmrgc.srcman: 1121debfc3dSmrg 113c0a68be4Smrg# C selftests 114c0a68be4Smrg 115c0a68be4Smrg# If C is enabled, require the selftests to be run for it 116c0a68be4Smrg# at each stage of the build: 117c0a68be4Smrgselftest-c: s-selftest-c 118c0a68be4Smrg 119c0a68be4SmrgC_SELFTEST_FLAGS = -xc $(SELFTEST_FLAGS) 120c0a68be4SmrgC_SELFTEST_DEPS = cc1$(exeext) $(SELFTEST_DEPS) 121c0a68be4Smrg 122c0a68be4Smrg# Run the C selftests: 123c0a68be4Smrgs-selftest-c: $(C_SELFTEST_DEPS) 124c0a68be4Smrg @echo "NOT REBUILDING $@" 125c0a68be4SmrgNetBSD_DISABLED_s-selftest: 126c0a68be4Smrg $(GCC_FOR_TARGET) $(C_SELFTEST_FLAGS) 127c0a68be4Smrg $(STAMP) $@ 128c0a68be4Smrg 129c0a68be4Smrg# Convenience methods for running C selftests under gdb: 130c0a68be4Smrg.PHONY: selftest-c-gdb 131c0a68be4Smrgselftest-c-gdb: $(C_SELFTEST_DEPS) 132c0a68be4Smrg $(GCC_FOR_TARGET) $(C_SELFTEST_FLAGS) \ 133c0a68be4Smrg -wrapper gdb,--args 134c0a68be4Smrg 135c0a68be4Smrg.PHONY: selftest-gdb 136c0a68be4Smrgselftest-gdb: selftest-c-gdb 137c0a68be4Smrg 138c0a68be4Smrg# Convenience methods for running C selftests under valgrind: 139c0a68be4Smrg.PHONY: selftest-c-valgrind 140c0a68be4Smrgselftest-c-valgrind: $(C_SELFTEST_DEPS) 141c0a68be4Smrg $(GCC_FOR_TARGET) $(C_SELFTEST_FLAGS) \ 142c0a68be4Smrg -wrapper valgrind,--leak-check=full 143c0a68be4Smrg 144c0a68be4Smrg.PHONY: selftest-valgrind 145c0a68be4Smrgselftest-valgrind: selftest-c-valgrind 146c0a68be4Smrg 1471debfc3dSmrg# List of targets that can use the generic check- rule and its // variant. 1481debfc3dSmrglang_checks += check-gcc 1491debfc3dSmrglang_checks_parallelized += check-gcc 1501debfc3dSmrg# For description see the check_$lang_parallelize comment in gcc/Makefile.in. 1511debfc3dSmrgcheck_gcc_parallelize=10000 1521debfc3dSmrg 1531debfc3dSmrg# 'make check' in gcc/ looks for check-c. Redirect it to check-gcc. 1541debfc3dSmrgcheck-c : check-gcc 1551debfc3dSmrg 1561debfc3dSmrg# 1571debfc3dSmrg# Install hooks: 1581debfc3dSmrg# cc1 is installed elsewhere as part of $(COMPILERS). 1591debfc3dSmrg 1601debfc3dSmrgc.install-common: 1611debfc3dSmrgc.install-man: 162a2dc1f3fSmrg 163a2dc1f3fSmrgc.install-plugin: installdirs 164a2dc1f3fSmrg# Install import library. 165a2dc1f3fSmrgifeq ($(plugin_implib),yes) 166a2dc1f3fSmrg $(mkinstalldirs) $(DESTDIR)$(plugin_resourcesdir) 167a2dc1f3fSmrg $(INSTALL_DATA) cc1$(exeext).a $(DESTDIR)/$(plugin_resourcesdir)/cc1$(exeext).a 168a2dc1f3fSmrgendif 169a2dc1f3fSmrg 1701debfc3dSmrgc.uninstall: 1711debfc3dSmrg 1721debfc3dSmrg# 1731debfc3dSmrg# Clean hooks: 1741debfc3dSmrg# A lot of the ancillary files are deleted by the main makefile. 1751debfc3dSmrg# We just have to delete files specific to us. 1761debfc3dSmrg 1771debfc3dSmrgc.mostlyclean: 1781debfc3dSmrg -rm -f cc1$(exeext) 1791debfc3dSmrg -rm -f c/*$(objext) 1801debfc3dSmrg -rm -f c/*$(coverageexts) 1811debfc3dSmrg -rm -f cc1.fda 1821debfc3dSmrgc.clean: 1831debfc3dSmrgc.distclean: 1841debfc3dSmrg -rm -f c/config.status c/Makefile 1851debfc3dSmrgc.maintainer-clean: 1861debfc3dSmrg# 1871debfc3dSmrg# Stage hooks: 1881debfc3dSmrg# The main makefile has already created stage?/cp. 1891debfc3dSmrg 1901debfc3dSmrgc.stage1: stage1-start 1911debfc3dSmrg -mv c/*$(objext) stage1/c 1921debfc3dSmrgc.stage2: stage2-start 1931debfc3dSmrg -mv c/*$(objext) stage2/c 1941debfc3dSmrgc.stage3: stage3-start 1951debfc3dSmrg -mv c/*$(objext) stage3/c 1961debfc3dSmrgc.stage4: stage4-start 1971debfc3dSmrg -mv c/*$(objext) stage4/c 1981debfc3dSmrgc.stageprofile: stageprofile-start 1991debfc3dSmrg -mv c/*$(objext) stageprofile/c 2001debfc3dSmrgc.stagefeedback: stagefeedback-start 2011debfc3dSmrg -mv c/*$(objext) stagefeedback/c 2021debfc3dSmrgc.autostageprofile: autostageprofile-start 2031debfc3dSmrg -mv c/*$(objext) autostageprofile/c 2041debfc3dSmrgc.autostagefeedback: autostagefeedback-start 2051debfc3dSmrg -mv c/*$(objext) autostagefeedback/c 206