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
*.o
*.o*
*.a
*.so
!src
*.rkt
README.txt
*.import.*

View File

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

View File

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

View File

@ -1,9 +1,14 @@
CC=gcc
chibi: primitives/chibi/foreign-c.stub
chibi-ffi primitives/chibi/foreign-c.stub
mkdir -p lib
${CC} -g3 -o lib/chibi.so primitives/chibi/foreign-c.c -fPIC -lffi -shared
chibi: foreign/c/primitives/chibi/foreign-c.stub
chibi-ffi foreign/c/primitives/chibi/foreign-c.stub
${CC} \
-g3 \
-o foreign/c/primitives/chibi/foreign-c.so \
foreign/c/primitives/chibi/foreign-c.c \
-fPIC \
-lffi \
-shared
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/lib64"
; NetBSD
"/usr/pkg/lib")))))
"/usr/pkg/lib"
; Haiku
"/boot/system/lib")))))
(auto-load-versions (list ""))
(paths (append auto-load-paths additional-paths))
(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-memset-address->pointer libc 'memset 'pointer '(uint64 uint8 int))
(define-c-procedure c-memset-pointer->address libc 'memset 'uint64 '(pointer uint8 int))
(cond-expand
(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-printf libc 'printf 'int '(pointer pointer))
(define-c-procedure c-malloc libc 'malloc 'pointer '(int))

View File

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