
CSRC = src/vm.c \
src/module.c \
src/compiler.c \
src/amd64.c \
src/x86.c \
src/bytecode.c \
src/logger.c \
src/parser.c

CFLAGS = -I"." -I"include" -fPIC -Wall -g
CXXFLAGS = $(CFLAGS)

LDFLAGS = -shared
OUTPUT = libplusscript.so

OBJ = $(CSRC:src/%c=obj/%o)
DEPS = $(CSRC:src/%c=dep/%d)

all: $(DEPS) $(OUTPUT) libtest

clean:
	@echo "Cleaning up."
	-@rm -f $(DEPS) $(OBJ) $(OUTPUT)

rebuild: clean all

$(OUTPUT): $(OBJ)
	@echo "Linking $@."
	@$(CC) $(OBJ) -o $@ $(LDFLAGS)

obj/%o: src/%cpp
	@echo "Compiling $<."
	@$(CXX) -c -o $@ $< $(CXXFLAGS)

obj/%o: src/%c
	@echo "Compiling $<."
	@$(CC) -c -o $@ $< $(CFLAGS)

dep/%d: src/%c
	@echo "Generating $@."
	@$(CC) -MM -MT "$(@:dep/%d=obj/%o) $@" $< $(CFLAGS) > $@

dep/%d: src/%cpp
	@echo "Generating $@."
	@$(CXX) -MM -MT "$(@:dep/%d=obj/%o) $@" $< $(CXXFLAGS) > $@

libtest: libtest.c $(OUTPUT)
	@echo "Compiling $@."
	@$(CC) libtest.c -o libtest -lplusscript -I "include" -L "." -Wl,-rpath,"." -g

run: libtest
	./libtest

-include $(DEPS)

