changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > demo / ffi.lisp

changeset 16: af615d1895cb
parent: 1fedeaa5bfc5
child: a1137af05c8d
author: ellis <ellis@rwest.io>
date: Fri, 26 May 2023 21:59:40 -0400
permissions: -rw-r--r--
description: refactoring, ui stuff (goin with slint for DSL power)
1 (in-package :demo)
2 (defparameter quiche-lib-path #p"./ffi/libquiche.dylib")
3 (defparameter rocksdb-lib-path #p"./ffi/librocksdb.dylib")
4 (defparameter demo-lib-path (find-rs-cdylib "libdemo.dylib"))
5 (defmacro find-rs-cdylib (name &optional debug)
6  "Find the rust dll specified by NAME."
7  (cond
8  ((uiop:directory-exists-p (merge-pathnames *cargo-target* "release"))
9  `,(mkstr "./target/release/" name))
10  ((uiop:directory-exists-p (merge-pathnames *cargo-target* "debug"))
11  `,(mkstr "./target/debug/" name))
12  (t `(progn
13  ,(uiop:run-program '("cargo" "build" (unless debug "--release")) :output t)
14  (find-rs-cdylib ,name ,debug)))))
15 
16 (define-foreign-library demo
17  (:win32 (:default "demo"))
18  (t (:default "libdemo")))
19 (define-foreign-library quiche
20  (:win32 (:default "quiche"))
21  (t (:default "libquiche")))
22 (define-foreign-library rocksdb
23  (:win32 (:default "rocksdb"))
24  (t (:default "librocksdb")))
25 
26 (defun load-libdemo () (load-foreign-library (find-rs-cdylib "libdemo.dylib")))
27 (defun install-quiche-lib (&optional path) (load-foreign-library (or path quiche-lib-path)))
28 (defun install-rocksdb-lib (&optional path) (load-foreign-library (or path rocksdb-lib-path)))