1# Dependencies for compiler sources that are generated at build time
2
3# Note: can't use ?= here, not supported by older versions of GNU Make
4
5ifeq ($(origin ADA_GEN_SUBDIR), undefined)
6ADA_GEN_SUBDIR=ada
7endif
8
9ifeq ($(origin CP), undefined)
10CP=cp
11endif
12
13ifeq ($(origin MKDIR), undefined)
14MKDIR=mkdir -p
15endif
16
17ifeq ($(origin MOVE_IF_CHANGE), undefined)
18MOVE_IF_CHANGE=mv -f
19endif
20
21.PHONY: ada_extra_files
22ada_extra_files : $(ADA_GEN_SUBDIR)/treeprs.ads $(ADA_GEN_SUBDIR)/einfo.h $(ADA_GEN_SUBDIR)/sinfo.h $(ADA_GEN_SUBDIR)/nmake.adb \
23	$(ADA_GEN_SUBDIR)/nmake.ads $(ADA_GEN_SUBDIR)/snames.ads $(ADA_GEN_SUBDIR)/snames.adb $(ADA_GEN_SUBDIR)/snames.h
24
25# We delete the files before copying, below, in case they are read-only.
26
27$(ADA_GEN_SUBDIR)/treeprs.ads : $(ADA_GEN_SUBDIR)/treeprs.adt $(ADA_GEN_SUBDIR)/sinfo.ads $(ADA_GEN_SUBDIR)/xtreeprs.adb
28	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/treeprs
29	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/treeprs/,$(notdir $^))
30	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/treeprs
31	(cd $(ADA_GEN_SUBDIR)/bldtools/treeprs; gnatmake -q xtreeprs ; ./xtreeprs treeprs.ads )
32	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/treeprs/treeprs.ads $(ADA_GEN_SUBDIR)/treeprs.ads
33
34$(ADA_GEN_SUBDIR)/einfo.h : $(ADA_GEN_SUBDIR)/einfo.ads $(ADA_GEN_SUBDIR)/einfo.adb $(ADA_GEN_SUBDIR)/xeinfo.adb $(ADA_GEN_SUBDIR)/ceinfo.adb
35	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/einfo
36	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/einfo/,$(notdir $^))
37	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/einfo
38	(cd $(ADA_GEN_SUBDIR)/bldtools/einfo; gnatmake -q xeinfo ; ./xeinfo einfo.h )
39	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/einfo/einfo.h $(ADA_GEN_SUBDIR)/einfo.h
40
41$(ADA_GEN_SUBDIR)/sinfo.h : $(ADA_GEN_SUBDIR)/sinfo.ads $(ADA_GEN_SUBDIR)/sinfo.adb $(ADA_GEN_SUBDIR)/xsinfo.adb $(ADA_GEN_SUBDIR)/csinfo.adb
42	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/sinfo
43	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/sinfo/,$(notdir $^))
44	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/sinfo
45	(cd $(ADA_GEN_SUBDIR)/bldtools/sinfo; gnatmake -q xsinfo ; ./xsinfo sinfo.h )
46	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/sinfo/sinfo.h $(ADA_GEN_SUBDIR)/sinfo.h
47
48$(ADA_GEN_SUBDIR)/snames.h $(ADA_GEN_SUBDIR)/snames.ads $(ADA_GEN_SUBDIR)/snames.adb : $(ADA_GEN_SUBDIR)/stamp-snames ; @true
49$(ADA_GEN_SUBDIR)/stamp-snames : $(ADA_GEN_SUBDIR)/snames.ads-tmpl $(ADA_GEN_SUBDIR)/snames.adb-tmpl $(ADA_GEN_SUBDIR)/snames.h-tmpl $(ADA_GEN_SUBDIR)/xsnamest.adb $(ADA_GEN_SUBDIR)/xutil.ads $(ADA_GEN_SUBDIR)/xutil.adb
50	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/snamest
51	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/snamest/,$(notdir $^))
52	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/snamest
53	(cd $(ADA_GEN_SUBDIR)/bldtools/snamest; gnatmake -q xsnamest ; ./xsnamest )
54	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/snamest/snames.ns $(ADA_GEN_SUBDIR)/snames.ads
55	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/snamest/snames.nb $(ADA_GEN_SUBDIR)/snames.adb
56	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/snamest/snames.nh $(ADA_GEN_SUBDIR)/snames.h
57	touch $(ADA_GEN_SUBDIR)/stamp-snames
58
59$(ADA_GEN_SUBDIR)/nmake.adb $(ADA_GEN_SUBDIR)/nmake.ads: $(ADA_GEN_SUBDIR)/stamp-nmake ; @true
60$(ADA_GEN_SUBDIR)/stamp-nmake: $(ADA_GEN_SUBDIR)/sinfo.ads $(ADA_GEN_SUBDIR)/nmake.adt $(ADA_GEN_SUBDIR)/xnmake.adb $(ADA_GEN_SUBDIR)/xutil.ads $(ADA_GEN_SUBDIR)/xutil.adb
61	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/nmake
62	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/nmake/,$(notdir $^))
63	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/nmake
64	(cd $(ADA_GEN_SUBDIR)/bldtools/nmake; gnatmake -q xnmake ; ./xnmake -b nmake.adb ; ./xnmake -s nmake.ads)
65	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/nmake/nmake.ads $(ADA_GEN_SUBDIR)/nmake.ads
66	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/nmake/nmake.adb $(ADA_GEN_SUBDIR)/nmake.adb
67	touch $(ADA_GEN_SUBDIR)/stamp-nmake
68
69# GCC_FOR_TARGET has paths relative to the gcc directory, so we need to adjust
70# for running it from $(ADA_GEN_SUBDIR)/bldtools/oscons.
71
72OSCONS_CC=$(subst ./xgcc,../../../xgcc,$(subst -B./, -B../../../,$(GCC_FOR_TARGET)))
73
74# The main ada source directory must be on the include path for #include "..."
75# because s-oscons-tmplt.c requires adaint.h, gsocket.h, and any file included
76# by these headers. However note that we must use -iquote, not -I, so that
77# ada/types.h does not conflict with a same-named system header (VxWorks
78# has a <types.h> header).
79
80OSCONS_SRCDIR=$${_oscons_srcdir}
81OSCONS_CPP=$(OSCONS_CC) $(GNATLIBCFLAGS) -E -C \
82  -DTARGET=\"$(target)\" -iquote $(OSCONS_SRCDIR) s-oscons-tmplt.c > s-oscons-tmplt.i
83OSCONS_EXTRACT=$(OSCONS_CC) -iquote $(OSCONS_SRCDIR) -S s-oscons-tmplt.i
84
85# Note: if you need to build with a non-GNU compiler, you could adapt the
86# following definitions (written for VMS DEC-C)
87#OSCONS_CPP=../../../$(DECC) -E /comment=as_is -DNATIVE \
88#             -DTARGET='""$(target)""' -I$(OSCONS_SRCDIR) s-oscons-tmplt.c
89#
90#OSCONS_EXTRACT=../../../$(DECC) -DNATIVE \
91#                 -DTARGET='""$(target)""' -I$(OSCONS_SRCDIR) s-oscons-tmplt.c ; \
92#  ld -o s-oscons-tmplt.exe s-oscons-tmplt.obj; \
93#  ./s-oscons-tmplt.exe > s-oscons-tmplt.s
94
95# Note: the first dependency of s-oscons.ads *must* remain s-oscons-tmplt.c, as
96# we use $(<D) to locate the main ada/ source directory and pass it to OSCONS_CPP
97# as a -I argument.
98$(ADA_GEN_SUBDIR)/s-oscons.ads : $(ADA_GEN_SUBDIR)/s-oscons-tmplt.c $(ADA_GEN_SUBDIR)/xoscons.adb $(ADA_GEN_SUBDIR)/xutil.ads $(ADA_GEN_SUBDIR)/xutil.adb
99	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/oscons
100	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/oscons/,$(notdir $^))
101	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/oscons
102	_oscons_srcdir=`cd $(<D) && pwd` ; \
103	(cd $(ADA_GEN_SUBDIR)/bldtools/oscons ; gnatmake -q xoscons ; \
104		$(RM) s-oscons-tmplt.i s-oscons-tmplt.s ; \
105		$(OSCONS_CPP) ; \
106		$(OSCONS_EXTRACT) ; \
107		./xoscons s-oscons ) ; \
108		$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/oscons/s-oscons.ads $(ADA_GEN_SUBDIR)/s-oscons.ads ; \
109		$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/oscons/s-oscons.h $(ADA_GEN_SUBDIR)/s-oscons.h
110
111$(ADA_GEN_SUBDIR)/sdefault.adb: $(ADA_GEN_SUBDIR)/stamp-sdefault ; @true
112$(ADA_GEN_SUBDIR)/stamp-sdefault : $(srcdir)/version.c Makefile
113	$(ECHO) "pragma Style_Checks (Off);" >tmp-sdefault.adb
114	$(ECHO) "with Osint; use Osint;" >>tmp-sdefault.adb
115	$(ECHO) "package body Sdefault is" >>tmp-sdefault.adb
116	$(ECHO) "   S0 : constant String := \"$(prefix)/\";" >>tmp-sdefault.adb
117	$(ECHO) "   S1 : constant String := \"$(ADA_INCLUDE_DIR)/\";" >>tmp-sdefault.adb
118	$(ECHO) "   S2 : constant String := \"$(ADA_RTL_OBJ_DIR)/\";" >>tmp-sdefault.adb
119	$(ECHO) "   S3 : constant String := \"$(target_noncanonical)/\";" >>tmp-sdefault.adb
120	$(ECHO) "   S4 : constant String := \"$(libsubdir)/\";" >>tmp-sdefault.adb
121	$(ECHO) "   function Include_Dir_Default_Name return String_Ptr is" >>tmp-sdefault.adb
122	$(ECHO) "   begin" >>tmp-sdefault.adb
123	$(ECHO) "      return Relocate_Path (S0, S1);" >>tmp-sdefault.adb
124	$(ECHO) "   end Include_Dir_Default_Name;" >>tmp-sdefault.adb
125	$(ECHO) "   function Object_Dir_Default_Name return String_Ptr is" >>tmp-sdefault.adb
126	$(ECHO) "   begin" >>tmp-sdefault.adb
127	$(ECHO) "      return Relocate_Path (S0, S2);" >>tmp-sdefault.adb
128	$(ECHO) "   end Object_Dir_Default_Name;" >>tmp-sdefault.adb
129	$(ECHO) "   function Target_Name return String_Ptr is" >>tmp-sdefault.adb
130	$(ECHO) "   begin" >>tmp-sdefault.adb
131	$(ECHO) "      return new String'(S3);" >>tmp-sdefault.adb
132	$(ECHO) "   end Target_Name;" >>tmp-sdefault.adb
133	$(ECHO) "   function Search_Dir_Prefix return String_Ptr is" >>tmp-sdefault.adb
134	$(ECHO) "   begin" >>tmp-sdefault.adb
135	$(ECHO) "      return Relocate_Path (S0, S4);" >>tmp-sdefault.adb
136	$(ECHO) "   end Search_Dir_Prefix;" >>tmp-sdefault.adb
137	$(ECHO) "end Sdefault;" >> tmp-sdefault.adb
138	$(MOVE_IF_CHANGE) tmp-sdefault.adb $(ADA_GEN_SUBDIR)/sdefault.adb
139	touch $(ADA_GEN_SUBDIR)/stamp-sdefault
140
141$(ADA_GEN_SUBDIR)/gnat.hlp :  $(ADA_GEN_SUBDIR)/vms_help.adb $(ADA_GEN_SUBDIR)/vms_cmds.ads $(ADA_GEN_SUBDIR)/gnat.help_in $(ADA_GEN_SUBDIR)/vms_data.ads
142	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/gnat_hlp
143	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/gnat_hlp/,$(notdir $^))
144	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/gnat_hlp
145	(cd $(ADA_GEN_SUBDIR)/bldtools/gnat_hlp; \
146	  gnatmake -q vms_help; \
147	  ./vms_help$(build_exeext) gnat.help_in vms_data.ads ../../gnat.hlp)
148