export SHELLOPTS := igncr

APPS  := t32rem t32remtest t32apicmd t32apinotify t32fdxhost
VPATH := . ../src

ENV_NAME := $(shell uname -s)
PLATFORM := $(findstring $(shell uname -m),x86_64)

LOPT :=
ifneq ($(findstring CYGWIN,$(ENV_NAME)),)
    ifneq ($(findstring 64,$(PLATFORM)),)
        OF  := windows64
        CC  := x86_64-w64-mingw32-gcc
    else
        OF  := windows
        CC  := i686-pc-mingw32-gcc
    endif
    COPT  := -DT32HOST_LE
    LOPT  := -lws2_32
    EXE   := .exe
endif

ifneq ($(findstring Linux,$(ENV_NAME)),)
    ifneq ($(findstring 64,$(PLATFORM)),)
        OF  := pc_linux64
    else
        OF  := pc_linux
    endif
    CC    := gcc
    COPT  := -DT32HOST_LE
endif

OPTIMIZE := -O2 -fno-inline
ifeq ($(DEBUG),1)
    OPTIMIZE := -no-pie -Og -g
    LOPT := -no-pie -g $(LOPT)
endif

OPT-hremote      := -DENABLE_NOTIFICATION
OPT-t32apinotify := -DENABLE_NOTIFICATION

RCLOBJS := $(OF)/hremote.o $(OF)/hlinknet.o
EXEPREFIX :=
ifeq ($(NETTCP),1)
    RCLOBJS := $(OF)/hremote.o $(OF)/t32nettcp.o $(OF)/tcpsimple2.o
    EXEPREFIX := tcp_
endif

APPEXES :=
$(foreach APP, $(APPS), $(eval APPEXES := $(APPEXES) $(EXEPREFIX)$(APP)$(EXE)))

all: $(APPEXES)

$(OF):
	mkdir $@

define COMPILE_TEMPLATE
    $(EXEPREFIX)$(APP)$(EXE) : $(OF)/$(EXEPREFIX)$(APP)$(EXE)
	    cp $$< $$@

    $(OF)/$(EXEPREFIX)$(APP)$(EXE) : $(OF)/$(APP).o $(RCLOBJS)
	    $(CC) -o $$@ $$^ $(LOPT)
endef

$(foreach APP, $(APPS), $(eval $(COMPILE_TEMPLATE)))


.PRECIOUS : $(OF)/%.o
$(OF)/%.o: %.c  t32.h  $(MAKEFILE_LIST) | $(OF)
	$(CC) $(addprefix -I,$(VPATH)) $(OPTIMIZE) -c $(COPT) -o $@  $<  $(OPT-$(basename $(@F)))

clean:
	-rm -rf $(OF)
