BASE      := ..
SPIDER    := $(BASE)/spidermonkey
ZLIB      := $(BASE)/zlib
PLATFORM  := $(shell uname)

ifeq ($(PLATFORM),FreeBSD)
CXX     	:= clang++
else
CXX     	:= g++
GCCVER8		:= $(shell expr `gcc -dumpversion | cut -f1 -d.` \<= 8)
endif

CXXFLAGS	:= -std=c++17 -O2 -pthread -Wno-shift-negative-value -Wall -Wextra -Wno-attributes
LDFLAGS		:= -L$(SPIDER)  -ljs32 -L$(ZLIB) -lz
TARGET		:= uox3
INCLUDE		:=  -I$(SPIDER) -I. -I$(ZLIB)

DEPDIR := ./.deps
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.d
POSTCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d && touch $@

BUILD    	:= ./build
SRC      	:= $(wildcard *.cpp)
OBJECTS  	:= $(SRC:%.cpp=$(BUILD)/%.o)

ifeq "$(GCCVER8)" "1"
	LDFLAGS += -lstdc++fs
endif

#COMPILE 	:= $(CXX) $(DEPFLAGS) $(CXXFLAGS) $(INCLUDE) -c

all: build $(TARGET)

$(BUILD)/%.o: %.cpp
$(BUILD)/%.o: %.cpp $(DEPDIR)/%.d | $(DEPDIR)
	@mkdir -p $(@D)
	$(CXX)  $(DEPFLAGS) $(CXXFLAGS) $(INCLUDE) -c $< -o $@

$(DEPDIR): ; @mkdir -p $@

DEPFILES := $(SRC:%.cpp=$(DEPDIR)/%.d)
$(DEPFILES):

include $(wildcard $(DEPFILES))

$(TARGET): $(OBJECTS)
	$(CXX) $(CXXFLAGS) -o $(TARGET) $^ $(LDFLAGS)

.PHONY: all build clean

build:
	@mkdir -p $(BUILD)


.PHONY clean:
	-@rm -rf $(BUILD)
	-@rm -rf $(DEPDIR)
	-@rm $(TARGET)

