~ chicken-core (chicken-5) a06ff8424d79f8b165e33f9937ca80d6a80bf7c3
commit a06ff8424d79f8b165e33f9937ca80d6a80bf7c3
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Wed Nov 10 07:34:55 2010 -0500
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Wed Nov 10 07:34:55 2010 -0500
undocumented static egg linking stuff
diff --git a/manual/Extensions b/manual/Extensions
index fdfef4b5..7ae087a6 100644
--- a/manual/Extensions
+++ b/manual/Extensions
@@ -125,25 +125,6 @@ does not require code to be loaded at runtime.
Specifies version string.
-===== static
-
- [extension property] (static STRING)
-
-If the extension also provides a static library, then STRING should
-contain the name of that library. Used by {{csc}} when compiling with
-the {{-static-extension}} option.
-
-===== static-options
-
- [extension property] (static-options STRING)
-
-Additional options that should be passed to the linker when linking
-with the static version of an extension (see {{static}} above). Used
-by {{csc}} when compiling with the {{-static-extension}} option.
-
-All other properties are currently ignored. The {{FILELIST}} argument may also be a single
-string.
-
==== install-program
<procedure>(install-program ID FILELIST [INFOLIST])</procedure>
@@ -160,13 +141,12 @@ files in {{FILELIST}} to executable (for installing shell-scripts).
==== standard-extension
-<procedure>(standard-extension ID [VERSION] #!key static info)</procedure>
+<procedure>(standard-extension ID [VERSION] #!key info)</procedure>
A convenience procedure that combines the compilation and installation of
a simple single-file extension. This is roughly equivalent to:
(compile -s -O2 -d1 ID.scm -j ID)
- (compile -c -O2 -d1 ID.scm -j ID -unit ID) ; if STATIC is not given or true
(compile -s -O2 -d0 ID.import.scm)
(install-extension
@@ -174,7 +154,7 @@ a simple single-file extension. This is roughly equivalent to:
'("ID.o" "ID.so" "ID.import.so")
'((version 1.0)
... `INFO' ...
- (static "ID.o"))) ; if `static' is given and true
+ ))
{{VERSION}} may be {{#f}} or can be omitted, in that case the version
obtained from where the extension has been retrieved wil be taken. If
@@ -505,20 +485,17 @@ The setup file is:
;;; my-lib.setup
(compile -s -O3 -d1 "my-lib.scm" -j my-lib)
-(compile -c -O3 -d1 "my-lib.scm" -unit my-lib)
(compile -s -O3 -d0 "my-lib.import.scm")
(install-extension
'my-lib
'("my-lib.o" "my-lib.so" "my-lib.import.so")
- '((version 1.0)
- (static "my-lib.o")))
+ '((version 1.0)))
</enscript>
The first line tells the compiler to create a shared ({{-s}}) library
and to create an import file ({{my-lib.import.scm}}, because of the
-{{-j}} flag). The second line creates a static library
-{{my-lib.o}}. The third line compiles the import file created by the
+{{-j}} flag). The second line compiles the import file created by the
first one.
IMPORTANT: the module name exported by my-lib.scm must be the same
@@ -700,40 +677,6 @@ try alternative locations, as listed in the file.
Dependency information, which is necessary to ensure required
extensions are also installed, is processed automatically.
-=== Linking extensions statically
-
-The compiler and {{chicken-install}} support statically linked
-eggs. The general approach is to generate an object file or static
-library (in addition to the usual
-shared library) in your {{.setup}} script and install it along with the
-dynamically loadable extension. The setup properties {{static}}
-should contain the name of the object file (or static library) to be
-linked, when {{csc}} gets passed the {{-static-extension}} option:
-
-<enscript highlight=scheme>
- (compile -s -O2 -d1 my-ext.scm) ; dynamically loadable "normal" version
- (compile -c -O2 -d1 my-ext -unit my-ext) ; statically linkable version
- (install-extension
- 'my-ext
- '("my-ext.so" "my-ext.o")
- '((static "my-ext.o")) )
-</enscript>
-
-Note the use of the {{-unit}} option in the second compilation step: static
-linking must use static library units. {{chicken-install}} will perform
-platform-dependent file-extension translation for the file list, but does currently
-not do that for the {{static}} extension property.
-
-To actually link with the static version of {{my-ext}}, do:
-
- % csc -static-extension my-ext my-program.scm
-
-The compiler will try to do the right thing, but can not handle all
-extensions, since the ability to statically link eggs is relatively
-new. Eggs that support static linking are designated as being able to
-do so. If you require a statically linkable version of an egg that has
-not been converted yet, contact the extension author or the CHICKEN
-mailing list.
---
Previous: [[Interface to external functions and variables]]
diff --git a/setup-api.scm b/setup-api.scm
index 8b641bb3..23586e18 100644
--- a/setup-api.scm
+++ b/setup-api.scm
@@ -549,15 +549,13 @@
;;; Convenience function
-(define (standard-extension name #!optional version #!key (static #t) (info '()))
+(define (standard-extension name #!optional version #!key static (info '()))
+ ;; `static' is ignored
(let* ((sname (->string name))
(fname (make-pathname #f sname "scm"))
(iname (make-pathname #f sname "import.scm"))
(ilname (make-pathname #f sname "inline")))
(compile -dynamic -optimize-level 3 -debug-level 1 ,fname -emit-import-library ,name)
- (when static
- (compile -c -optimize-level 3 -debug-level 1 ,fname -emit-import-library
- ,name -unit ,name))
(compile -dynamic -optimize-level 3 -debug-level 0 ,iname)
(install-extension
name
@@ -566,8 +564,7 @@
,@(if (file-exists? ilname)
(list ilname)
'()))
- `(,@(supply-version info version)
- ,@(if static `((static ,(make-pathname #f fname "o"))) '())))))
+ `(,@(supply-version info version)))))
;;; Installation
Trap