

MKFILE := $(abspath $(lastword $(MAKEFILE_LIST)))
CUR_DIR := $(dir $(MKFILE))

CC=gcc

# Allow Makefile users to set the build mode through the
# LIBADALANG_BUILD_MODE environment variable.
LIBADALANG_BUILD_MODE?=debug
BUILD_MODE=$(LIBADALANG_BUILD_MODE)

ifeq ($(OS), Windows_NT)
	SYS := $(shell $(CC) -dumpmachine)
	ifneq (, $(findstring mingw, $(SYS)))
		RM=rm -f
	else ifneq (, $(findstring cygwin, $(SYS)))
		RM=rm -f
	else
		RM=del /F /Q
	endif

	PATHSEP2=\\
	JNI_INCLUDE=$(JAVA_HOME)\\include\\win32
	C_FILE := $(CUR_DIR)jni\\jni_impl.c
	O_FILE := $(CUR_DIR)jni\\jni_impl.o
	LIB_FILE := $(CUR_DIR)jni\\adalang_jni.dll
else
	RM=rm -f
	PATHSEP2=/
	JNI_INCLUDE=$(JAVA_HOME)/include/linux
	C_FILE := $(CUR_DIR)jni/jni_impl.c
	O_FILE := $(CUR_DIR)jni/jni_impl.o
	LIB_FILE := $(CUR_DIR)jni/libadalang_jni.so
endif

PATHSEP=$(strip $(PATHSEP2))

COMMON_C_OPTS=  -fPIC   -g   -Wall   -I$(JAVA_HOME)$(PATHSEP)include   -I$(JNI_INCLUDE)
ifeq ($(BUILD_MODE), debug)
BUILD_MODE_OPTS=-O0 -Werror
else ifeq ($(BUILD_MODE), prod)
BUILD_MODE_OPTS=-Ofast
else ifeq ($(BUILD_MODE), prof)
BUILD_MODE_OPTS=-O3
endif

C_OPT=$(COMMON_C_OPTS) $(BUILD_MODE_OPTS)

LD_OPT=-shared -fPIC -L$(CUR_DIR)..$(PATHSEP)lib$(PATHSEP)relocatable$(PATHSEP)prod -L$(CUR_DIR)..$(PATHSEP)lib$(PATHSEP)relocatable$(PATHSEP)dev

all: $(LIB_FILE)

$(LIB_FILE): $(O_FILE)
	$(CC) $(LD_OPT) -o $(LIB_FILE) $(O_FILE) -ladalang

$(O_FILE): $(C_FILE)
	$(CC) $(C_OPT) -c -o $(O_FILE) $(C_FILE)

clean:
	$(RM) $(O_FILE)
	$(RM) $(LIB_FILE)

ifndef VERBOSE
.SILENT:
endif
