-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
86 lines (68 loc) · 2.26 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
SHELL=/bin/bash
OS=$(shell echo `uname -a`)
PWD=$(shell pwd)
ifneq ($(findstring x86_64,$(OS)),)
INCLUDE=/usr/local/Cellar/openjdk/23.0.2/include # this is for jni.h
ARCH=amd64
else
INCLUDE=/opt/homebrew/opt/openjdk/include # this is for jni.h
ARCH=arm64
endif
ifneq ($(findstring Darwin,$(OS)),)
CC=gcc-14
LIBEXT=.dylib
else
CC=gcc
LIBEXT=.so
INCLUDE=/usr/lib/jvm/java-21-openjdk-$(ARCH)/include # this is for jni.h
INCLUDE2=-I/usr/lib/jvm/java-21-openjdk-$(ARCH)/include/linux # this is for jni_md.h
endif
CFLAGS=-Wall -Wextra -pedantic -std=c99 -shared -fpic
ifeq ($(LIB_GO),1)
LIB=libfraction_go
else ifeq ($(LIB_RUST),1)
LIB=libfraction_rust
else ifeq ($(LIB_CPP),1)
LIB=libfraction_cpp
else
LIB=libfraction
endif
java: $(LIB)
$(CC) $(CFLAGS) -I$(INCLUDE) $(INCLUDE2) -o java_ffi/libjava_ffi$(LIBEXT) java_ffi/java_ffi_FractionTester.c
javac java_ffi/FractionTester.java
java -Djava.library.path=$(PWD)/java_ffi java_ffi/FractionTester
# java -Djava.library.path=$(PWD)/java_ffi java_ffi/FractionTester.java
python: $(LIB)
python3 python_ffi/fraction_tester.py
nodejs: $(LIB)
npx node-gyp rebuild --loglevel silent
npm start
go: $(LIB)
$(CC) $(CFLAGS) -o go_ffi/libgo_ffi$(LIBEXT) go_ffi/go_ffi.c
cd go_ffi; go build
go_ffi/go_ffi
# go run go_ffi/fraction_tester.go go_ffi/cfuncs.go
rust: $(LIB)
ifneq ($(findstring Darwin,$(OS)),)
RUSTFLAGS="-L." cargo run -q
else
RUSTFLAGS="-L. -C link-args=-Wl,-rpath=$(PWD)" cargo run -q
endif
webassembly:
# Compiling libfraction.c with wasm_ffi.c since web browsers cannot run ELF binaries
cd webassembly_ffi; emcc -sEXPORTED_RUNTIME_METHODS=["cwrap"] wasm_ffi.c ../libfraction.c; python3 -m http.server
csharp: $(LIB)
dotnet run --project csharp_ffi
libfraction:
$(CC) $(CFLAGS) -o libfraction$(LIBEXT) libfraction.c
libfraction_go:
go build -buildmode=c-shared -o libfraction$(LIBEXT) libfraction.go
rm libfraction.h
libfraction_rust:
rustc --crate-type=cdylib -o libfraction$(LIBEXT) libfraction.rs
libfraction_cpp:
g++ -Wall -Wextra -pedantic -std=c++14 -shared -fpic -o libfraction$(LIBEXT) libfraction.cpp
clean:
rm -rf *$(LIBEXT) **/*$(LIBEXT) go_ffi/go_ffi build java_ffi/*.class target webassembly_ffi/a.out* csharp_ffi/bin csharp_ffi/obj
help:
@echo "To use the Go fraction library add LIB_GO=1, e.g. make python LIB_GO=1"