| # |
| # @(#)Rules.gmk 1.3 97/10/23 |
| # |
| # Rules shared by all Java makefiles. |
| # |
| |
| .PHONY: classes |
| |
| include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk |
| |
| # |
| # This could now be done with vpaths. |
| # |
| $(CLASSBINDIR)/%.class: $(PLATFORM_SRC)/classes/%.java |
| @echo $? >>.classes.list |
| $(CLASSBINDIR)/%.class: $(SHARE_SRC)/classes/%.java |
| @echo $? >>.classes.list |
| |
| FILES_class = $(FILES_java:%.java=$(CLASSBINDIR)/%.class) |
| |
| .delete.classlist: |
| @/bin/rm -f .classes.list |
| |
| .compile.classlist: |
| if [ -s .classes.list ] ; \ |
| then $(JAVAC_CMD) -classpath $(CLASSPATH) -d $(CLASSBINDIR) \ |
| $(JAVACFLAGS) \ |
| $(shell if [ -s .classes.list ] ; then cat .classes.list; fi ) ; \ |
| fi |
| |
| classes : $(CLASSBINDIR) .delete.classlist $(FILES_class) .compile.classlist |
| |
| # |
| # Special rules to collect the list of source files in this project. |
| # The leading "X/" is a necessary hack because otherwise "%.class" |
| # doesn't match anything with a "/" in it. |
| # |
| X/%.class: $(PLATFORM_SRC)/classes/%.java |
| @echo $? >>.classes.prj |
| X/%.class: $(SHARE_SRC)/classes/%.java |
| @echo $? >>.classes.prj |
| |
| FILES_list = $(FILES_java:%.java=X/%.class) |
| |
| # |
| # Rules for making Java Workshop project files |
| # |
| project :: .delete.prjlist $(FILES_list) |
| |
| .delete.prjlist: |
| @/bin/rm -f .classes.prj |
| |
| include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk |
| |
| # End of Java Workshop rules |
| |
| $(CLASSBINDIR): |
| @mkdir -p $@ |
| |
| $(OBJDIR)/%.o: %.c |
| ifdef VARIANT |
| $(COMPILE.c) -o $@ $< |
| @$(CC) -xM1 $(CPPFLAGS) $< 2> /dev/null | \ |
| sed -e '/:[ ]*[/]/d' -e 's!$*\.o!$(dir $@)&!g' | \ |
| sort | uniq > $(@:.o=.d) |
| else |
| $(MAKE) $@ VARIANT=OPT |
| endif |
| |
| $(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)/%.o: %.c |
| ifdef VARIANT |
| $(COMPILE.c) -o $@ $< |
| @$(CC) -xM1 $(CPPFLAGS) $< 2> /dev/null | \ |
| sed -e '/:[ ]*[/]/d' -e 's!$*\.o!$(dir $@)&!g' | \ |
| sort | uniq > $(@:.o=.d) |
| else |
| $(MAKE) $@ VARIANT=DBG |
| endif |
| |
| $(OBJDIR_NAME)/$(ARCH)/$(TSOBJDIR)/%.o: %.cpp |
| $(COMPILE.cc) -o $@ $< |
| |
| $(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)/%.o: %.cpp |
| $(COMPILE.cc) -o $@ $< |
| |
| $(OBJDIR_NAME)/$(ARCH)/$(TSOBJDIR)/%.o: %.s |
| $(COMPILE.s) -o $@ $< |
| |
| $(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)/%.o: %.s |
| $(COMPILE.s) -o $@ $< |
| |
| # |
| # Special targets and dependencies |
| # |
| opcodes.h: $(SHARE_SRC)/javavm/include/opcodes.list |
| @echo "Creating $@ ... " |
| @rm -f $@ |
| @awk 'BEGIN {print "typedef enum {" } \ |
| /^[a-z]/ {printf(" opc_%s = %d,\n", $$1, i++); } \ |
| END {printf(" opc_first_unused_index = %d,\n", i++); \ |
| print " opc_software = 254,"; \ |
| print " opc_hardware = 255"; \ |
| print "} opcode_type;"; \ |
| }' \ |
| $(SHARE_SRC)/javavm/include/opcodes.list > $@ |
| @chmod 444 $@ |
| |
| opcodes.init: $(SHARE_SRC)/javavm/include/opcodes.list |
| @echo "Creating $@ ... " |
| @rm -f $@ |
| @awk 'BEGIN { print "char *opnames[256] = {" } \ |
| /^[a-z]/ { printf(" \"%s\",\n", $$1); i++; } \ |
| END { while(i++ < 254) print " \"??\","; \ |
| print " \"software\","; \ |
| print " \"hardware\","; \ |
| print "};" \ |
| }' \ |
| $(SHARE_SRC)/javavm/include/opcodes.list > $@ |
| @chmod 444 $@ |
| |
| opcodes.c: $(SHARE_SRC)/javavm/include/opcodes.list |
| @echo "Creating $@ ... " |
| @rm -f $@ |
| @awk 'BEGIN { \ |
| print "#if defined(TRACING) || defined(STATISTICS)"; \ |
| print "char *opnames[256] = {"; \ |
| } \ |
| /^[a-z]/ { printf(" \"%s\",\n", $$1); i++; } \ |
| END { \ |
| while(i++ < 254) \ |
| print " \"??\","; \ |
| print " \"software\","; \ |
| print " \"hardware\","; \ |
| print "};"; \ |
| print "#else "; \ |
| print "char *opnames[1];"; \ |
| print "#endif"; \ |
| } \ |
| ' \ |
| $(SHARE_SRC)/javavm/include/opcodes.list > $@ |
| @chmod 444 $@ |
| |
| opcodes.length: $(SHARE_SRC)/javavm/include/opcodes.list |
| @echo "Creating $@ ... " |
| @rm -f $@ |
| @awk 'BEGIN { print "short opcode_length[256] = {" } \ |
| /^[a-z]/ { printf(" %s,\t\t/* %s */\n", $$2, $$1); i++; } \ |
| END { while(i++ < 256) print " -1,"; print "};" }' \ |
| $(SHARE_SRC)/javavm/include/opcodes.list > $@ |
| @chmod 444 $@ |
| |
| opcodes.in_out: $(SHARE_SRC)/javavm/include/opcodes.list |
| @echo "Creating $@ ... " |
| @rm -f $@ |
| @awk 'BEGIN { print "char *opcode_in_out[][2] = {" } \ |
| /^[a-z]/ { if ($$3 == "-") $$3 = ""; \ |
| if ($$4 == "-") $$4 = ""; \ |
| printf(" {\"%s\", \"%s\"}, \t\t/* %s */\n", \ |
| $$3, $$4, $$1); } \ |
| END { print "};" }' \ |
| $(SHARE_SRC)/javavm/include/opcodes.list > $@ |
| @chmod 444 $@ |
| |
| clobber :: clean |
| |
| FORCE: ; |
| |
| .PHONY : .delete.classlist classes .compile.classlist clean clobber |
| |
| debug: |
| $(MAKE) $(DEBUG) VARIANT=DBG |
| |
| optimized: |
| $(MAKE) $(OPTIMIZED) VARIANT=OPT |
| |