static build & macros pasted by megane on Fri Dec 28 13:58:45 2018
$ ./run.sh
+ rm -rf '*.so' '*.o' m1.import.scm m2.import.scm 'src/*.so' src/m1.o src/m2.o
+ tree
.
├── main.scm
├── run.sh
└── src
├── m1.scm
└── m2.scm
1 directory, 4 files
+ echo ----------------------------------------
----------------------------------------
+ more run.sh src/m1.scm src/m2.scm main.scm
+ cat
::::::::::::::
run.sh
::::::::::::::
#!/usr/bin/env bash
set -euox pipefail
rm -rf *.so *.o *.import.scm src/*.so src/*.o
tree
echo "----------------------------------------"
more run.sh src/m1.scm src/m2.scm main.scm | cat
echo "----------------------------------------"
csc -c -O3 -J -unit m1 src/m1.scm
csc -c -O3 -J -uses m1 -unit m2 src/m2.scm
tree
csc -static main.scm -uses m1 src/m1.o -uses m2 src/m2.o
./main
::::::::::::::
src/m1.scm
::::::::::::::
(module
m1 (m1-bar) (import scheme (chicken base))
(define (m1-bar f) (print "m1-bar called " f) `(list m1-bar ,f)))
::::::::::::::
src/m2.scm
::::::::::::::
(module
m2
(m2-macro)
(import scheme (chicken base))
(import m1)
(define-syntax m2-macro
(ir-macro-transformer (lambda (e inj cmp)
(m1-bar (cdr e))))))
::::::::::::::
main.scm
::::::::::::::
(import m2)
(print (m2-macro "hello" "there"))
+ echo ----------------------------------------
----------------------------------------
+ csc -c -O3 -J -unit m1 src/m1.scm
+ csc -c -O3 -J -uses m1 -unit m2 src/m2.scm
+ tree
.
├── m1.import.scm
├── m2.import.scm
├── main.scm
├── run.sh
└── src
├── m1.o
├── m1.scm
├── m2.o
└── m2.scm
1 directory, 8 files
+ csc -static main.scm -uses m1 src/m1.o -uses m2 src/m2.o
Error: during expansion of (m2-macro ...) - unbound variable: m1#m1-bar
Call history:
<syntax> (##core#begin (print (m2-macro "hello" "there")))
<syntax> (print (m2-macro "hello" "there"))
<syntax> (m2-macro "hello" "there")
<eval> (m1-bar (cdr e)) <--
no title pasted by megane on Fri Dec 28 14:15:54 2018
$ ./run.sh + rm -rf '*.so' '*.o' m1.import.scm m2.import.scm 'src/*.so' src/m1.o src/m2.o + tree . ├── main.scm ├── run.sh ├── src │ ├── m1.scm │ └── m2.scm └── static-build.txt 1 directory, 5 files + echo ---------------------------------------- ---------------------------------------- + more run.sh src/m1.scm src/m2.scm main.scm + cat :::::::::::::: run.sh :::::::::::::: #!/usr/bin/env bash set -euox pipefail rm -rf *.so *.o *.import.scm src/*.so src/*.o tree echo "----------------------------------------" more run.sh src/m1.scm src/m2.scm main.scm | cat echo "----------------------------------------" csc -c -O3 -J -unit m1 src/m1.scm csc -c -O3 -J -uses m1 -unit m2 src/m2.scm tree csc -static main.scm -uses m1 src/m1.o -uses m2 src/m2.o ./main :::::::::::::: src/m1.scm :::::::::::::: (module m1 (m1-bar) (import scheme (chicken base)) (define (m1-bar f) (print "m1-bar called " f) `(list m1-bar ,f))) :::::::::::::: src/m2.scm :::::::::::::: (module m2 (m2-macro) (import scheme (chicken base)) (import-for-syntax m1) (define-syntax m2-macro (ir-macro-transformer (lambda (e inj cmp) (m1-bar (cdr e)))))) :::::::::::::: main.scm :::::::::::::: (import m2) (print (m2-macro "hello" "there")) + echo ---------------------------------------- ---------------------------------------- + csc -c -O3 -J -unit m1 src/m1.scm + csc -c -O3 -J -uses m1 -unit m2 src/m2.scm Error: (require) cannot load extension: m1 Call history: <syntax> (scheme#list) <syntax> (quote ((m1-bar . m1#m1-bar))) <syntax> (##core#quote ((m1-bar . m1#m1-bar))) <syntax> (scheme#list) <syntax> (scheme#list) <eval> (##sys#register-compiled-module (quote m1) (quote m1) (scheme#list) (quote ((m1-bar . m1#m1-bar))) (... <eval> (scheme#list) <eval> (scheme#list) <eval> (scheme#list) <syntax> (##core#begin (##core#require m1 m1#)) <syntax> (##core#require m1 m1#) <syntax> (chicken.load#load-extension (##core#quote m1) (##core#quote (m1#)) (##core#quote require)) <syntax> (##core#quote m1) <syntax> (##core#quote (m1#)) <syntax> (##core#quote require) <eval> (chicken.load#load-extension (##core#quote m1) (##core#quote (m1#)) (##core#quote require)) <--
it works! added by megane on Fri Dec 28 14:20:54 2018
$ ./run.sh + rm -rf '*.so' '*.o' m1.import.scm 'src/*.so' src/m1.o + tree . ├── main ├── main.link ├── main.scm ├── run.sh ├── src │ ├── m1.scm │ └── m2.scm ├── static-build2.txt └── static-build.txt 1 directory, 8 files + echo ---------------------------------------- ---------------------------------------- + more run.sh src/m1.scm src/m2.scm main.scm + cat :::::::::::::: run.sh :::::::::::::: #!/usr/bin/env bash set -euox pipefail rm -rf *.so *.o *.import.scm src/*.so src/*.o tree echo "----------------------------------------" more run.sh src/m1.scm src/m2.scm main.scm | cat echo "----------------------------------------" csc -s -O3 -J -unit m1 src/m1.scm -o m1.so csc -c -O3 -J -unit m1 src/m1.scm csc -c -O3 -J -uses m1 -unit m2 src/m2.scm csc -static main.scm -uses m1 src/m1.o -uses m2 src/m2.o ./main :::::::::::::: src/m1.scm :::::::::::::: (module m1 (m1-bar) (import scheme (chicken base)) (define (m1-bar f) (print "m1-bar called " f) `(list m1-bar ,f))) :::::::::::::: src/m2.scm :::::::::::::: (module m2 (m2-macro) (import scheme (chicken base)) (import-for-syntax m1) (define-syntax m2-macro (ir-macro-transformer (lambda (e inj cmp) (m1-bar (cdr e)))))) :::::::::::::: main.scm :::::::::::::: (import m2) (print (m2-macro "hello" "there")) + echo ---------------------------------------- ---------------------------------------- + csc -s -O3 -J -unit m1 src/m1.scm -o m1.so + csc -c -O3 -J -unit m1 src/m1.scm + csc -c -O3 -J -uses m1 -unit m2 src/m2.scm + csc -static main.scm -uses m1 src/m1.o -uses m2 src/m2.o m1-bar called (hello there) Warning: literal in operator position: ("hello" "there") Warning: at toplevel: in procedure call to `"hello"', expected a value of type `(procedure (*) *)' but was given a value of type `string' + ./main Error: call of non-procedure: "hello"