#-----------------------------------------------------------------------------# # 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: .pp .m .nl .no .err .int .int2 .dep .depend .doit .ugly \ .date .mod .c .nu .o .pic_o .i .s .garb .mod_h .ql .pl .PRECIOUS: %.date # All the builtin rules must use $@ as the target, so that they work # when $(VPATH) is set. .pp.m: @-[ ! -f $@ ] || chmod +w $@ sed '/^#if *NU_PROLOG/,/^#endif/s/.*//' $< > $@ @-chmod -w $@ .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) $< # do not remove the whitespace in the following two rules! .date.int: .date.int2: .m.garb: $(MCG) --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) -s $(GRADE) $(MCGFLAGS) $< > $*.err2 2>&1 # the next rule should be needed only in runtime in a short while .mod.c: [ -f $< ] && $(MOD2C) -s$(GRADE) $(MOD2CFLAGS) $< > $@ # the next rule will need changing (probably by Tyson) .mod.mod_h: [ -f $< ] && $(MOD2H) -s$(GRADE) $(MOD2HFLAGS) $< > $@ .c.o: $(MGNUC) -s$(GRADE) $(MGNUCFLAGS) -c $< -o $@ # .c.pic_o: # $(MGNUC) -s$(GRADE) $(MGNUCFLAGS) $(CFLAGS_FOR_PIC) -c $< -o $@ .c.s: $(MGNUC) -s$(GRADE) $(MGNUCFLAGS) -S $< -o $@ .c.i: $(MGNUC) -s$(GRADE) $(MGNUCFLAGS) -E $< > $@ .m.o: $(MMAKE_MAKE_CMD) $(MAKEOVERRIDES) $*.c $(MGNUC) -s$(GRADE) $(MGNUCFLAGS) -c $*.c -o $@ $(RM_C) $*.c .o.pic_o: $(MMAKE_MAKE_CMD) $(MAKEOVERRIDES) $*.c $(MGNUC) -s$(GRADE) $(MGNUCFLAGS) $(CFLAGS_FOR_PIC) -c $*.c -o $@ $(RM_C) $*.c %.dir/*.o: %.m rm -f $@ $(MCS) -s$(GRADE) $(MCSFLAGS) $< #-----------------------------------------------------------------------------# # The actions for `mmake clean' etc. are in the `.d' files. .PHONY: clean realclean clean_nu clean_sicstus realclean: clean #-----------------------------------------------------------------------------#