Static builds with chicken

This commit is contained in:
retropikzel 2025-06-25 08:27:51 +03:00
parent b45b6e60e1
commit 1b02065f35
9 changed files with 82 additions and 49 deletions

2
.gitignore vendored
View File

@ -6,7 +6,9 @@ test
*.c *.c
*.o *.o
*.o* *.o*
*.a
*.so *.so
!src !src
*.rkt *.rkt
README.txt README.txt
*.import.*

View File

@ -1,28 +1,24 @@
PREFIX=/usr/local PREFIX=/usr/local
build: build:
printf "#!/bin/sh\nsash --disable-cache -r7 -L ${PREFIX}/lib/compile-r7rs/snow ${PREFIX}/lib/compile-r7rs/main.scm \"\$$@\"\n" > compile-r7rs csc -R r7rs -X r7rs -static -c -J -unit foreign.c -o foreign.c.o snow/foreign/c.sld
ar rcs foreign.c.a foreign.c.o
build-docker-images: csc -R r7rs -X r7rs -static -c -J -unit srfi-170 -o srfi-170.o snow/srfi/170.sld
for implementation in $(shell sash -L ./snow -L . compile-r7rs.scm --list-schemes); \ ar rcs srfi-170.a srfi-170.o
do \ csc -R r7rs -X r7rs -static -c -J -unit libs.util -o libs.util.o libs/util.sld
echo "Building $${implementation}"; \ ar rcs libs.util.a libs.util.o
docker build . --build-arg COMPILE_R7RS=$${implementation} --tag=retropikzel1/compile-r7rs:$${implementation}; \ csc -R r7rs -X r7rs -static -c -J -unit libs.library-util -o libs.library-util.o libs/library-util.sld
done ar rcs libs.library-util.a libs.library-util.o
csc -R r7rs -X r7rs -static -c -J -unit libs.data -o libs.data.o libs/data.sld
#for implementation in $(shell sash -L ./snow -L . compile-r7rs.scm --list-schemes); ar rcs libs.data.a libs.data.o
csc -R r7rs -X r7rs -static \
push-docker-images: -o compile-r7rs \
for implementation in $(shell sash -L ./snow -L . compile-r7rs.scm --list-schemes); \ -uses libs.util \
do \ -uses libs.library-util \
echo "Pushing $${implementation}"; \ -uses libs.data \
docker push retropikzel1/compile-r7rs:$${implementation}; \ -uses foreign.c \
done -uses srfi-170 \
compile-r7rs.scm
snow:
mkdir -p snow
cp -r ../foreign-c/foreign snow/
cp -r ../foreign-c-srfi-170/srfi snow/
# Does uninstall because without that the changes do not seem to update # Does uninstall because without that the changes do not seem to update
install: uninstall install: uninstall
@ -32,6 +28,14 @@ install: uninstall
cp compile-r7rs.scm ${PREFIX}/lib/compile-r7rs/main.scm cp compile-r7rs.scm ${PREFIX}/lib/compile-r7rs/main.scm
install compile-r7rs ${PREFIX}/bin/compile-r7rs install compile-r7rs ${PREFIX}/bin/compile-r7rs
snow:
mkdir -p snow
cp -r ../foreign-c/foreign snow/
cp -r ../foreign-c-srfi-170/srfi snow/
clean-snow:
rm -rf snow
install-compile-r7rs-docker: install-compile-r7rs-docker:
install compile-r7rs-docker.sh ${PREFIX}/bin/compile-r7rs-docker install compile-r7rs-docker.sh ${PREFIX}/bin/compile-r7rs-docker
@ -87,6 +91,7 @@ clean-test:
clean: clean:
find . -name "*.so" -delete find . -name "*.so" -delete
find . -name "*.o*" -delete find . -name "*.o*" -delete
find . -name "*.a*" -delete
find . -name "*.rkt" -delete find . -name "*.rkt" -delete
find . -name "*.link" -delete find . -name "*.link" -delete
find . -name "*.meta" -delete find . -name "*.meta" -delete

View File

