4 JAVA_HOME?=/opt/jdk-foreign/jvm/openjdk-19-internal
5 JAVAC=$(JAVA_HOME)/bin/javac
6 JAVA=$(JAVA_HOME)/bin/java
8 JAVACFLAGS=--add-modules jdk.incubator.foreign
10 api_SOURCES := $(wildcard ../src/api/*.java)
11 api_demo_SOURCES := $(wildcard src/api/test/*.java)
16 all:: bin/demo.built bin/libapi.so
18 bin/api.built: bin/api.gen
19 $(JAVAC) $(JAVACFLAGS) -cp bin/classes -d bin/classes \
20 $(shell find bin/java -name '*.java')
23 bin/api.gen: bin/api.pm ../src/generate-native $(api_SOURCES) bin/api-defines.pm api.api
24 ../src/generate-native -v -d bin/java -t proto.api -a ./bin/api.pm -a ./bin/api-defines.pm api.api
27 bin/api-defines.pm: api.h ../src/export-defines api.api
28 ../src/export-defines -d bin/api-defines.c api.api
29 $(CC) -o bin/api-defines -I. bin/api-defines.c
33 bin/api.pm: api.h ../src/export.so
34 gcc -fplugin=../src/export.so -fplugin-arg-export-output=$@~ ./$< -o /dev/null
37 bin/demo.built: $(api_demo_SOURCES) bin/api.built
38 $(JAVAC) $(JAVACFLAGS) -cp bin/classes -d bin/classes $(api_demo_SOURCES)
41 bin/api.o: api.c api.h
42 $(CC) $(CFLAGS) -c -o $@ $<
44 bin/libapi.so: bin/api.o
45 $(CC) -o $@ -shared $^
47 demo: bin/demo.built bin/libapi.so
48 $(JAVA) --enable-native-access=ALL-UNNAMED --add-modules jdk.incubator.foreign \
49 -Djava.library.path=bin -cp bin/classes \
55 .PHONY: demo clean all