## # Top-level platform independent Makefile. # # Rules in this file should follow the GNU Coding Standards # and run on all host and target platforms. # (http://www.gnu.org/prep/standards/standards.html#Standard-Targets) ## slateroot=. include $(slateroot)/common.mk default: $(VM) bootstrap benchmark: $(BOOTIMG) time $(SECHO) "Running all benchmarks" $(SILENT) $(VM) -i $< --load $(benchmarkdir)/init.slate --eval runAllBenchmarks. bootstrap: $(BOOTFILES) $(VM) $(ALPHAIMG) $(BOOTIMG) all: $(PLUGINS) bootstrap check: $(BOOTIMG) $(SECHO) "Running all tests" $(SILENT) $(VM) -i $< --load $(testdir)/init.slate --eval runAllTests. clean: vmclean pluginsclean dist: distclean $(ALPHAIMG) $(BOOTFILES) $(SECHO) "Building the distribution tarkit $(TARKITFILE).gz" $(SILENT) $(INSTALL) -d $(TARKITDIR) $(SILENT) $(CP) -r $(DISTFILES) $(TARKITDIR)/. $(SILENT) $(TAR) -cf $(TARKITFILE) $(TARKITDIR) $(SILENT) $(GZIP) $(TARKITFILE) $(SILENT) $(RM) -fr $(TARKITDIR) pkg: all $(SECHO) "Performing common pre-packaging actions." $(SILENT) $(CP) $(ALPHAIMG) kernel.image $(SILENT) $(CP) $(VM) $(execname) $(SILENT) $(CP) README README.txt $(SILENT) $(CP) INSTALL INSTALL.txt $(SILENT) $(CP) LICENSE LICENSE.txt pkgclean: clean $(SILENT) $(RM) README.txt INSTALL.txt LICENSE.txt kernel.image $(execname) distclean: clean $(SILENT) $(RM) $(BOOTFILES) $(BOOTIMG) $(ALPHAIMG) install: bootstrap installdirs $(SECHO) "Installing" # TODO: Plugins and documentation missing $(SILENT) $(INSTALL) $(VM) $(exec_prefix)/$(execname) $(SILENT) $(INSTALL) $(INSTALL_MODE) $(slateroot)/etc/slate-mode.el $(lispdir)/ $(SILENT) $(INSTALL) $(INSTALL_MODE) $(VM).h $(includedir)/slatevm.h $(SILENT) $(INSTALL) $(INSTALL_MODE) ${slateroot}/$(ALPHAIMG) $(datadir)/kernel.image $(SILENT) $(INSTALL) $(INSTALL_MODE) ${slateroot}/$(BOOTIMG) $(datadir)/ $(SILENT) $(INSTALL) $(INSTALL_MODE) ${slateroot}/AutoLoad $(datadir)/ $(SILENT) $(INSTALL) $(INSTALL_MODE) ${slateroot}/etc/slate.1 $(man1dir)/ installcheck: install $(SECHO) "Checking installation" # TODO: A few sanity checks should be run on the installed files $(SILENT) $(ECHO) "3 + 4." | $(exec_prefix)/$(execname) installdirs: $(SECHO) "Creating installation directories" $(SILENT) $(INSTALL) -d $(exec_prefix) $(lispdir) $(includedir) $(datadir) install-strip: install $(SILENT) $(INSTALL) -s $(VM) $(exec_prefix)/$(execname) maintainer-clean: distclean $(SILENT) $(RM) TAGS $(ALPHAIMG) mostlyclean: clean vmmaker.image: bootstrap $(SECHO) "Creating an image with bootstrapping code." $(SILENT) $(ECHO) "load: '$(mobiusdir)/init.slate'. Image saveNamed: '$@'" | \ $(VM) -i $(BOOTIMG) imagemaker.image: vmmaker.image platform $(SECHO) "Creating new VM sources." $(SILENT) $(ECHO) "[VM define: #new -> VM bootstrap. Image saveNamed: '$@'] unlessCompletes: [Image die]" | \ $(VM) -i $< newvm: imagemaker.image newimages: imagemaker.image $(SECHO) "Creating new images" $(SILENT) $(ECHO) "[Image bootstrapBasedOn: VM new] unlessCompletes: [Image die]." | \ $(VM) -i $< newboot: newimages bless: $(SECHO) "Making variant the new standard bootstrap source and backing up the existing." $(SILENT) $(CP) $(ALPHAIMG) $(ALPHAIMG)~ $(SILENT) $(foreach f,$(BOOTFILES),$(CP) $(f) $(f)~;) $(SILENT) $(CP) kernel$(VARIANT).big.$(WORD_SIZE).image kernel.big.$(WORD_SIZE).image $(SILENT) $(CP) kernel$(VARIANT).little.$(WORD_SIZE).image kernel.little.$(WORD_SIZE).image $(SILENT) $(CP) vm$(VARIANT).c vm.c $(SILENT) $(CP) vm$(VARIANT).h vm.h rollback: $(SECHO) "Restoring the most-recent bootstrap source backups." $(SILENT) $(CP) $(ALPHAIMG)~ $(ALPHAIMG) $(SILENT) $(foreach f,$(BOOTFILES),$(CP) $(f)~ $(f);) newautoloaddb: bootstrap $(SECHO) "Creating a new AutoLoad database file." $(SILENT) $(ECHO) "AutoLoader \`>> [defs clear. performScan. writeToStorage]." | \ $(VM) -i $(BOOTIMG) plugins: $(PLUGINS) uiplugins: $(UI_PLUGINS) pluginsclean: $(SECHO) "Cleaning plug-ins" $(SILENT) $(foreach p,$(PLUGINS),$(MAKE) -C $(pluginsdir)/$(p) clean;) $(SILENT) $(foreach p,$(UI_PLUGINS),$(MAKE) -C $(pluginsdir)/$(p) clean;) tags: TAGS TAGS: $(SOURCES) $(HEADERS) $(SECHO) "Creating $@ file" $(SILENT) $(ETAGS) $(SOURCES) $(HEADERS) edit: $(BOOTIMG) $(SECHO) "Launching Slate in Emacs" $(SILENT) $(EMACS) -l $(slateroot)/etc/slate-startup.el combined-binary: $(VM) $(BOOTIMG) $(SILENT) cat $+ > $(execname)combined uninstall: $(SECHO) "Uninstalling" $(SILENT) $(RM) -f $(exec_prefix)/$(execname) $(SILENT) $(RM) -f $(lispdir)/slate-mode.el $(SILENT) $(RM) -f $(includedir)/slatevm.h $(SILENT) $(RM) -fr $(datadir) vmclean: $(SECHO) "Cleaning virtual machine" $(SILENT) $(RM) $(OBJS) $(VM) $(SILENT) $(RM) -f $(platformdir)/includes/slatevm.h $(PLUGINS): ${platformdir}/includes/slatevm.h $(SILENT) $(MAKE) -s -C $(addprefix $(pluginsdir)/,$@) $(BOOTFILES) $(ALPHAIMG): $(SECHO) "Downloading $(ALPHA_URL)/$@" $(SILENT)[ -f $@ ] && $(RM) $@ $(SILENT_ERRORS); $(WGET) $(ALPHA_URL)/$@ $(BOOTIMG): $(VM) $(BOOTFILES) $(ALPHAIMG) $(SECHO) "Creating $@" $(SILENT) $(ECHO) "repl resetOnStartup. Image saveNamed: '$(BOOTIMG)'." | ./$(VM) -i $(ALPHAIMG) $(SILENT) touch $@ $(VM): $(BOOTFILES) ${platformdir}/includes/slatevm.h $(OBJS) $(SECHO) "Linking $(VM) ($(MODE))" $(SILENT) $(CC) $(CFLAGS) -o $(slateroot)/$(VM) $(OBJS) $(LIBS) $(SDLVM): $(BOOTFILES) ${platformdir}/includes/slatevm.h $(SDLVMOBJS) $(SECHO) "Linking $(SDLVM) ($(MODE))" $(SILENT) $(CC) $(CFLAGS) -o $(slateroot)/$(SDLVM) $(SDLVMOBJS) $(LIBS) `sdl-config --libs` ${platformdir}/includes/slatevm.h : ${slateroot}/$(VM).h $(SECHO) "Creating $@" $(SILENT) $(CP) $< $@ %.o : %.c $(SECHO) "Compiling $< ($(MODE))" $(SILENT) $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ -c $< $(SDLVM).o : $(VM).c $(SECHO) "Compiling $< ($(SDLVM).o) ($(MODE))" $(SILENT) $(CC) -c $(CPPFLAGS) $(CFLAGS) `sdl-config --cflags` -include SDL_main.h -o $(SDLVM).o -c $< %.s : %.c $(SECHO) "Compiling $< to $@ ($(MODE))" $(SILENT) $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ -S $< .PHONY: clean distclean maintainer-clean mostlyclean pkg