~ chicken-core (chicken-5) 4285b9e5d23f52ddba1d26f3e4325952920873ff
commit 4285b9e5d23f52ddba1d26f3e4325952920873ff Author: felix <felix@call-with-current-continuation.org> AuthorDate: Sat Apr 16 22:39:46 2016 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Sat Apr 16 22:39:46 2016 +0200 Add STATICBUILD to chicken-config.h diff --git a/Makefile.ios b/Makefile.ios index 54b88b3c..791c3d80 100644 --- a/Makefile.ios +++ b/Makefile.ios @@ -66,6 +66,7 @@ include $(SRCDIR)/defaults.make chicken-config.h: chicken-defaults.h echo "/* GENERATED */" >$@ + echo "#define STATICBUILD 1" >>$@ echo "#define HAVE_DIRENT_H 1" >>$@ echo "#define HAVE_INTTYPES_H 1" >>$@ echo "#define HAVE_LIMITS_H 1" >>$@ diff --git a/defaults.make b/defaults.make index cce0e26a..b09e0a3b 100644 --- a/defaults.make +++ b/defaults.make @@ -328,6 +328,9 @@ ifdef OPTIMIZE_FOR_SPEED endif ifdef DEBUGBUILD $(call echo, >>, $@,#define DEBUGBUILD 1) +endif +ifdef STATICBUILD + $(call echo, >>, $@,#define STATICBUILD 1) endif $(call echo, >>, $@,#define C_CHICKEN_PROGRAM "$(CHICKEN_PROGRAM)$(EXE)") $(call echo, >>, $@,#ifndef C_INSTALL_CC) diff --git a/egg-info.scm b/egg-compile.scm similarity index 74% rename from egg-info.scm rename to egg-compile.scm index bd1e4340..7e625661 100644 --- a/egg-info.scm +++ b/egg-compile.scm @@ -10,7 +10,8 @@ (define valid-items '(synopsis authors category license version dependencies files source-file csc-options test-dependencies destination linkage - build-dependencies components foreign-dependencies link-options)) + build-dependencies components foreign-dependencies link-options + custom-bulild)) (define nested-items '(components)) @@ -30,6 +31,9 @@ (define windows-executable-extension ".exe") (define unix-object-extension ".o") (define windows-object-extension ".obj") + +;XXX (define staticbuild (foreign-value "STATICBUILD" bool)) +(define staticbuild #f) (define (validate-egg-info info) @@ -58,6 +62,7 @@ (src #f) (files '()) (ifiles '()) + (cbuild #f) (link '()) (dest #f) (deps '()) @@ -78,6 +83,7 @@ (fluid-let ((target (check-target (cadr info) exts)) (deps '()) (src #f) + (cbuild #f) (link default-extension-linkage) (lopts '()) (opts '())) @@ -85,8 +91,10 @@ (addfiles (if (memq 'static link) (conc target objext) '()) (if (memq 'dynamic link) (conc target ".so") '()) - (conc target ".import.so")) ; assumes import-lib is always compiled? - (set! exts (cons (list target deps src opts lopts link) exts)))) + (if staticbuild + (conc target ".import.scm") + (conc target ".import.so"))) + (set! exts (cons (list target deps src opts lopts link cbuild) exts)))) ((data) (fluid-let ((target (check-target (cadr info) data)) (dest #f) @@ -114,17 +122,20 @@ ((program) (fluid-let ((target (check-target (cadr info) prgs)) (deps '()) + (cbuild #f) (src #f) (link default-program-linkage) (lopts '()) (opts '())) (for-each compile-extension/program (cddr info)) (addfiles (conc target exeext)) - (set! prgs (cons (list target deps src opts lopts link) prgs)))))) + (set! prgs (cons (list target deps src opts lopts link cbuild) prgs)))))) (define (compile-extension/program info) (case (car info) ((linkage) (set! link (cdr info))) + ((custom-build) + (set! cbuild (arg info 1 string?))) ((csc-options) (set! opts (append opts (cdr info)))) ((link-options) @@ -201,7 +212,19 @@ `((compile-import-library ,@data)) cmds))) '() order) - (map (lambda (prg) `(compile-program ,prg)) prgs)) + (foldr + (lambda (prg cmds) + (let ((link (list-ref prg 5))) + (append + (if (memq 'static link) + `((compile-static-program ,@prg)) + '()) + (if (memq 'dynamic link) + `((compile-dynamic-program ,@prg)) + '()) + cmds))) + '() + prgs)) ;; installation commands (append (map (lambda (ext) `(install-extension ,@ext)) exts) @@ -213,75 +236,50 @@ (cons `(installed-files ,@ifiles) info))))) -;;; UNIX shell code generation - -(define (gen-compile-unix-extension name deps src opts lopts link) - ...) - -(define (gen-compile-unix-program name deps src opts lopts link) - ...) - -(define (gen-install-unix-extension name deps src opts lopts link) - ...) - -(define (gen-install-unix-program name deps src opts lopts link) - ...) +;;; shell code generation -(define (gen-install-unix-data name deps files dest) +(define (gen-compile-static-extension platform name deps src opts lopts link cbuild) ...) -(define (gen-install-unix-c-include name deps files dest) +(define (gen-compile-dynamic-extension platform name deps src opts lopts link cbuild) ...) -(define (gen-install-unix-scheme-include name deps files dest) +(define (gen-compile-import-library platform name deps src opts lopts link cbuild) ...) - -;;; Windows batch code generation - -(define (gen-compile-windows-extension name deps src opts lopts link) +(define (gen-compile-dynamic-program platform name deps src opts lopts link cbuild) ...) -(define (gen-compile-windows-program name deps src opts lopts link) +(define (gen-compile-static-program platform name deps src opts lopts link cbuild) ...) -(define (gen-install-windows-extension name deps src opts lopts link) +(define (gen-install-extension platform name deps src opts lopts link cbuild) ...) -(define (gen-install-windows-program name deps src opts lopts link) +(define (gen-install-program platform name deps src opts lopts link cbuild) ...) -(define (gen-install-windows-data name deps files dest) +(define (gen-install-data platform name deps files dest) ...) -(define (gen-install-windows-c-include name deps files dest) +(define (gen-install-c-include platform name deps files dest) ...) -(define (gen-install-windows-scheme-include name deps files dest) +(define (gen-install-scheme-include platform name deps files dest) ...) +(define command-table + `((compile-static-extension ,gen-compile-static-extension) + (compile-dynamic-extension ,gen-compile-dynamic-extension) + (compile-dynamic-program ,gen-compile-dynamic-program) + (compile-static-program ,gen-compile-static-program) + (install-extension ,gen-install-extension) + (install-data ,gen-install-data) + (compile-import-library ,gen-compile-import-library) + (install-data ,gen-install-data) + (install-c-include ,gen-install-c-include) + (install-scheme-include ,gen-install-scheme-include) -;;; platform-independent part of code generation - -(define generators - `((compile-static-extension (unix ,gen-compile-unix-static-extension) - (windows ,gen-compile-windows-static-extension)) - (compile-dynamic-extension (unix ,gen-compile-unix-dynamic-extension) - (windows ,gen-compile-windows-dynamic-extension)) - (compile-import-library (unix ,gen-compile-unix-import-library) - (windows ,gen-compile-windows-import-library)) - (compile-program (unix ,gen-compile-unix-program) - (windows ,gen-compile-windows-program)) - (install-extension (unix ,gen-install-unix-extension) - (windows ,gen-install-windows-extension)) - (install-program (unix ,gen-install-unix-program) - (windows ,gen-install-windows-program)) - (install-data (unix ,gen-install-unix-data) - (windows ,gen-install-windows-data)) - (install-c-include (unix ,gen-install-unix-c-include) - (windows ,gen-install-windows-c-include)) - (install-scheme-include (unix ,gen-install-unix-scheme-include) - (windows ,gen-install-windows-scheme-include)))) (define (generate-shell-commands platform cmds dest prefix suffix) (with-output-to-file dest @@ -289,17 +287,36 @@ (prefix) (for-each (lambda (cmd) - (cond ((assq cmd generators) => - (lambda (gen) - (cond ((assq platform (cdr gen)) => - (lambda (a) (apply (cdr a) (cdr cmd)))) - (else (error "invalid platform" platform))))) + (cond ((assq (car cmd) command-table) + => (lambda (op) (apply (cadr op) platform (cdr cmd)))) (else (error "invalid command" cmd)))) cmds) (suffix)))) +;;; some utilities for mangling + quoting + +(define (quotearg str) + (let ((lst (string->list str))) + (if (foldl char-whitespace? #f lst) + (string-append "\"" str "\"") + str))) + +(define (slashify str platform) + (if (eq? platform 'windows) + (list->string + (map (lambda (c) (if (char=? #\/ c) #\\ c)) (string->list str))) + str)) + +(define (quote-all str platform) + (if (and (eq? platform 'windows) + (positive? (string-length str)) + (char=? #\" (string-ref str 0))) + (string-append "\"" str "\"") + str)) + + ;; (set! hyde (with-input-from-file "hyde.egg" read)) -(pp (receive (compile-egg-info hyde))) +(pp (receive (compile-egg-info hyde 'unix))) diff --git a/egg-environment.scm b/egg-environment.scm new file mode 100644 index 00000000..ed92873b --- /dev/null +++ b/egg-environment.scm @@ -0,0 +1,44 @@ +;;; environment settings for egg compilation + + +(foreign-declare #<<EOF +#ifndef STATICBUILD +# define STATIC_CHICKEN 0 +#else +# define STATIC_CHICKEN 1 +#endif +EOF +) + +(define staticbuild (foreign-value "STATIC_CHICKEN" bool)) +(define cross-chicken (feature? #:cross-chicken)) +(define binary-version (foreign-value "C_BINARY_VERSION" int)) + +(define default-cc (foreign-value "C_TARGET_CC" c-string)) +(define default-cxx (foreign-value "C_TARGET_CXX" c-string)) +(define default-cflags (foreign-value "C_TARGET_CFLAGS" c-string)) +(define default-ldflags (foreign-value "C_TARGET_LDFLAGS" c-string)) +(define default-libs (foreign-value "C_TARGET_MORE_LIBS" c-string)) +(define default-slibs (foreign-value "C_TARGET_MORE_STATIC_LIBS" c-string)) +(define default-libdir (foreign-value "C_TARGET_LIB_HOME" c-string)) +(define default-slibdir (foreign-value "C_TARGET_STATIC_LIB_HOME" c-string)) +(define default-incdir (foreign-value "C_TARGET_INCLUDE_HOME" c-string)) + +(define default-platform + (if (eq? (software-type) 'windows) + (foreign-value "C_WINDOWS_SHELL" bool) + 'unix)) + +(define default-prefix (foreign-value "C_INSTALL_PREFIX" c-string)) +(define default-bindir (foreign-value "C_INSTALL_BIN_HOME" c-string)) +(define default-csc (foreign-value "C_CSC_PROGRAM" c-string)) + +(define default-sudo (or (get-environment-variable "SUDO") "sudo")) + +(define host-repo (foreign-value "C_INSTALL_EGG_HOME" c-string)) + +(define target-repo + (string-append default-libdir "/chicken/" (number->string binary-version))) + +(define host-mode #t) +(define target-mode #t)Trap