%% Oh Emacs, this is a -*- Makefile -*-, so give me tabs. \documentclass{article} \usepackage{axiom} \title{\File{src/lisp/Makefile} Pamphlet} \author{The Axiom Team} \begin{document} \maketitle \begin{abstract} \end{abstract} \eject \tableofcontents \eject \section{The Makefile} The purpose of this Makefile is to create a fresh Lisp image, [[$(OUT)/lisp]], for use to make \Tool{interpsys} and \Tool{AXIOMsys}. To that end, it augments an existing Lisp image, at the moment \Tool{GCL}, with some specific C-routines. \section{The Makefile} <>= ## Create a fresh image for building interpsys and AXIOMsys ## These objects files are the C runtime support ## and must be compiled into the Lisp image, ## as they must be present in the final interpreter ## and image. lisp_c_objects = \ $(build_libdir)/bsdsignal.$(COBJEXT) \ $(build_libdir)/cfuns-c.$(COBJEXT) \ $(build_libdir)/sockio-c.$(COBJEXT) $(OUT)/lisp$(EXEEXT): base-lisp$(EXEEXT) ifeq (@axiom_lisp_flavor@,gcl) @axiom_gcl_rsym_hack@ echo '(let* ((sys-cc compiler::*cc*) ' \ ' (sys-ld compiler::*ld*) ' \ ' (compiler::*cc* (concatenate (quote string) ' \ ' $(GCL_LTCC) ' \ ' sys-cc)) ' \ ' (compiler::*ld* (concatenate (quote string) ' \ ' $(GCL_LTLD) ' \ ' sys-ld))) ' \ '(compiler::link (quote ($(FASLS))) "lisp$(EXEEXT)" ' \ ' (format nil "(progn (let ((*load-path* (cons ~S *load-path*))'\ ' (si::*load-types* ~S))' \ ' (compiler::emit-fn t))' \ ' (when (fboundp (quote si::sgc-on))' \ ' (si::sgc-on nil))' \ ' (setq si::*top-level-hook* (read-from-string \"|AxiomCore|::|topLevel|\")))"' \ ' si::*system-directory* (quote (list ".lsp")))' \ ' "$(lisp_c_objects) @axiom_c_runtime_extra@"))' \ | ./base-lisp$(EXEEXT) $(mkinstalldirs) $(OUT) $(INSTALL_PROGRAM) lisp$(EXEEXT) $(OUT) endif base-lisp$(EXEEXT): core.$(FASLEXT) $(AXIOM_LISP) \ $(eval_flags) '(load "core")' \ $(eval_flags) '(|AxiomCore|::|link| "$@" (quote nil) (function |AxiomCore|::|topLevel|))' axiom_optimize_options = @axiom_optimize_options@ edit = sed \ -e 's|@open_axiom_installdir[@]|$(open_axiom_installdir)|g' \ -e 's|@axiom_optimize_options[@]|$(axiom_optimize_options)|g' \ -e 's|@host[@]|$(host)|g' \ -e 's|@build[@]|$(build)|g' \ -e 's|@target[@]|$(target)|g' core.lisp: $(srcdir)/core.lisp.in $(edit) $< > $@.tmp $(top_srcdir)/config/move-if-change $@.tmp $@ core.$(FASLEXT): core.lisp $(AXIOM_LISP) $(quiet_flags) \ $(eval_flags) '(progn #-:ecl (compile-file "$<"))' \ $(eval_flags) '(progn #+:ecl (progn (require (quote cmp)) (compile-file "$<" :system-p t) (c::build-fasl "$@" :lisp-files (quote ("core.$(OBJEXT)")))))' \ $(eval_flags) '(quit)' @ <<*>>= OUT = $(axiom_build_bindir) subdir = src/lisp/ pamphlets = Makefile.pamphlet build_libdir = ./$(top_builddir)/src/lib lisp_DEPENDENCIES = $(build_libdir)/cfuns-c.lo \ $(build_libdir)/sockio-c.lo \ $(build_libdir)/libspad.la ## Ideally, we would like to use Libtool for producing, and linking with, ## object files from C codes. That means any C source code ## explicitly included in OpenAxiom, or produced internally by a Lisp ## compiler. However, the SYSTEM calls by GCL on Windows is very tricky ## to convince to properly resolve path names to executables. ## Consequently we temporarily give up here, e.g., we don't ## instruct GCL to use Libtool on Windows. GCL_LTCC = $(if $(findstring mingw, $(target)),"","$(LIBTOOL) --mode=compile ") GCL_LTLD = $(if $(findstring mingw, $(target)),"","$(LIBTOOL) --mode=link ") COBJEXT = $(if $(findstring mingw, $(target)),$(OBJEXT),lo) ## Again, ideally, we would like GCL to link with the compiled Lisp ## code from core.lisp. However, the general interface compiler::link ## that GCL provides for that task is unsupported on Windows platforms. ## So, we instruct GCL so load the source file instead. fasl_ext = $(if $(findstring mingw, $(target)),.lisp,.$(FASLEXT)) FASLS = $(patsubst %,"%", $(addsuffix $(fasl_ext),core)) .PHONY: all all-lisp all: all-ax all-lisp all-ax all-lisp: stamp stamp: $(OUT)/lisp$(EXEEXT) @rm -f stamp $(STAMP) $@ <> mostlyclean-local: rm -f *.$(FASLEXT) @rm -f $(OUT)/lisp$(EXEEXT) lisp$(EXEEXT) @rm -f stamp clean-local: mostlyclean distclean-local: clean-local @rm -f Makefile @ \eject \begin{thebibliography}{99} \bibitem{1} nothing \end{thebibliography} \end{document}