PKG_CPPFLAGS = -I"../inst/include/" -I"../inst/include/quickjs"
PKG_CPPFLAGS += -D_GNU_SOURCE -DCONFIG_BIGNUM
PKG_CPPFLAGS += -DCONFIG_VERSION=\"$(shell cat quickjs/VERSION)\"
PKG_LIBS = ../inst/lib/$(R_ARCH)/libquickjs.a

ifeq ($(OS),Windows_NT)
  DLL := .dll
else
	DLL := .so
endif

CC_VERSION :=  $(shell $(CXX) -dumpfullversion -dumpversion 2>&1)
CC_MAJOR := $(word 1,$(subst ., ,$(CC_VERSION)))

CLANG_CHECK := $(shell echo | $(CXX) -dM -E - | grep -i __clang__)

# Older versions of gcc and clang don't provide the stdatomic.h header
ifneq (,$(CLANG_CHECK))
	ifeq ($(shell expr $(CC_MAJOR) \< 4), 1)
		PKG_CPPFLAGS += -DDISABLE_ATOMICS
	endif
# Clang on armel needs libatomic
	ifeq ($(shell uname -m), armv7l)
	  CC_TARGET := $(shell $(CXX) -v 2>&1 | grep Target | cut -d ' ' -f 2)
		ifeq ($(findstring gnueabihf,$(CC_TARGET)),)
			PKG_LIBS += -latomic
		endif
	endif
else
	ifeq ($(shell expr $(CC_MAJOR) \< 5), 1)
		PKG_CPPFLAGS += -DDISABLE_ATOMICS
	else
# Explicit -latomic is needed for 32-bit builds only on GCC
		ifeq ($(shell getconf LONG_BIT), 32)
			PKG_LIBS += -latomic
		endif
	endif
endif

QUICKJS_C_FILES = cutils.c libbf.c libregexp.c libunicode.c quickjs.c quickjs-libc.c
QUICKJS_C_HEADERS = $(QUICKJS_C_FILES:.c=.h) \
					libregexp-opcode.h libunicode-table.h list.h \
					quickjs-atom.h quickjs-opcode.h

QUICKJS_SOURCES = $(QUICKJS_C_FILES:%=quickjs/%)
QUICKJS_OBJECTS = $(QUICKJS_SOURCES:.c=.o)

SOURCES = quickjsr.cpp init.cpp
OBJECTS = quickjsr.o init.o

.PHONY: all package-quickjs build-static

all: package-quickjs $(SHLIB)

$(SHLIB): build-static

package-quickjs:
	@mkdir -p ../inst/include/quickjs
	@cp $(QUICKJS_C_HEADERS:%=quickjs/%) ../inst/include/quickjs
	@cp quickjs/VERSION ../inst/

build-static: $(QUICKJS_OBJECTS)
	@mkdir -p ../inst/lib/$(R_ARCH)
	$(AR) -rs ../inst/lib/$(R_ARCH)/libquickjs.a $(QUICKJS_OBJECTS)

$(QUICKJS_OBJECTS): quickjs/%.o : quickjs/%.c
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -DFALSE=0 -DTRUE=1 -DSTRICT_R_HEADERS -funsigned-char -fwrapv -std=gnu11 -c $< -o $@

clean:
	$(RM) $(QUICKJS_OBJECTS) $(OBJECTS) ../inst/VERSION QuickJSR$(DLL)
	$(RM) -r ../inst/lib ../inst/include/quickjs