@ -10,7 +10,7 @@
(chibi ast) (chibi ast)
(scheme inexact) (scheme inexact)
(chibi)) (chibi))
(include-shared "c/lib/chibi")) (include-shared "c/primitives/chibi/foreign-c"))
(chicken (chicken
(import (scheme base) (import (scheme base)
(scheme write) (scheme write)
@ -193,6 +193,9 @@
bytevector->c-bytevector bytevector->c-bytevector
c-bytevector->bytevector c-bytevector->bytevector
;;;; Utilities
libc
;; TODO endianness ;; TODO endianness
native-endianness native-endianness
make-c-bytevector make-c-bytevector
@ -317,12 +320,14 @@
(include "c/primitives/ypsilon.scm"))) (include "c/primitives/ypsilon.scm")))
(cond-expand (cond-expand
(chicken-6 (include-relative "c/main.scm") (chicken-6 (include-relative "c/main.scm")
(include-relative "c/libc.scm")
(include-relative "c/c-bytevectors.scm") (include-relative "c/c-bytevectors.scm")
(include-relative "c/pointer.scm") (include-relative "c/pointer.scm")
;(include-relative "c/array.scm") ;(include-relative "c/array.scm")
;(include-relative "c/struct.scm") ;(include-relative "c/struct.scm")
) )
(else (include "c/main.scm") (else (include "c/main.scm")
(include "c/libc.scm")
;(include "c/struct.scm") ;(include "c/struct.scm")
(include "c/c-bytevectors.scm") (include "c/c-bytevectors.scm")
(include "c/pointer.scm") (include "c/pointer.scm")

View File

@ -1,9 +1,14 @@
CC=gcc CC=gcc
chibi: primitives/chibi/foreign-c.stub chibi: foreign/c/primitives/chibi/foreign-c.stub
chibi-ffi primitives/chibi/foreign-c.stub chibi-ffi foreign/c/primitives/chibi/foreign-c.stub
mkdir -p lib ${CC} \
${CC} -g3 -o lib/chibi.so primitives/chibi/foreign-c.c -fPIC -lffi -shared -g3 \
-o foreign/c/primitives/chibi/foreign-c.so \
foreign/c/primitives/chibi/foreign-c.c \
-fPIC \
-lffi \
-shared
chicken: chicken:
@echo "Nothing to build for Chicken" @echo "Nothing to build for Chicken"

13
snow/foreign/c/libc.scm Normal file
View File

@ -0,0 +1,13 @@
(cond-expand
(windows (define-c-library libc
'("stdlib.h" "stdio.h" "string.h")
"ucrtbase"
'()))
(else
(define c-library "c")
(when (get-environment-variable "BE_HOST_CPU")
(set! c-library "root"))
(define-c-library libc
'("stdlib.h" "stdio.h" "string.h")
"c"
'((additional-versions ("0" "6"))))))

View File

@ -103,7 +103,9 @@
"/usr/lib" "/usr/lib"
"/usr/lib64" "/usr/lib64"
; NetBSD ; NetBSD
"/usr/pkg/lib"))))) "/usr/pkg/lib"
; Haiku
"/boot/system/lib")))))
(auto-load-versions (list "")) (auto-load-versions (list ""))
(paths (append auto-load-paths additional-paths)) (paths (append auto-load-paths additional-paths))
(versions (append additional-versions auto-load-versions)) (versions (append additional-versions auto-load-versions))

View File

@ -1,16 +1,15 @@
(cond-expand
(windows (define-c-library libc
'("stdlib.h" "string.h")
"ucrtbase"
'((additional-versions ("0" "6")))))
(else (define-c-library libc
'("stdlib.h" "string.h")
"c"
'((additional-versions ("0" "6"))))))
(define-c-procedure c-calloc libc 'calloc 'pointer '(int int)) (define-c-procedure c-calloc libc 'calloc 'pointer '(int int))
(define-c-procedure c-memset-address->pointer libc 'memset 'pointer '(uint64 uint8 int)) (cond-expand
(define-c-procedure c-memset-pointer->address libc 'memset 'uint64 '(pointer uint8 int)) (chicken (define c-memset-address->pointer
(lambda (address value offset)
(address->pointer address))))
(else (define-c-procedure c-memset-address->pointer libc 'memset 'pointer '(uint64 uint8 int))))
(cond-expand
(chicken (define c-memset-pointer->address
(lambda (pointer value offset)
(pointer->address pointer))))
(else (define-c-procedure c-memset-pointer->address libc 'memset 'uint64 '(pointer uint8 int))))
;(define-c-procedure c-memset-address libc 'memset 'pointer '(uint64 uint8 int)) ;(define-c-procedure c-memset-address libc 'memset 'pointer '(uint64 uint8 int))
;(define-c-procedure c-printf libc 'printf 'int '(pointer pointer)) ;(define-c-procedure c-printf libc 'printf 'int '(pointer pointer))
(define-c-procedure c-malloc libc 'malloc 'pointer '(int)) (define-c-procedure c-malloc libc 'malloc 'pointer '(int))

View File

@ -1,16 +1,18 @@
(define slash (cond-expand (windows "\\") (else "/"))) (define slash (cond-expand (windows "\\") (else "/")))
(cond-expand (cond-expand
(windows (windows (define-c-library srfi-170-libc
(define-c-library libc '("dirent.h" "stdlib.h" "stdio.h" "string.h")
'("stdlib.h" "stdio.h" "error.h") "ucrtbase"
"ucrtbase" '()))
'()))
(else (else
(define-c-library libc (define c-library "c")
'("stdlib.h" "stdio.h" "dirent.h" "error.h") (when (get-environment-variable "BE_HOST_CPU")
"c" (set! c-library "root"))
'((additional-versions ("6")))))) (define-c-library srfi-170-libc
'("dirent.h" "stdlib.h" "stdio.h" "string.h")
"c"
'((additional-versions ("0" "6"))))))
(define-c-procedure c-perror libc 'perror 'void '(pointer)) (define-c-procedure c-perror libc 'perror 'void '(pointer))
(define-c-procedure c-mkdir libc 'mkdir 'int '(pointer int)) (define-c-procedure c-mkdir libc 'mkdir 'int '(pointer int))