Update of /project/elephant/cvsroot/elephant
In directory clnet:/tmp/cvs-serv5389
Modified Files:
TODO config.sexp ele-bdb.asd elephant.asd
Log Message:
Bug fix in drop instances; preliminary cygwin build in asd fils
--- /project/elephant/cvsroot/elephant/TODO 2007/02/21 06:29:31 1.57
+++ /project/elephant/cvsroot/elephant/TODO 2007/02/22 20:19:57 1.58
@@ -11,26 +11,26 @@
Migration:
- Validate SQL migration 0.6.0->0.6.1 (Robert)
-Lisp Support:
-- Win32 builds
- - Windows support for asdf-based library builds? Include 32-bit dll in release?
-- 64-bit lisp verification
-- Validate OpenMCL 1.1 on Mac OS X
-- Validate Lispworks
-- Verify db_deadlock for other lisps (launch and kill background program I/F)
-
Stability and Performance:
- Review and address all NOTE comments in the code
- Review SBCL string serialization performance
-- Improve SQL base-64 serializer performance?
- Migration: Validate that migrate can use either O(c) or O(n/c) where c << n memory for large DBs
- Migration: Improve support for nested persistent objects inside standard objects, arrays, etc?
- Migration: Improve scaling properties of migration so all objects do not need to be resident in memory?
- Migration: Validate that graph structures with loop are copied properly
- Migration: Improve printing and informative messages
+Lisp Support:
+- Win32 builds
+ - Windows support for asdf-based library builds? Include 32-bit dll in release?
+- Validate Lispworks
+- Validate OpenMCL pre-1.1 on Mac OS X
+- Validate OpenMCL 1.1 and/or 64-bit on Mac OS X?
+- Verify db_deadlock for other lisps (launch and kill background program I/F)
+- 64-bit lisp verification
+
Test coverage:
-- Make tests idempotent, clean up interface to tests
+- Clean up interface to tests
- Test for optimize storage method (just add probe-file methods to get file size?)
- Multi-threading stress tests? Ensure that there are conflicts and lots of serialization
happening concurrently to make sure that multi-threading is in good shape (Henrik's code)
@@ -41,16 +41,19 @@
TASKS TO GET TO FINAL RELEASE:
-Fix any bugs in BETA:
+Fix any bugs found in BETA
Documentation:
- License and copyright file headers
-- Add document section about backend interface:
-- Add notes about with/ensure-transaction usage (abort & commit behavior on exit)
-- Add notes about optimize-storage
-- Add notes about deadlock-detect
-- Add notes about checkpoint (null in SQL?)
-- More notes about transaction performance
+- Add document section about backend interface & developer decisions
+- Performance and design issues
+ - More notes about transaction performance
+ - Serious discussion of threading implications
+ - Add notes about with/ensure-transaction usage (abort & commit behavior on exit)
+ - Add notes about optimize-storage
+ - Add notes about deadlock-detect
+ - Add notes about checkpoint (null in SQL?)
+- Upgrade, migration and other system level issues
0.6.1 - Features COMPLETED to date
----------------------------------
@@ -176,6 +179,7 @@
- Add lazy deserialize to map functions?
Performance:
+- Improve SQL base-64 serializer performance?
- Implement unicode performance hacks for various lisps; validate UTF8 works everywhere
- Metering and understanding locking issues. Large transactions seem
to use a lot of locks. In general understanding how to use Berkeley DB
--- /project/elephant/cvsroot/elephant/config.sexp 2007/02/14 04:36:08 1.6
+++ /project/elephant/cvsroot/elephant/config.sexp 2007/02/22 20:19:57 1.7
@@ -3,7 +3,8 @@
(:berkeley-db-lib . "/opt/local/BerkeleyDB.4.5/lib/libDB-4.5.dylib")
(:berkeley-db-deadlock . "/opt/local/bin/db45_deadlock")
(:pthread-lib . nil)
- (:clsql-lib . nil))
+ (:clsql-lib . nil)
+ (:compiler . :gcc))
;; Berkeley 4.5 is required, each system will have different settings for
;; these directories, use this as an indication of what each key means
@@ -13,4 +14,9 @@
;; nil means that the library in question is not loaded
;;
;; NOTE: The latest SBCL (0.9.17+) on linux no longer needs the pthread library,
-;; it is statically linked against it now with the new thread support
\ No newline at end of file
+;; it is statically linked against it now with the new thread support
+;;
+;; :compiler options are
+;; :gcc (default: for unix platforms with /usr/bin/gcc)
+;; :cygwin (for windows platforms with cygwin/gcc)
+;; :msvc (unsupported)
\ No newline at end of file
--- /project/elephant/cvsroot/elephant/ele-bdb.asd 2007/01/31 20:05:37 1.16
+++ /project/elephant/cvsroot/elephant/ele-bdb.asd 2007/02/22 20:19:57 1.17
@@ -29,13 +29,18 @@
(defclass bdb-c-source (elephant-c-source) ())
-(defmethod compiler-options ((compiler (eql :gcc)) (c bdb-c-source) &key &allow-other-keys)
- (let* ((include (make-pathname :directory (get-config-option :berkeley-db-include-dir c)))
- (lib (make-pathname :directory (get-config-option :berkeley-db-lib-dir c))))
+(defmethod compiler-options (compiler (c bdb-c-source) &key &allow-other-keys)
+ (let ((include (make-pathname :directory (get-config-option :berkeley-db-include-dir c)))
+ (lib (make-pathname :directory (get-config-option :berkeley-db-lib-dir c))))
(append (list (format nil "-L~A" lib) (format nil "-I~A" include))
(call-next-method)
(list "-ldb"))))
+;;Cygwin script:
+;;gcc -mno-cygwin -mwindows -c -Wall -std=c99 -L/c/DB/Berkeley\ DB\ 4.4.20/lib/ -I/c/DB/Berkeley\ DB\ 4.4.20/include/ libsleepycat.c
+;;dlltool -z libsleepycat.def --export-all-symbols -e exports.o -l libsleepycat.lib libsleepycat.o
+;;gcc -shared -mno-cygwin -mwindows -L/c/DB/Berkeley\ DB\ 4.4.20/bin/ -llibdb44 libsleepycat.o exports.o -o libsleepycat.dll
+
(defmethod foreign-libraries-to-load-first ((c bdb-c-source))
(remove-if #'(lambda (x) (null (car x)))
(list
--- /project/elephant/cvsroot/elephant/elephant.asd 2007/02/20 19:12:57 1.32
+++ /project/elephant/cvsroot/elephant/elephant.asd 2007/02/22 20:19:57 1.33
@@ -28,22 +28,12 @@
;; Simple lisp/asdf-based make utility for elephant c files
;;
-(defvar *c-compilers*
- '((:gcc . "/usr/bin/gcc")
- (:msvc . ""))
- "Associate compilers with platforms for compiling libmemutil/libsleepycat")
-
-(defvar *compiler*
- #-(or win32 windows) :gcc
- #+(or win32 windows) :msvc)
-
(defgeneric compiler-options (compiler c-source-file &key input-file output-file)
(:documentation "Returns a list of options to pass to <compiler>"))
(defgeneric foreign-libraries-to-load-first (c-source-file)
(:documentation "Provides an alist of foreign-libraries to load and the modules to load them into. Similar to (input-files load-op), but much more specific"))
-
(defun uffi-funcall (fn &rest args)
"Simplify uffi funcall, first ensure uffi is loaded"
(unless (find-package :uffi)
@@ -54,8 +44,6 @@
;; User parameters (bdb root and pthread, if necessary)
;;
-(defparameter *elephant-user-config* nil)
-
(defun get-config-option (option component)
(let ((filespec (make-pathname :defaults (asdf:component-pathname (asdf:component-system component))
:name "my-config"
@@ -67,6 +55,27 @@
(cdr (assoc option (read config))))))
;;
+;; Supported C compilers
+;;
+
+
+(defvar *c-compilers*
+ '((:gcc . "/usr/bin/gcc")
+ (:cygwin . "c:\\cygwin\\usr\\bin\\gcc")
+ (:msvc . ""))
+ "Associate compilers with platforms for compiling libmemutil/libsleepycat")
+
+(defun c-compiler (comp)
+ (get-config-option :compiler comp))
+
+(defun c-compiler-path (comp)
+ (let* ((compiler (get-config-option :compiler comp))
+ (entry (assoc compiler *c-compilers*)))
+ (if entry
+ (cdr entry)
+ (error "Cannot find compiler path for config.sexp :compiler option: ~A" compiler))))
+
+;;
;; Basic utilities for elephant c files
;;
@@ -85,63 +94,89 @@
"Run the appropriate compiler for this platform on the source, getting
the specific options from 'compiler-options method. Default options
can be overridden or augmented by subclass methods"
+ #+windows
+ (progn
+ (let ((pathname (component-pathname c)))
+ (unless (zerop (run-shell-command
+ (format nil "~A ~{~A ~}"
+ (c-compiler-path c)
+ (compiler-options (c-compiler c) c
+ :input-file (namestring pathname)
+ :output-file nil
+ :library nil))))
+ (error 'operation-error :component c :operation o))
+ (unless (zerop (run-shell-command
+ (format nil "dlltool -z ~A --export-all-symbols -e exports.o -l ~A ~A"
+ (namestring (make-pathname :type "def" :defaults pathname))
+ (namestring (make-pathname :type "lib" :defaults pathname))
+ (namestring (make-pathname :type "o" :defaults pathname)))))
+ (error 'operation-error :component c :operation o))
+ (unless (zerop (run-shell-command
+ (format nil "~A ~{~A ~} -I~A -L~A -l~A"
+ (c-compiler-path c)
+ (compiler-options (c-compiler c) c
+ :input-files
+ (list (namestring
+ (make-pathname :type "o" :defaults pathname))
+ "exports.o")
+ :output-file (first (output-files o c))
+ :library t))))
+ (error 'operation-error :component c :operation o))))
+ #-windows
(unless (zerop (run-shell-command
"~A ~{~A ~}"
- (cdr (assoc *compiler* *c-compilers*))
- (compiler-options
- *compiler*
- c
- :input-file (namestring (component-pathname c))
- :output-file (namestring (first (output-files o c))))))
+ (c-compiler-path c)
+ (compiler-options (c-compiler c) c
+ :input-file (namestring (component-pathname c))
+ :output-file (namestring (first (output-files o c))))))
(error 'operation-error :component c :operation o)))
+
+gcc -mno-cygwin -mwindows -c -Wall -std=c99 -L/c/DB/Berkeley\ DB\ 4.4.20/lib/ -I/c/DB/Berkeley\ DB\ 4.4.20/include/ libsleepycat.c
+dlltool -z libsleepycat.def --export-all-symbols -e exports.o -l libsleepycat.lib libsleepycat.o
+gcc -shared -mno-cygwin -mwindows -L/c/DB/Berkeley\ DB\ 4.4.20/bin/ -llibdb44 libsleepycat.o exports.o -o libsleepycat.dll
+
+
(defmethod operation-done-p ((o compile-op) (c elephant-c-source))
"Is the first generated library more recent than the source file?"
- (let ((lib (first (output-files o c))))
+ (let ((lib (first (output-files o c)))
(and (probe-file (component-pathname c))
(probe-file lib)
- (> (file-write-date lib) (file-write-date (component-pathname c))))))
+ (> (file-write-date lib) (file-write-date (component-pathname c)))))))
-(defmethod compiler-options ((compiler (eql :gcc)) (c elephant-c-source) &key input-file output-file)
+(defmethod compiler-options ((compiler (eql :gcc)) (c elephant-c-source) &key input-file output-file &allow-other-keys)
"Default compile and link options to create a library; no -L or -I options included; math lib as default"
(unless (and input-file output-file)
(error "Must specify both input and output files"))
- (list
+ (list
#-(or darwin macosx darwin-host) "-shared"
#+(or darwin macosx darwin-host) "-bundle"
#+(and X86-64 (or macosx darwin darwin-host)) "-arch x86_64"
#+(and X86-64 linux) "-march=x86-64"
- "-Wall"
"-fPIC"
+ "-Wall"
"-O3"
- "-o" output-file
input-file
+ "-o" output-file
"-lm"))
-;;(defmethod compiler-options ((compiler (eql :gcc-cygwin)) (c elephant-c-source) &key input-file output-file)
-;; (unless (and input-file output-file)
-;; (error "Must specify both input and output files"))
-;; (list
-;; "-shared"
-;; "-mno-cygwin"
-;; "-mwindows"
-;; "-std=c99"
-;; input-file
-;; "-o" output-file
-;; "--export-symbols"
-;; (namestring (make-pathname :defaults output-file :type "def"))))
+(defmethod compiler-options ((compiler (eql :cygwin)) (c elephant-c-source) &key input-file output-file library &allow-other-keys)
+ (unless input-file
+ (error "Must specify both input and output files"))
+ `(,@(when library (list "-shared"))
+ "-mno-cygwin"
+ "-mwindows"
+ "-Wall"
+ ,@(unless library (list "-c -std=c99"))
+ "-std=c99"
+ ,@(when (symbolp input-file) (list input-file) input-file)
+ ,@(when output-file (list "-o" output-file))))
+;;Cygwin script:
;;gcc -mno-cygwin -mwindows -std=c99 -c libmemutil.c
;;dlltool -z libmeutil.def --export-all-symbols -e exports.o -l libmemutil.lib libmemutil.o
;;gcc -shared -mno-cygwin -mwindows libmemutil.o exports.o -o libmemutil.dll
-;;gcc -shared -mno-cygwin -mwindows libmemutil.o exports.o -o libmemutil.dll
-
-;;And this is the script for libsleepycat.dll:
-;;
-;;gcc -mno-cygwin -mwindows -c -Wall -std=c99 -L/c/DB/Berkeley\ DB\ 4.4.20/lib/ -I/c/DB/Berkeley\ DB\ 4.4.20/include/ libsleepycat.c
-;;dlltool -z libsleepycat.def --export-all-symbols -e exports.o -l libsleepycat.lib libsleepycat.o
-;;gcc -shared -mno-cygwin -mwindows -L/c/DB/Berkeley\ DB\ 4.4.20/bin/ -llibdb44 libsleepycat.o exports.o -o libsleepycat.dll
(defmethod compiler-options ((compiler (eql :msvc)) (c elephant-c-source) &key input-file output-file)
(error "MSVC compiler option not supported yet"))