1# Top level makefile fragment for TREELANG For GCC. -*- makefile -*- 2 3# Copyright (C) 1994, 1995, 1997, 1998, 1999 2000, 2001, 2002, 2003 Free 4# Software Foundation, Inc. 5 6#This file is part of GCC. 7 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 2, or (at your option) 11#any later version. 12 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. 17 18#You should have received a copy of the GNU General Public License 19#along with GCC; see the file COPYING. If not, write to 20#the Free Software Foundation, 59 Temple Place - Suite 330, 21#Boston, MA 02111-1307, USA. 22 23# This file provides the language dependent support in the main Makefile. 24# Each language makefile fragment must provide the following targets: 25# 26# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap, 27# foo.info, foo.dvi, 28# foo.install-normal, foo.install-common, foo.install-info, foo.install-man, 29# foo.uninstall, foo.distdir, 30# foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean, 31# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4 32# 33# where `foo' is the name of the language. 34# 35# It should also provide rules for: 36# 37# - making any compiler driver (eg: GCC) 38# - the compiler proper (eg: treelang) 39# - define the names for selecting the language in LANGUAGES. 40# 41 42## note program-prefix and program-suffix options are not supported 43## just program_transform_name which is a sed script to transform the 44## names 45 46TREELANGSED = sed 47TREELANGSEDFLAGS = -n 48 49# back end compiler libraries etc 50TREE_BE_LIBS = $(BACKEND) $(LIBIBERTY) $(INTLLIBS) $(LIBS) $(LIBDEPS) 51GCC_EXTRAS = -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include 52 53# ./xgcc is the just built compiler. See GCC_FOR_TARGET in the GCC Makefile.in. 54# If this can't be found, you probably have not done a bootstrap of GCC, 55# which you need to do. 56 57# GCC_FOR_TREELANG = ./xgcc $(GCC_EXTRAS) 58 59TREE_GENERATED = $(srcdir)/treelang/lex.c $(srcdir)/treelang/parse.c\ 60 $(srcdir)/treelang/parse.h $(srcdir)/treelang/parse.output $(srcdir)/treelang/TAGS 61 62TREE_SOURCE = ${srcdir}/treelang/parse.y ${srcdir}/treelang/lex.l ${srcdir}/treelang/tree1.c ${srcdir}/treelang/treelang.h ${srcdir}/treelang/treetree.c $(srcdir)/treelang/treetree.h 63 64TREE_EXES = tree1$(exeext) 65 66#no -Wtraditional warnings, allow long long 67treelang-warn = $(LOOSE_WARN) -pedantic -Wno-long-long -Wmissing-prototypes -Wmissing-declarations 68 69# 70# Define the names for selecting treelang in LANGUAGES. 71 72.phony: treelang TREELANG 73 74treelang TREELANG:treelang.done 75 76treelang.done: tree1$(exeext) 77 $(STAMP) treelang.done 78 79# no preprocessor 80 81# core compiler 82tree1$(exeext): treelang/tree1.o treelang/treetree.o treelang/lex.o treelang/parse.o\ 83 $(TREE_BE_LIBS) c-convert.o c-typeck.o c-common.o c-decl.o attribs.o 84 $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ 85 treelang/tree1.o treelang/treetree.o treelang/lex.o treelang/parse.o c-convert.o\ 86 c-typeck.o c-common.o c-decl.o attribs.o $(TREE_BE_LIBS) 87 88# 89# Compiling object files from source files. 90 91# object file makes 92 93treelang/tree1.o: $(srcdir)/treelang/tree1.c $(srcdir)/treelang/treelang.h \ 94 $(srcdir)/treelang/parse.h $(CONFIG_H) \ 95 gt-treelang-tree1.h gtype-treelang.h 96 $(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $< 97 98treelang/treetree.o: $(srcdir)/treelang/treetree.c $(srcdir)/treelang/treetree.h \ 99 $(CONFIG_H) 100 $(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $< 101 102treelang/parse.o: $(srcdir)/treelang/parse.c $(srcdir)/treelang/treelang.h \ 103 $(srcdir)/treelang/treetree.h $(CONFIG_H) 104 $(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $< 105 106treelang/lex.o: $(srcdir)/treelang/lex.c $(srcdir)/treelang/parse.h \ 107 $(srcdir)/treelang/treelang.h $(CONFIG_H) 108 $(CC) -o $@ -c $(ALL_CFLAGS) $(INCLUDES) $< 109 110# generated files the files from lex and yacc are put into the source 111# directory in case someone wants to build but does not have 112# lex/yacc 113 114$(srcdir)/treelang/lex.c: $(srcdir)/treelang/lex.l 115 $(LEX) $(LEXFLAGS) -o$(srcdir)/treelang/lex.c $(srcdir)/treelang/lex.l 116 117$(srcdir)/treelang/parse.c $(srcdir)/treelang/parse.h: $(srcdir)/treelang/parse.y 118 $(BISON) $(BISONFLAGS) -v $(srcdir)/treelang/parse.y\ 119 --output=$(srcdir)/treelang/parse.c --defines 120# -v 121 122gt-treelang-tree1.h gtype-treelang.h : s-gtype; @true 123 124# 125# Build hooks: 126 127treelang.all.build: treelang 128treelang.all.cross: 129 _error_not_here_yet - havent even thought about it - it may even work 130 131treelang.start.encap: 132treelang.rest.encap: 133 134.phony:treelang.info 135treelang.info: $(srcdir)/treelang/treelang.info 136 137$(srcdir)/treelang/treelang.info: $(srcdir)/treelang/treelang.texi \ 138 $(srcdir)/doc/include/gcc-common.texi \ 139 $(srcdir)/doc/include/gpl.texi \ 140 $(srcdir)/doc/include/fdl.texi \ 141 $(srcdir)/doc/include/funding.texi 142 cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -Idoc/include \ 143 -o treelang/treelang.info treelang/treelang.texi 144 145treelang.dvi: $(srcdir)/treelang/treelang.texi \ 146 $(srcdir)/doc/include/gcc-common.texi \ 147 $(srcdir)/doc/include/gpl.texi \ 148 $(srcdir)/doc/include/fdl.texi \ 149 $(srcdir)/doc/include/funding.texi 150 s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ 151 cd treelang && $(TEXI2DVI) -I $$s/doc/include $$s/treelang/treelang.texi 152 153treelang.generated-manpages: 154 155# 156# Install hooks: 157 158# Nothing to do here. 159treelang.install-normal: treelang.install.common 160 161# Install 162.phony:treelang.install.common 163.phony:treelang.install 164 165treelang.install treelang.install.common treelang.install-common: treelang.install.common.done 166 167treelang.install.common.done: installdirs treelang.done 168 for name in $(TREE_EXES); \ 169 do \ 170 if [ -f $$name ] ; then \ 171 name2="`echo \`basename $$name\` | sed -e '$(program_transform_name)' `"; \ 172 rm -f $(DESTDIR)$(bindir)/$$name2$(exeext); \ 173 echo $(INSTALL_PROGRAM) $$name$(exeext) $(DESTDIR)$(bindir)/$$name2$(exeext); \ 174 $(INSTALL_PROGRAM) $$name$(exeext) $(DESTDIR)$(bindir)/$$name2$(exeext); \ 175 chmod a+x $(DESTDIR)$(bindir)/$$name2$(exeext); \ 176 fi ; \ 177 done 178 $(STAMP) treelang.install.common.done 179 180treelang.install-info: $(srcdir)/treelang/treelang.info 181 if [ -f $(srcdir)/treelang/treelang.info ] ; then \ 182 rm -f $(DESTDIR)$(infodir)/treelang.info*; \ 183 for f in $(srcdir)/treelang/treelang.info*; do \ 184 realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ 185 $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/$$realfile; \ 186 done; \ 187 chmod a-x $(DESTDIR)$(infodir)/treelang.info*; \ 188 else true; fi 189 @if [ -f $(srcdir)/treelang/treelang.info ] ; then \ 190 if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ 191 echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/treelang.info"; \ 192 install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/treelang.info || : ; \ 193 else : ; fi; \ 194 else : ; fi 195 196treelang.install-man: 197 198treelang.uninstall: 199 for name in $(TREE_EXES); \ 200 do \ 201 echo $$name; \ 202 name2="`echo $$name | sed -e '$(program_transform_name)' `"; \ 203 echo becomes $$name2; \ 204 echo -rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \ 205 rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \ 206 done 207 -rm treelang.install.common.done 208 209# 210# Clean hooks: 211# A lot of the ancillary files are deleted by the main makefile. 212# We just have to delete files specific to us. 213 214treelang.mostlyclean: 215 for name in $(TREE_EXES); \ 216 do \ 217 echo deleting $$name; \ 218 if [ -f treelang/$$name$(exeext) ] ; then \ 219 rm -f treelang/$$name$(exeext); \ 220 fi ; \ 221 done 222 -rm -f treelang/*$(objext) 223 -rm -f treelang/*$(coverageexts) 224 -rm treelang.done 225 226 227treelang.clean: treelang.mostlyclean 228 229treelang.distclean: treelang.clean 230 -rm -f treelang/config.status 231 -rm -f treelang/*.output 232 233treelang.extraclean: treelang.distclean 234 235treelang.maintainer-clean: treelang.extraclean 236 for name in $(TREE_GENERATED); \ 237 do \ 238 if [ -f $(srcdir)/treelang/$$name ] ; then \ 239 echo deleting $(srcdir)/treelang/$$name; \ 240 rm -f $(srcdir)/treelang/$$name; \ 241 fi ; \ 242 done 243 -rm -R $(srcdir)/treelang/*~ 244 245 246# 247# Stage hooks: 248# The main makefile has already created stage?/treelang. 249 250treelang.stage1: stage1-start 251 -mv treelang/*$(objext) stage1/treelang 252treelang.stage2: stage2-start 253 -mv treelang/*$(objext) stage2/treelang 254treelang.stage3: stage3-start 255 -mv treelang/*$(objext) stage3/treelang 256treelang.stage4: stage4-start 257 -mv treelang/*$(objext) stage4/treelang 258# 259# Maintenance hooks: 260 261# This target creates the files that can be rebuilt, but go in the 262# distribution anyway. It then copies the files to the distdir directory. 263treelang.distdir: 264# not here yet sorry not sure if this is needed or not??? 265 266# test hook 267# the other languages are hard coded in the main makefile.in - that seems to be wrong 268 269check-treelang: treelang.check 270 271TESTSUITEDIR = testsuite 272 273treelang.check: $(TESTSUITEDIR)/site.exp 274 -mkdir testsuite/treelang 275 276# these three files are empty and it seems diff has trouble generating 277# patch files for new empty files as required for cvs. 278# STAMP does not cut it here as I need an empty file. 279 touch $(srcdir)/testsuite/treelang/{a01gcco01runpgmerr,a01gcc.out01,a01gcc.out01err} 280 -rootme=`${PWD_COMMAND}`; export rootme; \ 281 srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \ 282 cd testsuite; \ 283 EXPECT=${EXPECT} ; export EXPECT ; \ 284 TRANSFORM=$(program_transform_name); export TRANSFORM; \ 285 if [ -f $${rootme}/../expect/expect ] ; then \ 286 TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \ 287 export TCL_LIBRARY ; fi ; \ 288 PATH=`cd ..;${PWD_COMMAND}`:$$PATH; export PATH; \ 289 gcc_extras="-B`cd ..;${PWD_COMMAND}` -B`cd ..;${PWD_COMMAND}`/treelang"; export gcc_extras; \ 290 $(RUNTEST) --tool treelang $(RUNTESTFLAGS) 291 rm $(srcdir)/testsuite/treelang/{a01gcco01runpgmerr,a01gcc.out01,a01gcc.out01err} 292# GCC_EXTRAS="$(GCC_EXTRAS)"; export GCC_EXTRAS; \ 293 294# copy the output files from the current test to source ie say the new results are OK 295treelang.check.fix: force 296 srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; 297 -cp testsuite/treelang/*.out* t 298 -cp testsuite/treelang/*runpgm* t 299 -rm -f t/*nofilename 300 301treelang.wc: force 302 wc ${TREE_SOURCE} 303 304# 305 306# Update the tags table for emacs find label (alt-.) function 307TAGS: treelang.tags 308 309.PHONY: treelang.tags 310 311treelang.tags: 312 cd $(srcdir)/treelang; \ 313 etags -l c ${TREE_SOURCE} 314 315.PHONY: treelang.html 316 317treelang.html: 318 cd $(srcdir)/treelang && texi2html -I ../doc/include -verbose -menu -split_chapter -number treelang.texi 319# mv treelang*.html $(srcdir)/treelang 320