#-----------------------------------------------------------------------------# # Copyright (C) 1995 University of Melbourne. # This file may only be copied under the terms of the GNU General # Public License - see the file COPYING in the Mercury distribution. #-----------------------------------------------------------------------------# # Mmake.rules - rules for building Mercury programs main_target: $(MAIN_TARGET) #-----------------------------------------------------------------------------# # Beware that the order of suffixes is significant. .SUFFIXES: .m .nl .no .err .int .int2 .int3 .opt .dep .depend .doit \ .ugly .date .date3 .optdate .mod .c .nu .o .pic_o \ .i .s .pic_s \ .garb .ql .pl .PRECIOUS: %.date %.date3 %.optdate # All the builtin rules must use $@ as the target, so that they work # when $(VPATH) is set. .m.no: $(MNC) $(MNCFLAGS) -o $@ $< .nl.no: $(MNC) $(MNCFLAGS) -o $@ $< .m.ql: $(MSC) $(MSCFLAGS) -o $@ $< .nl.ql: $(MSC) $(MSCFLAGS) -o $@ $< .m.pl: sicstus_conv $< .nl.pl: sicstus_conv $< # The `touch' is necessary, since otherwise if # the old .err file was of size zero and # the new .err file is also of size zero, # the time-stamp doesn't get updated! # (Is that a bug in unix? In bash?) .m.err: $(MC) $(MCFLAGS) --errorcheck-only $< > $@ 2>&1 @touch $@ .m.date: $(MCI) $(MCIFLAGS) $< .m.date3: $(MCSI) $(MCSIFLAGS) $< .m.optdate: $(MCOI) $(MCOIFLAGS) $< # do not remove the whitespace in the following four rules! .date.int: .date.int2: .date3.int3: .optdate.opt: .m.garb: $(MCG) -s $(GRADE) --garbage-collection accurate $(MCGFLAGS) $< .m.ugly: $(MC) --convert-to-mercury $(MCFLAGS) $< .m.dep: @-[ ! -f $*.dep ] || chmod +w $*.dep $(MCD) $(MCDFLAGS) $< @-chmod -w $*.dep .m.depend: @-[ ! -f $*.dep ] || chmod +w $*.dep $(MCD) $(MCDFLAGS) $< @-chmod -w $*.dep -rm -f $*_init.c .dep.doit: sed -e ':a' -e '/\\/N' -e 's/\\\n //' -e 't a' $< | \ tee tmp | \ grep 'srcs *=' | \ sed -e 's/.*=/:-[ '\''nu_library.doit'\'', /' \ -e 's/\.nl/,/g' \ -e 's/$$/ portray ]./' \ > $@ .m.c: rm -f $*.c $(MCG) --grade $(GRADE) $(MCGFLAGS) $< > $*.err 2>&1 # the next rule is needed only for a few files in the `runtime' directory .mod.c: [ -f $< ] && $(MOD2C) -s $(GRADE) $(MOD2CFLAGS) $< > $@ .c.o: $(MGNUC) --grade $(GRADE) $(MGNUCFLAGS) -c $< -o $@ # .c.pic_o: # $(MGNUC) --grade $(GRADE) $(MGNUCFLAGS) $(CFLAGS_FOR_PIC) -c $< -o $@ .c.s: $(MGNUC) --grade $(GRADE) $(MGNUCFLAGS) -S $< -o $@ .c.pic_s: $(MGNUC) --grade $(GRADE) $(MGNUCFLAGS) $(CFLAGS_FOR_PIC) -S $< -o $@ .c.i: $(MGNUC) --grade $(GRADE) $(MGNUCFLAGS) -E $< > $@ .m.o: $(MMAKE_MAKE_CMD) $(MAKEOVERRIDES) $*.c $(MGNUC) --grade $(GRADE) $(MGNUCFLAGS) -c $*.c -o $@ $(RM_C) $*.c .o.pic_o: $(MMAKE_MAKE_CMD) $(MAKEOVERRIDES) $*.c $(MGNUC) --grade $(GRADE) $(MGNUCFLAGS) $(CFLAGS_FOR_PIC) -c $*.c -o $@ $(RM_C) $*.c %.dir/*.o: %.m rm -f $@ $(MCS) --grade $(GRADE) $(MCSFLAGS) $< #-----------------------------------------------------------------------------# # The actions for `mmake clean' etc. are in the `.d' files. .PHONY: clean realclean clean_nu clean_sicstus realclean: clean clean_prof_files clean_prof_files: -rm -f Prof.CallPair Prof.Counts Prof.Decl -rm -f *.prof #-----------------------------------------------------------------------------#