1 # Top level -*- makefile -*- fragment for GNU Ada (GNAT).
2 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
4 # Free Software Foundation, Inc.
6 #This file is part of GCC.
8 #GCC is free software; you can redistribute it and/or modify
9 #it under the terms of the GNU General Public License as published by
10 #the Free Software Foundation; either version 3, or (at your option)
13 #GCC is distributed in the hope that it will be useful,
14 #but WITHOUT ANY WARRANTY; without even the implied warranty of
15 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 #GNU General Public License for more details.
18 #You should have received a copy of the GNU General Public License
19 #along with GCC; see the file COPYING3. If not see
20 #<http://www.gnu.org/licenses/>.
22 # This file provides the language dependent support in the main Makefile.
23 # Each language makefile fragment must provide the following targets:
25 # foo.all.cross, foo.start.encap, foo.rest.encap,
26 # foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
27 # foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
28 # foo.mostlyclean, foo.clean, foo.distclean,
29 # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
31 # where `foo' is the name of the language.
33 # It should also provide rules for:
35 # - making any compiler driver (eg: g++)
36 # - the compiler proper (eg: cc1plus)
37 # - define the names for selecting the language in LANGUAGES.
47 # Extra flags to pass to recursive makes.
48 COMMON_ADAFLAGS= -gnatpg
49 ifeq ($(TREECHECKING),)
52 CHECKING_ADAFLAGS= -gnata
54 WARN_ADAFLAGS= -W -Wall
56 # For native builds, the base compiler might be old and we need to arrange for
57 # style warnings not to be flagged as errors during stage1. Cross compilers
58 # need to be built by a recent/matching native so we might as well leave the
59 # checks fully active.
66 ADAFLAGS=$(COMMON_ADAFLAGS) -gnatwns
68 ifeq ($(if $(wildcard ../stage_current),$(shell cat ../stage_current),stage1),stage1)
73 ADAFLAGS=$(COMMON_ADAFLAGS)
77 $(CFLAGS) $(ADA_CFLAGS) $(ADAFLAGS) $(CHECKING_ADAFLAGS) $(WARN_ADAFLAGS)
78 FORCE_DEBUG_ADAFLAGS = -g
80 COMMON_ADA_INCLUDES = -I- -I. -Iada/generated -Iada -I$(srcdir)/ada
84 ifeq ($(strip $(filter-out linux%,$(host_os))),)
88 ifeq ($(strip $(filter-out hpux%,$(host_os))),)
89 STAGE1_LIBS=/usr/lib/libcl.a
93 ADA_INCLUDES=$(COMMON_ADA_INCLUDES)
94 adalib=$(dir $(shell $(CC) -print-libgcc-file-name))adalib
95 GNATLIB=$(adalib)/$(if $(wildcard $(adalib)/libgnat.a),libgnat.a,libgnat.so) $(STAGE1_LIBS)
97 ADA_INCLUDES=-nostdinc $(COMMON_ADA_INCLUDES) -Iada/libgnat -I$(srcdir)/ada/libgnat -Iada/gcc-interface -I$(srcdir)/ada/gcc-interface
100 GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc
101 GNATLIBCFLAGS= -g -O2 $(TCFLAGS)
102 ADA_INCLUDE_DIR = $(libsubdir)/adainclude
103 ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
105 # We do not want the WARN_CFLAGS of the compiler in Ada as it is for C/C++.
106 COMMON_FLAGS_TO_PASS = $(filter-out $(WARN_CFLAGS), $(FLAGS_TO_PASS))
107 ADA_FLAGS_TO_PASS = \
108 "ADA_FOR_BUILD=$(ADA_FOR_BUILD)" \
109 "ADA_INCLUDE_DIR=$(ADA_INCLUDE_DIR)" \
110 "ADA_RTL_OBJ_DIR=$(ADA_RTL_OBJ_DIR)" \
111 "ADAFLAGS=$(ADAFLAGS) $(WARN_ADAFLAGS)" \
112 "ADA_FOR_TARGET=$(ADA_FOR_TARGET)" \
113 "INSTALL=$(INSTALL)" \
114 "INSTALL_DATA=$(INSTALL_DATA)" \
115 "INSTALL_PROGRAM=$(INSTALL_PROGRAM)"
117 # List of Ada tools to build and install
118 ADA_TOOLS=gnatbind gnatchop gnat gnatkr gnatlink gnatls gnatmake \
119 gnatname gnatprep gnatclean
121 # Say how to compile Ada programs.
122 .SUFFIXES: .ada .adb .ads
124 # FIXME: need to add $(ADA_CFLAGS) to .c.o suffix rule
125 # Use mildly strict warnings for this front end and add special flags.
126 ada-warn = $(ADA_CFLAGS) $(filter-out -pedantic, $(STRICT_WARN))
127 # Unresolved warnings in specific files.
128 ada/adaint.o-warn = -Wno-error
130 ada/%.o: ada/gcc-interface/%.c
134 # Function that dumps the dependencies of an Ada object. Dependency only work
135 # fully if the compiler support -gnatd.n. Otherwise a fallback mechanism is
136 # used. The fallback mechanism parse the ali files to get the list of
137 # dependencies and try to guess their location. If the location cannot be found
138 # then the dependency is ignored.
139 ifeq ($(findstring -gnatd.n,$(ALL_ADAFLAGS)),)
141 mkdir -p $(dir $@)/$(DEPDIR); \
143 a="`echo $@ | sed -e 's/.o$$/.ali/'`"; \
144 for d in `cat $$a | sed -ne 's;^D \([a-z0-9_\.-]*\).*;\1;gp'`; do \
145 for l in ada $(srcdir)/ada ada/libgnat $(srcdir)/ada/libgnat; do \
146 if test -f $$l/$$d; then \
152 >$(dir $@)/$(DEPDIR)/$(patsubst %.o,%.Po,$(notdir $@))
153 ADA_OUTPUT_OPTION = $(OUTPUT_OPTION)
156 mkdir -p $(dir $@)/$(DEPDIR); \
157 (echo "$@: $< " | tr -d '\015' | tr -d '\n'; \
158 cat $@.gnatd.n | tr -d '\015' | tr '\n' ' '; \
160 >$(dir $@)/$(DEPDIR)/$(patsubst %.o,%.Po,$(notdir $@))
161 ADA_OUTPUT_OPTION = $(OUTPUT_OPTION) > $@.gnatd.n
167 $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
172 $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
175 # Define the names for selecting Ada in LANGUAGES.
176 ada: gnat1$(exeext) gnatbind$(exeext)
177 ada.serial = gnat1$(exeext)
179 # Tell GNU Make to ignore these, if they exist.
182 # Compute the FLAGS to pass for gnattools, now linked with a C++ driver as
183 # we're linking against at least libcommon which contains C++ compiled code.
184 # We need to use the same driver to link as the one that was used to produce
185 # the objects, which depends on whether we're bootstrapping or not. The CXX
186 # variable conveys what we need for this, set to "g++" if not bootstrapping,
187 # ".../xg++" otherwise.
189 # There are too many Ada sources to check against here. Let's
190 # always force the recursive make.
191 ifeq ($(build), $(host))
192 ifeq ($(host), $(target))
193 # This is a regular native. So use the compiler from our current build
195 ADA_TOOLS_FLAGS_TO_PASS=\
196 CC="../../xgcc -B../../" \
198 $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
199 ADA_INCLUDES="-I- -I../generated -I../rts" \
200 GNATMAKE="../../gnatmake" \
201 GNATLINK="../../gnatlink" \
202 GNATBIND="../../gnatbind"
204 # This is a regular cross compiler. Use the native compiler to compile
207 # put the host RTS dir first in the PATH to hide the default runtime
208 # files that are among the sources
209 ifneq ($(findstring ada,$(LANGUAGES)),)
210 RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
213 ADA_TOOLS_FLAGS_TO_PASS=\
216 $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
217 ADA_INCLUDES="-I../generated -I$(RTS_DIR)/../adainclude -I$(RTS_DIR)" \
218 GNATMAKE="gnatmake" \
219 GNATBIND="gnatbind" \
220 GNATLINK="gnatlink" \
224 # Build is different from host so we are either building a canadian cross
225 # or a cross-native compiler. We provide defaults for tools targeting the
226 # host platform, but they can be overriden by just setting <tool>_FOR_HOST
228 GNATMAKE_FOR_HOST=$(host_noncanonical)-gnatmake
229 GNATBIND_FOR_HOST=$(host_noncanonical)-gnatbind
230 GNATLINK_FOR_HOST=$(host_noncanonical)-gnatlink
231 GNATLS_FOR_HOST=$(host_noncanonical)-gnatls
233 ifeq ($(host), $(target))
234 # This is a cross native. All the sources are taken from the currently
236 ADA_TOOLS_FLAGS_TO_PASS=\
239 $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
240 ADA_INCLUDES="-I../generated -I../rts" \
241 GNATMAKE="$(GNATMAKE_FOR_HOST)" \
242 GNATBIND="$(GNATBIND_FOR_HOST)" \
243 GNATLINK="$(GNATLINK_FOR_HOST)" \
246 # This is a canadian cross. We should use a toolchain running on the
247 # build platform and targeting the host platform.
248 ifneq ($(findstring ada,$(LANGUAGES)),)
249 RTS_DIR:=$(strip $(subst \,/,$(shell $(GNATLS_FOR_HOST) -v | grep adalib )))
251 ADA_TOOLS_FLAGS_TO_PASS=\
254 $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
255 ADA_INCLUDES="-I../generated -I$(RTS_DIR)/../adainclude -I$(RTS_DIR)" \
256 GNATMAKE="$(GNATMAKE_FOR_HOST)" \
257 GNATBIND="$(GNATBIND_FOR_HOST)" \
258 GNATLINK="$(GNATLINK_FOR_HOST)" \
263 # Strip -Werror during linking for the LTO bootstrap
264 GCC_LINKERFLAGS = $(filter-out -Werror, $(ALL_LINKERFLAGS))
266 GCC_LINK=$(LINKER) $(GCC_LINKERFLAGS) $(LDFLAGS)
267 GCC_LLINK=$(LLINKER) $(GCC_LINKERFLAGS) $(LDFLAGS)
269 # Lists of files for various purposes.
271 # Languages-specific object files for Ada.
273 # Object files from C sources that are used by gnat1
274 # adadecode.o should not be needed with sufficiently recent compilers
287 # Object files from Ada sources that are used by gnat1
294 ada/backend_utils.o \
304 ada/einfo-entities.o \
337 ada/exp_put_image.o \
379 ada/repinfo-input.o \
464 ifeq ($(STAGE1),False)
481 ada/gcc-interface/system.o \
482 ada/libgnat/a-assert.o \
483 ada/libgnat/a-charac.o \
484 ada/libgnat/a-chlat1.o \
485 ada/libgnat/a-elchha.o \
486 ada/libgnat/a-except.o \
487 ada/libgnat/a-exctra.o \
488 ada/libgnat/a-ioexce.o \
490 ada/libgnat/g-byorma.o \
491 ada/libgnat/g-heasor.o \
492 ada/libgnat/g-htable.o \
493 ada/libgnat/g-spchge.o \
494 ada/libgnat/g-speche.o \
495 ada/libgnat/g-table.o \
496 ada/libgnat/g-u3spch.o \
497 ada/libgnat/interfac.o \
498 ada/libgnat/s-addope.o \
499 ada/libgnat/s-addima.o \
500 ada/libgnat/s-assert.o \
501 ada/libgnat/s-bitops.o \
502 ada/libgnat/s-carun8.o \
503 ada/libgnat/s-casuti.o \
504 ada/libgnat/s-crtl.o \
505 ada/libgnat/s-conca2.o \
506 ada/libgnat/s-conca3.o \
507 ada/libgnat/s-conca4.o \
508 ada/libgnat/s-conca5.o \
509 ada/libgnat/s-conca6.o \
510 ada/libgnat/s-conca7.o \
511 ada/libgnat/s-conca8.o \
512 ada/libgnat/s-conca9.o \
513 ada/libgnat/s-crc32.o \
514 ada/libgnat/s-excdeb.o \
515 ada/libgnat/s-except.o \
516 ada/libgnat/s-excmac.o \
517 ada/libgnat/s-exctab.o \
518 ada/libgnat/s-htable.o \
519 ada/libgnat/s-imgint.o \
520 ada/libgnat/s-mastop.o \
521 ada/libgnat/s-memory.o \
522 ada/libgnat/s-os_lib.o \
523 ada/libgnat/s-parame.o \
524 ada/libgnat/s-purexc.o \
525 ada/libgnat/s-restri.o \
526 ada/libgnat/s-secsta.o \
527 ada/libgnat/s-soflin.o \
528 ada/libgnat/s-soliin.o \
529 ada/libgnat/s-stache.o \
530 ada/libgnat/s-stalib.o \
531 ada/libgnat/s-stoele.o \
532 ada/libgnat/s-strcom.o \
533 ada/libgnat/s-strhas.o \
534 ada/libgnat/s-string.o \
535 ada/libgnat/s-traceb.o \
536 ada/libgnat/s-traent.o \
537 ada/libgnat/s-trasym.o \
538 ada/libgnat/s-unstyp.o \
539 ada/libgnat/s-valint.o \
540 ada/libgnat/s-valuns.o \
541 ada/libgnat/s-valuti.o \
542 ada/libgnat/s-wchcnv.o \
543 ada/libgnat/s-wchcon.o \
544 ada/libgnat/s-wchjis.o \
545 ada/libgnat/s-wchstw.o
548 # Object files for gnat executables
549 GNAT1_ADA_OBJS = $(GNAT_ADA_OBJS) ada/back_end.o ada/gnat1drv.o
551 GNAT1_OBJS = $(GNAT1_C_OBJS) $(GNAT1_ADA_OBJS) ada/b_gnat1.o
564 ada/bindo-augmentors.o \
565 ada/bindo-builders.o \
566 ada/bindo-diagnostics.o \
567 ada/bindo-elaborators.o \
570 ada/bindo-validators.o \
571 ada/bindo-writers.o \
577 ada/einfo-entities.o \
639 ifeq ($(STAGE1),False)
648 ada/gcc-interface/system.o \
649 ada/libgnat/a-assert.o \
650 ada/libgnat/a-elchha.o \
651 ada/libgnat/a-except.o \
653 ada/libgnat/g-byorma.o \
654 ada/libgnat/g-hesora.o \
655 ada/libgnat/g-htable.o \
656 ada/libgnat/interfac.o \
657 ada/libgnat/s-addope.o \
658 ada/libgnat/s-assert.o \
659 ada/libgnat/s-carun8.o \
660 ada/libgnat/s-casuti.o \
661 ada/libgnat/s-conca2.o \
662 ada/libgnat/s-conca3.o \
663 ada/libgnat/s-conca4.o \
664 ada/libgnat/s-conca5.o \
665 ada/libgnat/s-conca6.o \
666 ada/libgnat/s-conca7.o \
667 ada/libgnat/s-conca8.o \
668 ada/libgnat/s-conca9.o \
669 ada/libgnat/s-crc32.o \
670 ada/libgnat/s-excdeb.o \
671 ada/libgnat/s-except.o \
672 ada/libgnat/s-excmac.o \
673 ada/libgnat/s-exctab.o \
674 ada/libgnat/s-htable.o \
675 ada/libgnat/s-imgint.o \
676 ada/libgnat/s-mastop.o \
677 ada/libgnat/s-memory.o \
678 ada/libgnat/s-os_lib.o \
679 ada/libgnat/s-parame.o \
680 ada/libgnat/s-restri.o \
681 ada/libgnat/s-secsta.o \
682 ada/libgnat/s-soflin.o \
683 ada/libgnat/s-soliin.o \
684 ada/libgnat/s-stache.o \
685 ada/libgnat/s-stalib.o \
686 ada/libgnat/s-stoele.o \
687 ada/libgnat/s-strhas.o \
688 ada/libgnat/s-string.o \
689 ada/libgnat/s-traent.o \
690 ada/libgnat/s-traceb.o \
691 ada/libgnat/s-unstyp.o \
692 ada/libgnat/s-wchcnv.o \
693 ada/libgnat/s-wchcon.o \
694 ada/libgnat/s-wchjis.o \
695 ada/libgnat/s-wchstw.o \
704 # Language-independent object files.
705 ADA_BACKEND = $(BACKEND) attribs.o
707 # List of target dependent sources, overridden below as necessary
710 # Select the right s-excmac according to exception layout (Itanium or arm)
711 host_cpu=$(word 1, $(subst -, ,$(host)))
713 ifeq ($(strip $(filter-out arm%,$(host_cpu))),)
718 CFLAGS-ada/raise-gcc.o += -I$(srcdir)/../libgcc -DEH_MECHANISM_$(EH_MECHANISM)
720 # Under aarch64 darwin, we need to include the iOS signal trampoline.
722 ifeq ($(strip $(filter-out aarch64 arm64 darwin%,$(host_cpu) $(host_os))),)
723 EXTRA_HOST_OBJS=ada/sigtramp-ios.o
728 ada/libgnat/s-excmac.o: ada/libgnat/s-excmac.ads ada/libgnat/s-excmac.adb
730 ada/libgnat/s-excmac.ads: $(srcdir)/ada/libgnat/s-excmac__$(EH_MECHANISM).ads
734 ada/libgnat/s-excmac.adb: $(srcdir)/ada/libgnat/s-excmac__$(EH_MECHANISM).adb
738 # Needs to be built with CC=gcc
739 # Since the RTL should be built with the latest compiler, remove the
740 # stamp target in the parent directory whenever gnat1 is rebuilt
741 gnat1$(exeext): $(TARGET_ADA_SRCS) $(GNAT1_OBJS) $(ADA_BACKEND) $(EXTRA_HOST_OBJS) libcommon-target.a \
742 $(EXTRA_HOST_OBJS) $(LIBDEPS) $(ada.prev)
743 @$(call LINK_PROGRESS,$(INDEX.ada),start)
744 +$(GCC_LLINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) $(EXTRA_HOST_OBJS) $(CFLAGS) \
745 libcommon-target.a $(LIBS) $(SYSLIBS) $(BACKENDLIBS) $(GNATLIB)
746 $(RM) stamp-gnatlib2-rts stamp-tools
747 @$(call LINK_PROGRESS,$(INDEX.ada),end)
749 gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) $(EXTRA_HOST_OBJS) ggc-none.o libcommon-target.a $(LIBDEPS)
750 +$(GCC_LINK) -o $@ $(CFLAGS) ada/b_gnatb.o $(GNATBIND_OBJS) $(EXTRA_HOST_OBJS) ggc-none.o libcommon-target.a $(LIBS) $(SYSLIBS) $(GNATLIB)
752 # use target-gcc target-gnatmake target-gnatbind target-gnatlink
753 gnattools: $(GCC_PARTS) $(CONFIG_H) prefix.o force
754 $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1
755 $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
758 $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1-re
759 $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
761 cross-gnattools: force
762 $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1-re
763 $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
765 canadian-gnattools: force
766 $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1-re
767 $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
769 gnatlib gnatlib-sjlj gnatlib-zcx gnatlib-shared: force
770 $(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) \
771 GNATLIBFLAGS="$(GNATLIBFLAGS)" \
772 GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
773 TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
774 THREAD_KIND="$(THREAD_KIND)" \
776 FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \
779 # use only for native compiler
780 gnatlib_and_tools: gnatlib gnattools
785 for tool in $(ADA_TOOLS) ; do \
786 if [ -f $$tool$(exeext) ] ; \
788 $(MV) $$tool$(exeext) $$tool-cross$(exeext); \
799 cd $(srcdir)/ada && $(ETAGS) -o TAGS.sub *.c *.h *.ads *.adb && \
800 $(ETAGS) --include TAGS.sub --include ../TAGS.sub
803 # Generate documentation.
805 doc/gnat_ugn.info: ada/gnat_ugn.texi \
806 $(gcc_docdir)/include/fdl.texi $(gcc_docdir)/include/gcc-common.texi \
808 if [ x$(BUILD_INFO) = xinfo ]; then \
810 $(MAKEINFO) $(MAKEINFOFLAGS) -I$(gcc_docdir)/include \
811 -I$(srcdir)/ada -o $@ $<; \
814 doc/gnat_rm.info: ada/gnat_rm.texi $(gcc_docdir)/include/fdl.texi \
815 $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
816 if [ x$(BUILD_INFO) = xinfo ]; then \
818 $(MAKEINFO) $(MAKEINFOFLAGS) -I$(gcc_docdir)/include \
819 -I$(srcdir)/ada -o $@ $<; \
822 doc/gnat-style.info: ada/gnat-style.texi $(gcc_docdir)/include/fdl.texi \
823 $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
824 if [ x$(BUILD_INFO) = xinfo ]; then \
826 $(MAKEINFO) $(MAKEINFOFLAGS) -I$(gcc_docdir)/include \
827 -I$(srcdir)/ada -o $@ $<; \
830 ADA_INFOFILES = doc/gnat_ugn.info doc/gnat_rm.info doc/gnat-style.info
832 ada.info: $(ADA_INFOFILES)
834 ada.srcinfo: $(ADA_INFOFILES)
835 -$(CP) $^ $(srcdir)/doc
837 ada.install-info: $(DESTDIR)$(infodir)/gnat_ugn.info \
838 $(DESTDIR)$(infodir)/gnat_rm.info \
839 $(DESTDIR)$(infodir)/gnat-style.info
841 ADA_DVIFILES = doc/gnat_ugn.dvi \
842 doc/gnat_rm.dvi doc/gnat-style.dvi
844 ada.dvi: $(ADA_DVIFILES)
846 ada.install-dvi: $(ADA_DVIFILES)
848 test -z "$(dvidir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc"
849 @list='$(ADA_DVIFILES)'; for p in $$list; do \
850 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
851 f=$(dvi__strip_dir) \
852 echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \
853 $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \
856 ADA_PDFFILES = doc/gnat_ugn.pdf \
857 doc/gnat_rm.pdf doc/gnat-style.pdf
859 ada.pdf: $(ADA_PDFFILES)
861 ada.install-pdf: $(ADA_PDFFILES)
863 test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
864 @list='$(ADA_PDFFILES)'; for p in $$list; do \
865 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
866 f=$(pdf__strip_dir) \
867 echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
868 $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
875 doc/gnat_ugn.dvi: ada/gnat_ugn.texi \
876 $(gcc_docdir)/include/fdl.texi \
877 $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
878 $(TEXI2DVI) -c -I $(abs_docdir)/include -o $@ $<
880 doc/gnat_rm.dvi: ada/gnat_rm.texi $(gcc_docdir)/include/fdl.texi \
881 $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
882 $(TEXI2DVI) -c -I $(abs_docdir)/include -o $@ $<
884 doc/gnat-style.dvi: ada/gnat-style.texi $(gcc_docdir)/include/fdl.texi
885 $(TEXI2DVI) -c -I $(abs_docdir)/include -o $@ $<
887 doc/gnat_ugn.pdf: ada/gnat_ugn.texi \
888 $(gcc_docdir)/include/fdl.texi \
889 $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
890 $(TEXI2PDF) -c -I $(abs_docdir)/include -o $@ $<
892 doc/gnat_rm.pdf: ada/gnat_rm.texi $(gcc_docdir)/include/fdl.texi \
893 $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
894 $(TEXI2PDF) -c -I $(abs_docdir)/include -o $@ $<
896 doc/gnat-style.pdf: ada/gnat-style.texi $(gcc_docdir)/include/fdl.texi
897 $(TEXI2PDF) -c -I $(abs_docdir)/include -o $@ $<
900 # gnat1 is installed elsewhere as part of $(COMPILERS).
902 # Install the binder program as gnatbind (native) or $(prefix)gnatbind
903 # (cross). $(prefix) comes from the --program-prefix configure option,
904 # or from the --target option if the former is not specified.
905 # Do the same for the rest of the Ada tools (gnatchop, gnat, gnatkr,
906 # gnatlink, gnatls, gnatmake, gnatname, gnatprep, gnatclean).
907 # gnatdll is only used on Windows.
908 ada.install-common: $(gnat_install_lib) gnat-install-tools
911 $(MKDIR) $(DESTDIR)$(bindir)
912 -if [ -f gnat1$(exeext) ] ; \
914 for tool in $(ADA_TOOLS) ; do \
915 install_name=`echo $$tool|sed '$(program_transform_name)'`$(exeext); \
916 $(RM) $(DESTDIR)$(bindir)/$$install_name; \
917 if [ -f $$tool-cross$(exeext) ] ; \
919 $(INSTALL_PROGRAM) $$tool-cross$(exeext) $(DESTDIR)$(bindir)/$$install_name; \
921 $(INSTALL_PROGRAM) $$tool$(exeext) $(DESTDIR)$(bindir)/$$install_name; \
924 $(RM) $(DESTDIR)$(bindir)/gnatdll$(exeext); \
925 $(INSTALL_PROGRAM) gnatdll$(exeext) $(DESTDIR)$(bindir)/gnatdll$(exeext); \
929 # Finally, install the library
931 gnat-install-lib: | gnat-install-tools
932 -if [ -f gnat1$(exeext) ] ; \
934 $(MAKE) $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib; \
938 $(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib$(LIBGNAT_TARGET)
941 $(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib-obj
947 for tool in $(ADA_TOOLS) ; do \
948 install_name=`echo $$tool|sed '$(program_transform_name)'`$(exeext); \
949 -$(RM) $(DESTDIR)$(bindir)/$$install_name; \
951 -$(RM) $(DESTDIR)$(tooldir)/bin/gnatdll$(exeext)
954 # A lot of the ancillary files are deleted by the main makefile.
955 # We just have to delete files specific to us.
958 -$(RM) ada/*$(objext) ada/*.ali ada/b_gnat*.ads ada/b_gnat*.adb
959 -$(RM) ada/*$(objext).gnatd.n
960 -$(RM) ada/*$(coverageexts)
961 -$(RM) ada/stamp-sdefault ada/stamp-snames ada/stamp-gen_il
963 -$(RMDIR) ada/libgnat
964 -$(RM) gnatbind$(exeext) gnat1$(exeext)
968 -$(RM) gnatchop$(exeext)
970 -$(RM) gnatdll$(exeext)
971 -$(RM) gnatkr$(exeext)
972 -$(RM) gnatlink$(exeext)
973 -$(RM) gnatls$(exeext)
974 -$(RM) gnatmake$(exeext)
975 -$(RM) gnatname$(exeext)
976 -$(RM) gnatprep$(exeext)
977 -$(RM) gnatclean$(exeext)
982 ada.maintainer-clean:
987 -$(RM) ada/snames.ads ada/snames.adb ada/snames.h
990 # The main makefile has already created stage?/ada
992 ada.stage1: stage1-start
993 -$(MV) ada/*$(objext) ada/*.ali ada/b_gnat*.ad* stage1/ada
994 -$(MV) ada/stamp-* stage1/ada
995 ada.stage2: stage2-start
996 -$(MV) ada/*$(objext) ada/*.ali ada/b_gnat*.ad* stage2/ada
997 -$(MV) ada/stamp-* stage2/ada
998 ada.stage3: stage3-start
999 -$(MV) ada/*$(objext) ada/*.ali ada/b_gnat*.ad* stage3/ada
1000 -$(MV) ada/stamp-* stage3/ada
1001 ada.stage4: stage4-start
1002 -$(MV) ada/*$(objext) ada/*.ali ada/b_gnat*.ad* stage4/ada
1003 -$(MV) ada/stamp-* stage4/ada
1004 ada.stageprofile: stageprofile-start
1005 -$(MV) ada/*$(objext) ada/*.ali ada/b_gnat*.ad* stageprofile/ada
1006 -$(MV) ada/stamp-* stageprofile/ada
1007 ada.stagefeedback: stagefeedback-start
1008 -$(MV) ada/*$(objext) ada/*.ali ada/b_gnat*.ad* stagefeedback/ada
1009 -$(MV) ada/stamp-* stagefeedback/ada
1011 lang_checks += check-gnat
1012 lang_checks_parallelized += check-gnat
1013 # For description see the check_$lang_parallelize comment in gcc/Makefile.in.
1014 check_gnat_parallelize = 1000
1016 check-ada: check-acats check-gnat
1017 check-ada-subtargets: check-acats-subtargets check-gnat-subtargets
1019 # No ada-specific selftests
1022 ACATSDIR = $(TESTSUITEDIR)/ada/acats
1023 ACATSCMD = run_acats.sh
1025 check_acats_numbers0:=1 2 3 4 5 6 7 8 9
1026 check_acats_numbers1:=0 $(check_acats_numbers0)
1027 check_acats_numbers2:=$(foreach i,$(check_acats_numbers0),$(addprefix $(i),$(check_acats_numbers1)))
1028 check_acats_numbers3:=$(addprefix 0,$(check_acats_numbers1)) $(check_acats_numbers2)
1029 check_acats_numbers4:=$(foreach i,$(check_acats_numbers0),$(addprefix $(i),$(check_acats_numbers3)))
1030 check_acats_numbers5:=$(addprefix 0,$(check_acats_numbers3)) $(check_acats_numbers4)
1031 check_acats_numbers6:=$(foreach i,$(check_acats_numbers0),$(addprefix $(i),$(check_acats_numbers5)))
1032 check_acats_numbers:=$(check_acats_numbers0) $(check_acats_numbers2) $(check_acats_numbers4) $(check_acats_numbers6)
1033 check_acats_subdirs=$(wordlist 1, \
1034 $(if $(GCC_TEST_PARALLEL_SLOTS),$(GCC_TEST_PARALLEL_SLOTS),128), \
1035 $(check_acats_numbers))
1036 check_acats_targets = $(addprefix check-acats, $(check_acats_subdirs))
1039 @test -d $(ACATSDIR) || mkdir -p $(ACATSDIR); \
1040 rootme=`${PWD_COMMAND}`; export rootme; \
1041 EXPECT=$(EXPECT); export EXPECT; \
1042 if [ -z "$(CHAPTERS)" ] && [ -n "$(filter -j%, $(MFLAGS))" ]; \
1044 rm -rf $(ACATSDIR)-parallel; \
1045 mkdir $(ACATSDIR)-parallel; \
1046 ( testdir=`cd ${srcdir}/${ACATSDIR} && ${PWD_COMMAND}`; \
1048 cd $(ACATSDIR) && $(SHELL) $${testdir}/$(ACATSCMD) NONE ) \
1050 GCC_RUNTEST_PARALLELIZE_DIR=$$rootme/$(ACATSDIR)-parallel; \
1051 export GCC_RUNTEST_PARALLELIZE_DIR; \
1052 $(MAKE) $(check_acats_targets); \
1053 rm -rf $(ACATSDIR)-parallel; \
1054 acats_sums= ; acats_logs= ; \
1055 for idx in "" $(check_acats_subdirs); do \
1056 [ -d $(ACATSDIR)$$idx ] || continue; \
1057 mv -f $(ACATSDIR)$$idx/acats.sum $(ACATSDIR)$$idx/acats.sum.sep; \
1058 mv -f $(ACATSDIR)$$idx/acats.log $(ACATSDIR)$$idx/acats.log.sep; \
1059 acats_sums="$$acats_sums $(ACATSDIR)$$idx/acats.sum.sep"; \
1060 acats_logs="$$acats_logs $(ACATSDIR)$$idx/acats.log.sep"; \
1062 $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh \
1063 $$acats_sums > $(ACATSDIR)/acats.sum; \
1064 $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh -L \
1065 $$acats_logs > $(ACATSDIR)/acats.log; \
1068 testdir=`cd ${srcdir}/${ACATSDIR} && ${PWD_COMMAND}`; \
1069 export testdir; cd $(ACATSDIR) && $(SHELL) $${testdir}/$(ACATSCMD) $(CHAPTERS)
1071 check-acats-subtargets:
1074 # Parallelized check-acats
1075 $(check_acats_targets): check-acats%:
1076 if [ -f $$GCC_RUNTEST_PARALLELIZE_DIR/finished ]; then \
1077 rm -rf $(ACATSDIR)$*; exit 0; \
1079 test -d $(ACATSDIR)$* || mkdir -p $(ACATSDIR)$*; \
1080 testdir=`cd ${srcdir}/${ACATSDIR} && ${PWD_COMMAND}`; \
1081 export testdir; cd $(ACATSDIR)$* && $(SHELL) $${testdir}/$(ACATSCMD)
1082 touch $$GCC_RUNTEST_PARALLELIZE_DIR/finished
1084 .PHONY: check-acats $(check_acats_targets)
1086 # Compiling object files from source files.
1088 # Ada language specific files.
1090 ada/b_gnat1.adb : $(GNAT1_ADA_OBJS)
1091 # Old gnatbind do not allow a path for -o.
1092 $(GNATBIND) $(GNATBIND_FLAGS) $(ADA_INCLUDES) -o b_gnat1.adb -n ada/gnat1drv.ali
1093 $(MV) b_gnat1.adb b_gnat1.ads ada/
1095 ada/b_gnat1.o : ada/b_gnat1.adb
1096 # Do not use ADAFLAGS to get rid of -gnatg which generates a lot
1097 # of style messages.
1098 $(CC) -c $(CFLAGS) $(ADA_CFLAGS) -gnatp -gnatws $(ADA_INCLUDES) \
1099 $< $(ADA_OUTPUT_OPTION)
1101 ada/b_gnatb.adb : $(GNATBIND_OBJS) ada/gnatbind.o
1102 # Old gnatbind do not allow a path for -o.
1103 $(GNATBIND) $(GNATBIND_FLAGS) $(ADA_INCLUDES) -o b_gnatb.adb ada/gnatbind.ali
1104 $(MV) b_gnatb.adb b_gnatb.ads ada/
1106 ada/b_gnatb.o : ada/b_gnatb.adb
1107 $(CC) -c $(CFLAGS) $(ADA_CFLAGS) -gnatp -gnatws $(ADA_INCLUDES) \
1108 $< $(ADA_OUTPUT_OPTION)
1110 include $(srcdir)/ada/Make-generated.in
1112 ada/sdefault.o : ada/libgnat/ada.ads ada/libgnat/a-except.ads ada/libgnat/a-unccon.ads \
1113 ada/libgnat/a-uncdea.ads ada/alloc.ads ada/debug.ads ada/hostparm.ads ada/namet.ads \
1114 ada/opt.ads ada/osint.ads ada/output.ads ada/sdefault.ads ada/sdefault.adb \
1115 ada/libgnat/s-exctab.ads ada/libgnat/s-memory.ads ada/libgnat/s-os_lib.ads ada/libgnat/s-parame.ads \
1116 ada/libgnat/s-stalib.ads ada/libgnat/s-string.ads ada/libgnat/s-traent.ads ada/libgnat/s-unstyp.ads \
1117 ada/libgnat/s-wchcon.ads ada/table.adb ada/table.ads \
1118 ada/types.ads ada/libgnat/unchdeal.ads ada/libgnat/unchconv.ads \
1119 ada/gcc-interface/system.ads
1121 # Special flags - see gcc-interface/Makefile.in for the template.
1123 ada/libgnat/a-except.o : ada/libgnat/a-except.adb ada/libgnat/a-except.ads ada/libgnat/s-excmac.ads ada/libgnat/s-excmac.adb
1124 $(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O1 -fno-inline \
1125 $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
1128 ada/libgnat/s-excdeb.o : ada/libgnat/s-excdeb.adb ada/libgnat/s-excdeb.ads
1129 $(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 \
1130 $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
1133 ada/libgnat/s-assert.o : ada/libgnat/s-assert.adb ada/libgnat/s-assert.ads
1134 $(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) $(ADA_INCLUDES) \
1135 $< $(ADA_OUTPUT_OPTION)
1138 ada/libgnat/a-tags.o : ada/libgnat/a-tags.adb ada/libgnat/a-tags.ads
1139 $(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) $(ADA_INCLUDES) \
1140 $< $(ADA_OUTPUT_OPTION)
1143 # Handling of gnatvsn version string
1145 # This ensure the build works even if there is no GNAT_DATE present in the
1150 ada/generated/gnatvsn.ads: ada/gnatvsn.ads BASE-VER ada/GNAT_DATE
1151 $(MKDIR) ada/generated
1152 s=`cat $(srcdir)/BASE-VER | sed -e "s/\([0-9]*\)\.\([0-9]*\)\..*/-\1\2/g"`; \
1153 d=`if test -f $(srcdir)/ada/GNAT_DATE; then \
1154 cat $(srcdir)/ada/GNAT_DATE; else date +%Y%m%d; fi`; \
1155 cat $< | sed -e "/Version/s/(\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*)/($$d$$s)/g" >$@
1157 ada/gnatvsn.o : ada/gnatvsn.adb ada/generated/gnatvsn.ads
1158 $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
1161 # Dependencies for windows specific tool (mdll)
1163 ada/mdll.o : ada/mdll.adb ada/mdll.ads ada/mdll-fil.ads ada/mdll-utl.ads
1164 $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
1166 ada/mdll-fil.o : ada/mdll-fil.adb ada/mdll.ads ada/mdll-fil.ads
1167 $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
1169 ada/mdll-utl.o : ada/mdll-utl.adb ada/mdll.ads ada/mdll-utl.ads ada/sdefault.ads ada/types.ads
1170 $(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
1172 # All generated files. Perhaps we should build all of these in the same
1173 # subdirectory, and get rid of ada/bldtools.
1174 # Warning: the files starting with ada/gnat.ads are not really generated,
1175 # instead they are copied from the libgnat subdirectory of the source tree
1176 # during all the stages of the bootstrap, i.e. including stage #1, which
1177 # means that they still need to be compilable by the base compiler.
1178 ADA_GENERATED_FILES = \
1179 ada/sinfo.h ada/einfo.h ada/nmake.adb ada/nmake.ads \
1180 ada/snames.ads ada/snames.adb ada/snames.h \
1181 ada/generated/gnatvsn.ads \
1182 ada/seinfo.ads ada/seinfo_tables.ads ada/seinfo_tables.adb \
1183 ada/sinfo-nodes.ads ada/sinfo-nodes.adb \
1184 ada/einfo-entities.ads ada/einfo-entities.adb \
1185 ada/gnat.ads ada/g-dynhta.ads ada/g-dynhta.adb \
1186 ada/g-dyntab.ads ada/g-dyntab.adb ada/g-graphs.ads ada/g-graphs.adb \
1187 ada/g-lists.ads ada/g-lists.adb ada/g-sets.ads ada/g-sets.adb \
1188 ada/s-rident.ads ada/s-pehage.ads ada/s-pehage.adb \
1189 ada/s-resfil.ads ada/s-resfil.adb ada/s-utf_32.ads ada/s-utf_32.adb
1191 # Only used to manually trigger the creation of the generated files.
1193 ada_generated_files: $(ADA_GENERATED_FILES)
1195 # When building from scratch we don't have dependency files, the only thing
1196 # we need to ensure is that the generated files are created first.
1197 $(GNAT1_OBJS) $(GNATBIND_OBJS): | $(ADA_GENERATED_FILES)
1199 # Manually include the auto-generated dependencies for the Ada host objects.
1200 ADA_DEPFILES = $(foreach obj,$(GNAT1_ADA_OBJS) $(GNATBIND_OBJS),\
1201 $(dir $(obj))/$(DEPDIR)/$(patsubst %.o,%.Po,$(notdir $(obj))))
1202 -include $(ADA_DEPFILES)
1204 # Automatically include the auto-generated dependencies for the C host objects.
1205 ada_OBJS = $(GNAT1_C_OBJS)