ecl/examples/asdf
Daniel Kochmanski 768eb27079 Remove "copyright" from examples/
Examples were relicensed (under permission from JJGR) to BSD-2-Clause a few
years back. We also remove Copyright from individual files to match the
convention that examples doesn't have that (whole codebase is under JJGR's
copyright too).
2018-08-10 07:36:02 +02:00
..
example.asd File example.asd had disappeared from examples/asdf/ 2011-07-31 13:05:47 +02:00
file1.lisp New example about building FASL files and standalone executables 2005-11-16 10:06:57 +00:00
file2.lisp Split system definition as separate file (needed by ASDF) and added an exit statement to the standalone program 2006-10-25 15:27:17 +00:00
readme.lisp Remove "copyright" from examples/ 2018-08-10 07:36:02 +02:00

;;;
;;; This an extremely simple example of how to build standalone programs and
;;; unified fasl files from a system definition file.  You should peruse this
;;; file and also test it by loading it on your copy of ECL.
;;;

;;;
;;; First of all, we need to include the ASDF module and the compiler
;;;

(require 'asdf)
(require 'cmp)

(setf *load-verbose* nil)
(setf *compile-verbose* nil)
(setf c::*suppress-compiler-warnings* t)
(setf c::*suppress-compiler-notes* t)

;;; This flag determines how lisp constants are compiled into the program.
;;; The default scheme does not work well in statically linked libraries
;;; yet.
(setf c::*compile-in-constants* t)

(push (make-pathname :name nil :type nil :version nil
                     :defaults *load-truename*)
      asdf:*central-registry*)

;;;
;;; This will show you what is running behind the walls of ASDF. Everything
;;; is built on top of the powerful C::BUILDER routine, which allows one
;;; to build anything from executables to shared libraries.
;;;
;;(trace c::builder)

;;;
;;; Now we attempt building a single FASL file containing all those files.
;;; Notice that we remove any previous fasl file.
;;;

(princ "

Building FASL file 'example.fasb'

")
(asdf:make-build :example :type :fasl :move-here "./")

;;;
;;; Now we load the previous file!
;;;

(princ "

Loading FASL file example.fasb

")
(load "example.fasb")

;;;
;;; Now that it worked, we attempt building a single program file with everything.
;;;

(princ "

Building standalone executable 'example-mono' ('example-mono.exe' in Windows)

")
(asdf:make-build :example
                 :type :program :epilogue-code '(ext:quit 0)
                 :move-here "./")

;;;
;;; Test the program
;;;

(princ "

Executing standalone file 'example'

")
(ext:system "./example")

;;;
;;; Clean up everything
;;;

(mapc #'delete-file (append (directory "*.o")
                            (directory "*.obj")
                            (directory "example-mono*")))