CC = g++
CFLAGS = -m64 -pthread -D__GCC__ -DUNIX -g -D_DEBUG -std=c++17 -Wno-multichar -fPIC -rdynamic
OBJS = evemon.o exception.o jobsman.o tpool.o interface.o library.o mem_manager.o session.o tcp.o resources.o ext.o storage.o fs.o format.o type.o utils.o common.o

all: test local-job-manager.so

test: $(OBJS) main.o
	$(CC) $(CFLAGS) -o $@ $^ -ldl -lstdc++fs

local-job-manager.so: $(OBJS) dllmain.o
	$(CC) $(CFLAGS) -shared -o $@ $^ -ldl

evemon.o: core/debug/evemon.cpp
	$(CC) $(CFLAGS) -c $^

exception.o: core/debug/exception.cpp
	$(CC) $(CFLAGS) -c $^

jobsman.o: core/jobs/jobsman.cpp
	$(CC) $(CFLAGS) -c $^

tpool.o: core/jobs/tpool.cpp
	$(CC) $(CFLAGS) -c $^

interface.o: core/library/interface/interface.cpp
	$(CC) $(CFLAGS) -c $^

library.o: core/library/library.cpp
	$(CC) $(CFLAGS) -c $^

mem_manager.o: core/memory/mem_manager.cpp
	$(CC) $(CFLAGS) -c $^

session.o: core/net/session/session.cpp
	$(CC) $(CFLAGS) -c $^

tcp.o: core/net/tcp/tcp.cpp
	$(CC) $(CFLAGS) -c $^

resources.o: core/resources/resources.cpp
	$(CC) $(CFLAGS) -c $^

ext.o: core/storage/ext/ext.cpp
	$(CC) $(CFLAGS) -c $^

fs.o: core/storage/fs/fs.cpp
	$(CC) $(CFLAGS) -c $^

storage.o: core/storage/storage.cpp
	$(CC) $(CFLAGS) -c $^

format.o: core/strings/format.cpp
	$(CC) $(CFLAGS) -c $^

type.o: core/types/type.cpp
	$(CC) $(CFLAGS) -c $^

utils.o: core/utils/utils.cpp
	$(CC) $(CFLAGS) -c $^

common.o: common/common.cpp
	$(CC) $(CFLAGS) -c $^

main.o: modules/main.cpp
	$(CC) $(CFLAGS) -c $^

dllmain.o: local-job-manager/dllmain.cpp
	$(CC) $(CFLAGS) -c $^

clean:
	rm -f test local-job-manager.so *.o

