#!/usr/bin/make -f

#variables are set by configure
prefix = @prefix@
installdir = $(prefix)/
epidinstalldir = $(installdir)/epid-sdk
CC = @CC@
CXX = @CXX@
CFLAGS = @CFLAGS@
LDFLAGS = @LDFLAGS@
RANLIB = @RANLIB@
TSS_PATH = @TSS_PATH@
TINY = @TINY@

#set performance affecting flags
SIZE_CFLAGS := -O2

#gcc flags
CC_FLAGS := $(CFLAGS) $(SIZE_CFLAGS) -Werror -Wall -Wextra -Wno-missing-braces \
	-Wno-missing-field-initializers -Wno-unknown-pragmas -Wno-unused-function \
	-fno-strict-aliasing -Wno-unused-but-set-variable -Wno-comment -Wformat \
	-Wformat-security -fstack-protector -DNDEBUG -D_FORTIFY_SOURCE=2

#intel c compiler flags
ICC_FLAGS := $(CFLAGS) $(SIZE_CFLAGS) -Werror -Wall -Wextra -DNDEBUG \
	-fstack-protector -D_FORTIFY_SOURCE=2 \
	-Wformat -Wformat-security

ifneq ($(OS),Windows_NT)
	CC_FLAGS += -fPIC
	ICC_FLAGS += -fPIC
	CXX11_FLAG = -std=c++0x
	EXE_EXTENSION =
else
	CC_FLAGS += -D__int64='long long'
	CXX11_FLAG = -std=gnu++11
	EXE_EXTENSION = .exe
endif

#g++ flags
CXX_FLAGS := $(CC_FLAGS) $(CXX11_FLAG)

#intel c++ compiler flags
ICPC_FLAGS := $(ICC_FLAGS) $(CXX11_FLAG)

#check if architecture was specified
#or take it by shell command
ifeq ($(findstring -m32,$(CFLAGS)),-m32)
	ARCH = x86
	CXXFLAGS += -m32
	LDFLAGS += -m32
else ifeq ($(findstring -m64,$(CFLAGS)),-m64)
	ARCH = x86_64
	CXXFLAGS += -m64
	LDFLAGS += -m64
else
	ifeq ($(findstring arm-,$(CC)),arm-)
		ARCH = arm

		ifneq (,$(findstring gnueabihf,$(CC)))
			ARCH := $(addsuffix hf,$(ARCH))
		endif

	else
		ARCH := $(shell uname -m)
	endif
endif

#set ippflags
IPP_FLAGS := -D_IPP_v50_ -D_IPP_DEBUG -D_DISABLE_ALG_MD5_ -D_DISABLE_ALG_SM3_

#set tools and flags depending on specified compiler
ifeq ($(findstring icc,$(CC)),icc)
	CFLAGS := $(ICC_FLAGS)
	CXXFLAGS := $(ICPC_FLAGS)
	AR = $(subst icc,xiar,$(CC))
else
	CFLAGS := $(CC_FLAGS)
	CXXFLAGS := $(CXX_FLAGS)
endif

# ld flags
LDFLAGS += -fstack-protector
ifneq ($(OS),Windows_NT)
  LDFLAGS += -z noexecstack -z relro -z now -pie
endif

#gtest defines
GTEST_DEFINES := -DGTEST_HAS_PTHREAD=0 -D_VARIADIC_MAX=10

#set flags for unit tests executables
GTEST_FLAGS = --gtest_color=yes \
	--gtest_print_time=1 \
	--gtest_output=xml

export CC LDFLAGS ARCH CFLAGS
export CXX CXXFLAGS
export AR RANLIB
export epidinstalldir
export GTEST_FLAGS GTEST_DEFINES IPP_FLAGS
export EXE_EXTENSION
export TSS_PATH
export TINY

#output of the main parameters
$(info $$ccompiler is [${CC}])
$(info $$cxxcompiler is [${CXX}])
$(info $$architecture is [${ARCH}])
#targets part
all:
	$(MAKE) ipp common member verifier argtable3 examples_util
	$(MAKE) examples epid_tools

clean:
	$(MAKE) -C ./ext/ipp/sources/ippcp clean
	$(MAKE) -C ./epid/common/ clean
	$(MAKE) -C ./epid/member/ clean
	$(MAKE) -C ./epid/verifier/ clean
	$(MAKE) -C ./example/util/ clean
	$(MAKE) -C ./example/ clean
	$(MAKE) -C ./tools/ clean
	$(MAKE) -C ./ext/gtest/ clean
	$(MAKE) -C ./epid/common-testhelper/ clean
	$(MAKE) -C ./ext/argtable3/ clean
ifneq ("$(wildcard ./ext/google_benchmark)","")
	$(MAKE) -C ./ext/google_benchmark/ clean
endif

install:
	$(MAKE) -C ./ext/ipp/sources/ippcp install
	$(MAKE) -C ./epid/common/ install
	$(MAKE) -C ./epid/member/ install
	$(MAKE) -C ./epid/verifier/ install
	$(MAKE) -C ./example/ install
	$(MAKE) -C ./tools/ install
	$(MAKE) -C ./epid/common-testhelper/ install

uninstall:
	rm -rf  $(epidinstalldir)

ipp:
	$(MAKE) -C ./ext/ipp/sources/ippcp all

common-testhelper:
	$(MAKE) -C ./epid/common-testhelper/ all

common-testhelper_utest:
	$(MAKE) -C ./epid/common-testhelper/ utest

common:
	$(MAKE) -C ./epid/common/ all

common_utest:
	$(MAKE) -C ./epid/common/ utest

member:
	$(MAKE) -C ./epid/member/ all

member_utest:
	$(MAKE) -C ./epid/member/ utest

verifier:
	$(MAKE) -C ./epid/verifier/ all

verifier_utest:
	$(MAKE) -C ./epid/verifier/ utest

gtest:
	$(MAKE) -C ./ext/gtest/ all

argtable3:
	$(MAKE) -C ./ext/argtable3/ all

examples_util:
	$(MAKE) -C ./example/util/ all

utest:
	$(MAKE) gtest common-testhelper
	$(MAKE) common-testhelper_utest common_utest member_utest verifier_utest

run_utest:
	$(MAKE) -C ./epid/common-testhelper/ run_utest
	$(MAKE) -C ./epid/common/ run_utest
	$(MAKE) -C ./epid/member/ run_utest
	$(MAKE) -C ./epid/verifier/ run_utest

check:
	$(MAKE) utest
	$(MAKE) run_utest

examples:
	$(MAKE) -C ./example/ all

epid_tools:
	$(MAKE) -C ./tools/ all

perf:
ifneq ("$(wildcard ./ext/google_benchmark/)","")
	$(MAKE) -C ./ext/google_benchmark/ all
	$(MAKE) -C ./ext/google_benchmark/ utest
	$(MAKE) -C ./ext/google_benchmark/ run_utest
endif

build:
	$(MAKE) all
	$(MAKE) check
	$(MAKE) install
