TARGETS = ChangePin CmsDecrypt CmsEnvelop CmsSign CmsVerify DeleteCert DeleteKeyPair EnumCerts EnumDevices EnumKeys
TARGETS += EnumUserCerts GenerateKeyPair ImportCert LoginLogout Pkcs10Request

DIR = $(dir $(lastword $(MAKEFILE_LIST)))

ifneq (, $(findstring darwin, $(shell $(CXX) -dumpmachine)))
	AUTO_TARGET_OS = osx
else
	AUTO_TARGET_OS = linux_glibc
endif

ifndef TARGET_OS
	TARGET_OS = $(AUTO_TARGET_OS)
endif


ifeq ($(TARGET_OS), osx)
	AUTO_TARGET_ARCH = x86_64
else ifneq (, $(findstring x86_64, $(shell ${CXX} -dumpmachine)))
	AUTO_TARGET_ARCH = x86_64
else
	AUTO_TARGET_ARCH = x86
endif

ifndef TARGET_ARCH
	TARGET_ARCH = $(AUTO_TARGET_ARCH)
endif

ifeq ($(TARGET_OS), osx)
	ifneq ($(TARGET_ARCH), $(AUTO_TARGET_ARCH))
		$(error Unsupported target arch for OS X)
	endif
endif

ifeq ($(TARGET_OS), osx)
	PLATFORM_DIR = macos-x86_64
else
	PLATFORM_DIR = $(TARGET_OS)-$(TARGET_ARCH)
endif

PKICORE_DIR = $(DIR)../bin/$(PLATFORM_DIR)


CXXFLAGS += -std=c++11 -Wall -Wextra -Wno-unused-function -Wno-extern-c-compat
CXXFLAGS += -I$(PKICORE_DIR)/include -I$(DIR)include

LDFLAGS += -L$(PKICORE_DIR)/lib -lpki-core -Wl,-rpath,\$$ORIGIN


ifeq ($(DEBUG),y)
	CXXFLAGS += -O0 -g -ggdb -DDEBUG
	TARGET_DIR_POSTFIX=-debug
else
	CXXFLAGS += -O2 -DNDEBUG
	TARGET_DIR_POSTFIX=-release
endif


ifeq ($(TARGET_OS), osx)
	COMMON_FLAGS += -arch x86_64
else ifeq ($(TARGET_ARCH), x86_64)
	COMMON_FLAGS += -m64
else
	COMMON_FLAGS += -m32
endif


TARGET_DIR = $(DIR)out/$(PLATFORM_DIR)$(TARGET_DIR_POSTFIX)/
TARGET_PATHS = $(foreach target,$(TARGETS),$(TARGET_DIR)/$(target))

.PHONY: all clean $(TARGETS)

all: $(TARGET_PATHS)

clean:
	rm -rf $(TARGET_PATHS)
	rm -f ${TARGET_DIR}/libpki-core*
	rm -f ${TARGET_DIR}/librtpkcs11*

$(TARGETS):%: $(TARGET_DIR)/%

.SECONDEXPANSION:
$(TARGET_PATHS):$(TARGET_DIR)/%: $$(DIR)$$(subst target,%,target/target.cpp) CopyLibraries
	@mkdir -p $(TARGET_DIR)
	$(CXX) $(COMMON_FLAGS) $(CXXFLAGS) $< $(LDFLAGS) -o $@

CopyLibraries: CopyPkcs11Lib CopyPkiCoreLib

CopyPkcs11Lib:
	@mkdir -p ${TARGET_DIR}
	cp -fP ./../../../pkcs11/lib/${PLATFORM_DIR}/librtpkcs11* ${TARGET_DIR}

CopyPkiCoreLib:
	@mkdir -p ${TARGET_DIR}
	cp -fP ${PKICORE_DIR}/lib/libpki-core* ${TARGET_DIR}
