
FLAGS = -g -Wall

# Settings for libplusscript.so
LIB_SRC = libplusscript/src/vm.c \
libplusscript/src/module.c \
libplusscript/src/compiler.c \
libplusscript/src/amd64.c \
libplusscript/src/x86.c \
libplusscript/src/bytecode.c \
libplusscript/src/logger.c \
libplusscript/src/parser.c \
libplusscript/src/base.c

LIB_CFLAGS = -I"libplusscript/include" -fPIC $(FLAGS)
LIB_CXXFLAGS = $(LIB_CFLAGS)

LIB_LDFLAGS = -shared $(FLAGS)
LIB_OUTPUT = libplusscript.so

LIB_OBJ = $(LIB_SRC:libplusscript/src/%c=libplusscript/obj/%o)
LIB_DEPS = $(LIB_SRC:libplusscript/src/%c=libplusscript/dep/%d)

# Settings for libplusscript++.so
LIB2_SRC = libplusscript++/src/vm.cpp \
libplusscript++/src/module.cpp \
libplusscript++/src/funcptr.cpp \
libplusscript++/src/structinfo.cpp \
libplusscript++/src/typeinfo.cpp

LIB2_CFLAGS = -I"libplusscript/include" -I"libplusscript++/include" -fPIC $(FLAGS)
LIB2_CXXFLAGS = $(LIB2_CFLAGS)

LIB2_LDFLAGS = -shared -L"." -lplusscript -Wl,-rpath,"." $(FLAGS)
LIB2_OUTPUT = libplusscript++.so

LIB2_OBJ = $(LIB2_SRC:libplusscript++/src/%cpp=libplusscript++/obj/%o)
LIB2_DEPS = $(LIB2_SRC:libplusscript++/src/%cpp=libplusscript++/dep/%d)

# Targets
all: $(LIB_DEPS) $(LIB_OUTPUT) $(LIB2_DEPS) $(LIB2_OUTPUT) libtest libtest++

clean:
	@echo "Cleaning up."
	-@rm -f $(LIB_DEPS) $(LIB2_DEPS) $(LIB_OBJ) $(LIB2_OBJ) $(LIB_OUTPUT) $(LIB2_OUTPUT) libtest libtest++

rebuild: clean all

$(LIB_OUTPUT): $(LIB_OBJ)
	@echo "Linking $@."
	@$(CC) $^ -o $@ $(LIB_LDFLAGS)

$(LIB2_OUTPUT): $(LIB2_OBJ) $(LIB_OUTPUT)
	@echo "Linking $@."
	@$(CXX) $(LIB2_OBJ) -o $@ $(LIB2_LDFLAGS)

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

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

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

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

libtest: libplusscript/libtest.c $(LIB_OUTPUT)
	@echo "Compiling $@."
	@$(CC) $< -o $@ -lplusscript -I "libplusscript/include" -L "." -Wl,-rpath,"." -g $(FLAGS)

libtest++: libplusscript++/libtest.cpp $(LIB2_OUTPUT)
	@echo "Compiling $@."
	@$(CC) $< -o $@ -lplusscript++ -I "libplusscript++/include" -I "libplusscript/include" -L "." -Wl,-rpath,"." -g $(FLAGS)

-include $(LIB_DEPS) $(LIB2_DEPS)

