Hi, I managed to compile clasp and I thought it might be helpful if I make the binary available for other people. I had to fix one problem (a missing directory), which I describe below.
You can download the archive and run the binary like this:
wget http://37.59.29.73:36789/clasp-20150619.tar.xz tar xaf clasp-20150619.tar.xz cd clasp-20150619/bin export LD_LIBRARY_PATH:. ./clasp_mps_o
The output should be:
Starting MPS Clasp 0.2 ... loading image... it takes a few seconds Top level.
You can verify the archives sha1sum. wget http://37.59.29.73:36789/clasp-20150619.tar.xz.sha1 It should be: 73acbccc3cb0408749b8d73c5b4c2234358d6dd5 clasp-20150619.tar.xz
I then managed to start swank using quicklisp (which I already installed using sbcl):
(load "/home/martin/quicklisp/setup.lisp") (ql:quickload "swank") (swank:create-server)
I used the following versions of the two repositories as the source for the binary:
clasp commit c794bfd2e06b7a4b418c17df41a0505b4d28fda9 Author: Christian Schafmeister meister@temple.edu Date: Tue May 19 22:11:10 2015 -0400
externals-clasp commit 35ac32fa1647407d2e577241299d094d8d40e04f Author: Christian Schafmeister meister@temple.edu Date: Thu Feb 5 10:15:34 2015 -0500
My system is a gentoo 64bit. I included copies of all libraries that clasp_mps_o depends on.
For the build process I ended up going through the makefile and starting each compilation individually. The only real problem happened during the compilation of clasp. It aborted like this:
...found 24420 targets... make[1]: Leaving directory '/home/martin/src/clasp/clasp' (cd src/main; make mps) make[1]: Entering directory '/home/martin/src/clasp/clasp/src/main' make min-mps make[2]: Entering directory '/home/martin/src/clasp/clasp/src/main' /home/martin/src/clasp/clasp/build/clasp/bin/clasp_mps_o -I -f ecl-min -l "buildClaspMinMps.lsp" Builder clasp-min Will remove modules: (INIT CMP/JIT-SETUP CLSYMBOLS LSP/FOUNDATION LSP/EXPORT LSP/DEFMACRO LSP/HELPFILE LSP/EVALMACROS LSP/CLASPMACROS LSP/TESTING LSP/MAKEARRAY LSP/ARRAYLIB LSP/SETF LSP/LISTLIB LSP/MISLIB LSP/DEFSTRUCT LSP/PREDLIB LSP/SEQ LSP/CMUUTIL LSP/SEQMACROS LSP/IOLIB LSP/PROFILING CMP/PACKAGES CMP/CMPSETUP CMP/CMPENV-FUN CMP/CMPENV-PROCLAIM CMP/CMPGLOBALS CMP/CMPTABLES CMP/CMPVAR CMP/CMPUTIL CMP/CMPINTRINSICS CMP/CMPIR CMP/CMPEH CMP/DEBUGINFO CMP/LAMBDALISTVA CMP/CMPVARS CMP/CMPQUOTE CMP/CMPOBJ CMP/COMPILER CMP/COMPILEFILE CMP/CMPBUNDLE CMP/CMPWALK CMP/CMPREPL LSP/LOGGING LSP/SEQLIB LSP/TRACE LSP/SHARPMACROS LSP/ASSERT LSP/NUMLIB LSP/DESCRIBE LSP/MODULE LSP/LOOP2 LSP/ASSORTED LSP/PACKLIB LSP/DEFPACKAGE LSP/FORMAT CLOS/PACKAGE CLOS/HIERARCHY CLOS/CPL CLOS/STD-SLOT-VALUE CLOS/SLOT CLOS/BOOT CLOS/KERNEL CLOS/METHOD CLOS/COMBIN CLOS/STD-ACCESSORS CLOS/DEFCLASS CLOS/SLOTVALUE CLOS/STANDARD CLOS/BUILTIN CLOS/CHANGE CLOS/STDMETHOD CLOS/GENERIC CLOS/FIXUP CLOS/EXTRACLASSES LSP/DEFVIRTUAL CLOS/CONDITIONS CLOS/PRINT CLOS/STREAMS LSP/PPRINT CLOS/INSPECT LSP/FFI LSP/TOP ) cur=(INIT CMP/JIT-SETUP CLSYMBOLS LSP/FOUNDATION LSP/EXPORT LSP/DEFMACRO LSP/HELPFILE LSP/EVALMACROS LSP/CLASPMACROS LSP/TESTING LSP/MAKEARRAY LSP/ARRAYLIB LSP/SETF LSP/LISTLIB LSP/MISLIB LSP/DEFSTRUCT LSP/PREDLIB LSP/SEQ LSP/CMUUTIL LSP/SEQMACROS LSP/IOLIB LSP/PROFILING CMP/PACKAGES CMP/CMPSETUP CMP/CMPENV-FUN CMP/CMPENV-PROCLAIM CMP/CMPGLOBALS CMP/CMPTABLES CMP/CMPVAR CMP/CMPUTIL CMP/CMPINTRINSICS CMP/CMPIR CMP/CMPEH CMP/DEBUGINFO CMP/LAMBDALISTVA CMP/CMPVARS CMP/CMPQUOTE CMP/CMPOBJ CMP/COMPILER CMP/COMPILEFILE CMP/CMPBUNDLE CMP/CMPWALK CMP/CMPREPL LSP/LOGGING LSP/SEQLIB LSP/TRACE LSP/SHARPMACROS LSP/ASSERT LSP/NUMLIB LSP/DESCRIBE LSP/MODULE LSP/LOOP2 LSP/ASSORTED LSP/PACKLIB LSP/DEFPACKAGE LSP/FORMAT CLOS/PACKAGE CLOS/HIERARCHY CLOS/CPL CLOS/STD-SLOT-VALUE CLOS/SLOT CLOS/BOOT CLOS/KERNEL CLOS/METHOD CLOS/COMBIN CLOS/STD-ACCESSORS CLOS/DEFCLASS CLOS/SLOTVALUE CLOS/STANDARD CLOS/BUILTIN CLOS/CHANGE CLOS/STDMETHOD CLOS/GENERIC CLOS/FIXUP CLOS/EXTRACLASSES LSP/DEFVIRTUAL CLOS/CONDITIONS CLOS/PRINT CLOS/STREAMS LSP/PPRINT CLOS/INSPECT LSP/FFI LSP/TOP ) ../../src/core/exceptions.cc:150 af_signalSimpleError caught because signal-simple-error is not installed yet COMMON-LISP:FILE-ERROR Could not create directory /home/martin/src/clasp/clasp/build/clasp/Contents/Resources/lisp/build/system/min-mps C library error: No such file or directory
af_signalSimpleError ../../src/core/foundation.cc:298 dbg_hook(...) was called
"# 16/b@0x7f5968a83790 exceptions.cc 822/0 SIGNAL-SIMPLE-ERROR " "The following restarts are available:" "ABORT a Abort to REPL" Frame-16-Dbg[1]>
I used strace to figure out what is wrong: [pid 5651] stat("min-mps", 0x7ffc35554230) = -1 ENOENT (No such file or directory) [pid 5651] rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT TERM XCPU XFSZ], NULL, 8) = 0 [pid 5651] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 [pid 5651] write(1, "make[2]: Leaving directory '/hom"..., 67) = 67 [pid 5651] chdir("/home/martin/src/clasp/clasp/src/main") = 0 [pid 5651] close(1) = 0 [pid 5651] munmap(0x7f15108e7000, 4096) = 0 [pid 5651] exit_group(2) = ? [pid 5651] +++ exited with 2 +++ [pid 5650] <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 2}], 0, NULL) = 5651 [pid 5650] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=5651, si_uid=1000, si_status=2, si_utime=0, si_stime=0} --- [pid 5650] rt_sigreturn() = 5651 [pid 5650] write(1, "makefile:44: recipe for target '"..., 44) = 44 [pid 5650] write(2, "make[1]: *** [mps] Error 2\n", 27make[1]: *** [mps] Error 2 ) = 27 [pid 5650] rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT TERM XCPU XFSZ], NULL, 8) = 0 [pid 5650] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 [pid 5650] write(1, "make[1]: Leaving directory '/hom"..., 67) = 67 [pid 5650] chdir("/home/martin/src/clasp/clasp/src/main") = 0 [pid 5650] close(1) = 0 [pid 5650] munmap(0x7f452c0bc000, 4096) = 0 [pid 5650] exit_group(2) = ? [pid 5650] +++ exited with 2 +++ [pid 5649] <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 2}], 0, NULL) = 5650 [pid 5649] rt_sigaction(SIGINT, {0x7fc482642130, [], SA_RESTORER, 0x7fc481ba2ba0}, {0x7fc482623e20, [], SA_RESTORER, 0x7fc481ba2ba0}, 8) = 0 [pid 5649] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 [pid 5649] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=5650, si_uid=1000, si_status=2, si_utime=0, si_stime=0} --- [pid 5649] wait4(-1, 0x7ffff1620300, WNOHANG, NULL) = -1 ECHILD (No child processes) [pid 5649] rt_sigreturn() = 0 [pid 5649] exit_group(2) = ? [pid 5649] +++ exited with 2 +++ [pid 5648] <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 2}], 0, NULL) = 5649 [pid 5648] rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7fc481ba2ba0}, {0x7fc482623e20, [], SA_RESTORER, 0x7fc481ba2ba0}, 8) = 0 [pid 5648] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 [pid 5648] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=5649, si_uid=1000, si_status=2, si_utime=0, si_stime=0} --- [pid 5648] wait4(-1, 0x7ffff1620580, WNOHANG, NULL) = -1 ECHILD (No child processes) [pid 5648] rt_sigreturn() = 0
The fix was to just create a the following directory:
mkdir -p /home/martin/src/clasp/clasp/build/clasp/Contents/Resources/lisp/build/system/min-mps
Also 8GBytes of ram were not sufficient for the compilation. I had to switch to a computer with 16GBytes.
Another stumbling block was that clasp needs a static version of libstc++. Otherwise the llvm in externals-clasp won't link.
Regards, Martin