$ ./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: (##core#begin (print (m2-macro "hello" "there"))) (print (m2-macro "hello" "there")) (m2-macro "hello" "there") (m1-bar (cdr e)) <--