CC=gcc
CXX=g++
CFLAGS=-Wall -Wextra -fno-sanitize=address
LD_FLAGS=-fno-sanitize=address
TARGET=libcarbon.so

BASE_PATH=./src/main/org/neoflock/NeoNucleus
JAVA_HOME=/usr/lib/jvm/java-25-openjdk/
BASE_NPATH=./src/native/
JAVA_SRCS = $(wildcard ./src/main/org/neoflock/NeoNucleus/*.java)
JAVA_CLASSES = $(wildcard ./src/main/org/neoflock/NeoNucleus/*.class)
TLA_PATH=./src/tla-static

CPP_SRCS = $(wildcard ${BASE_NPATH}/*.cpp)
OBJS = $(CPP_SRCS:.cpp=.o)
NATIVE_NAME=main

all: java $(TARGET)

$(TARGET): $(OBJS)
	$(CXX) -shared -o ${BASE_NPATH}/$(TARGET) \
	 $(OBJS) ${BASE_NPATH}/libneonucleus.a $(TLA_PATH)/libtla.a -lc $(LD_FLAGS)
%.o: %.cpp
	$(CXX) -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux $(CFLAGS) \
	 $< -o $@

java: ${JAVA_CLASSES}
	javac -h ./src/native/ ${JAVA_SRCS}

run: all
	cd src/main && java -cp . -Djava.library.path=${PWD}/${BASE_NPATH} -Xcheck:jni org.neoflock.NeoNucleus.NativeBindings

clean:
	rm ${JAVA_CLASSES}
	rm $(OBJS) $(TARGET)

.PHONY: all clean