CC ?= gcc
CFLAGS = -g -fPIC -m32 -pthread -Wall -Werror -Wno-misleading-indentation -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unused-function -D_GNU_SOURCE -Wno-char-subscripts
CXX ?= g++
LD = $(CXX) 
LDFLAGS = -m32 -Wl,-z,defs -rdynamic -static-libgcc -lc -ldl -lGL -lglut -lX11 -lXcursor -lSDL3 -lSDL3_image -lSDL3_ttf -lm -ludev -lpthread -shared -nostdlib -L./src/libxdiff -lxdiff -L/app/lib32

BUILD = build

XDIFF_SRCS = xdiffi.c xprepare.c xpatchi.c xmerge3.c xemit.c xmissing.c xutils.c \
             xadler32.c xbdiff.c xbpatchi.c xversion.c xalloc.c xrabdiff.c

XDIFF_OBJS = $(patsubst %.c,src/libxdiff/xdiff/%.o,$(XDIFF_SRCS))

OBJS := $(patsubst %.c,%.o,$(wildcard src/lindbergh/*.c))
OBJS := $(patsubst %.c,%.o,$(wildcard src/lindbergh/shaderWork/*.c)) $(OBJS)

OBJS := $(filter-out src/lindbergh/lindbergh.o, $(OBJS))

all: lindbergh libxdiff.a lindbergh.so libsegaapi.so libkswapapi.so libposixtime.so

lindbergh: src/lindbergh/lindbergh.c src/lindbergh/iniParser.c src/lindbergh/sdlInput.c src/lindbergh/controlIniGen.c src/lindbergh/log.c src/lindbergh/output.c src/lindbergh/jvs.c src/lindbergh/config.c src/lindbergh/evdevInput.c src/lindbergh/gameData.c src/lindbergh/configIni.c
	mkdir -p $(BUILD)
	$(CC) -m32 -DCOMPILING_LINDBERGH_ELF src/lindbergh/lindbergh.c src/lindbergh/iniParser.c src/lindbergh/sdlInput.c src/lindbergh/controlIniGen.c src/lindbergh/log.c src/lindbergh/output.c src/lindbergh/jvs.c src/lindbergh/config.c src/lindbergh/evdevInput.c src/lindbergh/gameData.c src/lindbergh/configIni.c -o $(BUILD)/lindbergh -lm -lSDL3 -L/app/lib32


libxdiff.a: $(XDIFF_OBJS)
	mkdir -p $(BUILD)
	ar rcs src/libxdiff/libxdiff.a $(XDIFF_OBJS)

src/libxdiff/xdiff/%.o: src/libxdiff/xdiff/%.c
	$(CC) -m32 -DHAVE_CONFIG_H -fPIC -c $< -o $@

lindbergh.so: $(OBJS)
	mkdir -p $(BUILD)
	$(LD) $(OBJS) $(LDFLAGS) -o $(BUILD)/lindbergh.so

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

libsegaapi.so: src/libsegaapi/libsegaapi.o
	$(CC) -m32 -O0 -g src/libsegaapi/libsegaapi.c -Wl,-Bstatic -lFAudio -Wl,-Bdynamic -L/app/lib32 -fPIC -shared -o $(BUILD)/libsegaapi.so

libkswapapi.so: src/libkswapapi/libkswapapi.o
	$(CC) -m32 src/libkswapapi/libkswapapi.o -fPIC -shared -o $(BUILD)/libkswapapi.so

libposixtime.so:
	$(CC) -m32 src/libposixtime/libposixtime.c src/libposixtime/libposixtime.h -m32 -shared -o $(BUILD)/libposixtime.so
	ln -s -f libposixtime.so $(BUILD)/libposixtime.so.1
	ln -s -f libposixtime.so $(BUILD)/libposixtime.so.2.4

# Clean rule
clean:
	rm -f $(BUILD)/lindbergh.so
	rm -f $(BUILD)/libsegaapi.so
	rm -f $(BUILD)/lindbergh
	rm -f src/lindbergh/*.o
	rm -f src/lindbergh/shaderWork/*.o
	rm -f src/libsegaapi/*.o

#clean all rule
cleanall:
	rm -rf $(BUILD)
	rm -f src/lindbergh/*.o
	rm -f src/lindbergh/shaderWork/*.o
	rm -f src/libsegaapi/*.o
	rm -f src/libkswapapi/*.o
	rm -f src/libxdiff/*.a
	rm -f src/libxdiff/xdiff/*.o
