aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-04-10 17:48:53 -0400
committerGravatar Peter McGoron 2025-04-10 17:48:53 -0400
commitee051aa84a57db3a6b2d19bc685c491d876e02b9 (patch)
treea906943c05e4759674919500c9f10d383596c281
parentchibi libraries (diff)
add r7rs-pffi example
-rw-r--r--examples/hello-world.scm9
-rw-r--r--examples/pffi.scm83
2 files changed, 83 insertions, 9 deletions
diff --git a/examples/hello-world.scm b/examples/hello-world.scm
index 19790d7..29ca55f 100644
--- a/examples/hello-world.scm
+++ b/examples/hello-world.scm
@@ -30,12 +30,3 @@
(build-system chibi-scheme-build-system)
(inputs (list chibi-scheme-with-path)))
-#;(pure-chibi-scheme-library (chibi/search-path)
- "hello-world"
- "1.0"
- "Prints hello world"
- "Prints hello world"
- asl2.0
- "https://example.com"
- "hello-world")
-
diff --git a/examples/pffi.scm b/examples/pffi.scm
new file mode 100644
index 0000000..e68224d
--- /dev/null
+++ b/examples/pffi.scm
@@ -0,0 +1,83 @@
+#| Copyright (C) 2025 Peter McGoron
+ |
+ | This program is free software: you can redistribute it and/or modify it
+ | under the terms of the GNU General Public License as published by the
+ | Free Software Foundation, either version 3 of the License, or (at your
+ | option) any later version.
+ |
+ | This program is distributed in the hope that it will be useful, but
+ | WITHOUT ANY WARRANTY; without even the implied warranty of
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ | General Public License for more details.
+ |
+ | You should have received a copy of the GNU General Public License along
+ | with this program. If not, see <https://www.gnu.org/licenses/>.
+ |#
+
+(use-modules (mcgoron guix chibi)
+ (gnu packages libffi)
+ (gnu packages commencement)
+ (gnu packages base)
+ (guix git-download)
+ (guix build-system gnu)
+ (guix packages)
+ (guix gexp)
+ (guix licenses))
+
+(package
+ (name "pffi-chibi")
+ (version "0.5.0")
+ (synopsis "Portable Foreign Function Interface for R7RS")
+ (description "Portable Foreign Function Interface for R7RS")
+ (license lgpl3+)
+ (home-page "https://sr.ht/~retropikzel/r7rs-pffi")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.sr.ht/~retropikzel/r7rs-pffi/")
+ (commit "v0.5.0")))
+ (file-name (git-file-name "r7rs-pffi" version))
+ (sha256
+ (base32 "1ggkafggyqqla6ba8dlhzvvf6v7i6scpa2xyr1mfxxy8iwnl70aa"))))
+ (build-system gnu-build-system)
+ (inputs (list chibi-scheme-with-path libffi))
+ (native-inputs (list gcc-toolchain glibc))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (replace 'build
+ (lambda* (#:key outputs #:allow-other-keys)
+ (invoke "chibi-ffi"
+ "retropikzel/r7rs-pffi/r7rs-pffi-chibi.stub")
+ (invoke "gcc"
+ "-o"
+ "retropikzel/r7rs-pffi/r7rs-pffi-chibi.so"
+ "-fPIC"
+ "-shared"
+ "retropikzel/r7rs-pffi/r7rs-pffi-chibi.c"
+ "-lchibi-scheme"
+ "-lffi")))
+ (replace 'check
+ (lambda* (#:key (test-target "check") (tests? #t) #:allow-other-keys)
+ (display "tests don't work yet\n")
+ #;(when tests?
+ (invoke "chibi-scheme" "-A" "." "test.scm"))))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (base-dir (string-append out
+ "/share/guix-chibi/retropikzel/"))
+ (copy (lambda (name)
+ (invoke "cp"
+ (string-append "retropikzel/" name)
+ (string-append base-dir name)))))
+ (invoke "mkdir" "-p" (string-append base-dir "/r7rs-pffi"))
+ (for-each copy
+ '("r7rs-pffi.sld"
+ "r7rs-pffi/r7rs-pffi-chibi.so"
+ "r7rs-pffi/chibi.scm"
+ "r7rs-pffi/main.scm"
+ "r7rs-pffi/struct.scm")))))))))
+