ifeq (${DEBUG},y)
	DEBFLAGS = -O0 -g -ggdb -DDEBUG
	CONFIGURATION = debug
else
	DEBFLAGS = -O2 -DNDEBUG
	CONFIGURATION = release
endif

ARCH_CFLAGS_LINUX32 = -m32 -march=i486 -mtune=i486
ARCH_CFLAGS_LINUX64 = -m64 -march=nocona -mtune=generic
ARCH_CFLAGS_MAC = -Wno-deprecated-declarations -Wno-format-extra-args -arch x86_64
ARCH_CFLAGS_BSD32 = -m32 -march=i486 -mtune=i486
ARCH_CFLAGS_BSD64 = -m64 -march=nocona -mtune=generic

ARCH_LDFLAGS = -ldl -lpthread
ARCH_LDFLAGS_BSD = -lpthread

TARGET = CreateCSR-PKCS10-GOST34.10-2001 DeleteObjects-GOST34.10-2001 GetCertificateInfo-GOST34.10-2001 ImportCertificate-GOST34.10-2001 SignPKCS7-GOST34.10-2001 SignPKCS7Detached-GOST34.10-2001 VerifyPKCS7 VerifyPKCS7Detached
TARGET += CreateCSR-PKCS10-GOST34.10-2012-256 DeleteObjects-GOST34.10-2012-256 GetCertificateInfo-GOST34.10-2012-256 ImportCertificate-GOST34.10-2012-256 SignPKCS7-GOST34.10-2012-256
TARGET += CreateCSR-PKCS10-GOST34.10-2012-512 DeleteObjects-GOST34.10-2012-512 GetCertificateInfo-GOST34.10-2012-512 ImportCertificate-GOST34.10-2012-512 SignPKCS7-GOST34.10-2012-512

SYS = $(shell ${CC} -dumpmachine)
ARCH = ${SYS}

OUTDIR = ./../out

ifneq (, ${CROSS})
	ARCH = ${CROSS}
endif

ifneq (, $(findstring linux, ${SYS}))
	ifneq (, $(findstring x86_64, ${ARCH}))
		ARCH_CFLAGS = ${ARCH_CFLAGS_LINUX64}
		PLATFORM = linux_glibc-x86_64
	else
		ARCH_CFLAGS = ${ARCH_CFLAGS_LINUX32}
		PLATFORM = linux_glibc-x86
	endif
endif

ifneq (, $(findstring freebsd, ${SYS}))
	ifneq (, $(findstring x86_64, ${ARCH}))
		ARCH_CFLAGS = ${ARCH_CFLAGS_BSD64}
		PLATFORM = freebsd-x86_64
	else
		ARCH_CFLAGS = ${ARCH_CFLAGS_BSD32}
		PLATFORM = freebsd-x86
	endif
	ARCH_LDFLAGS = ${ARCH_LDFLAGS_BSD}
endif

ifneq (, $(findstring darwin, ${SYS}))
	ARCH_CFLAGS = ${ARCH_CFLAGS_MAC}
	PLATFORM = macos-x86_64
endif

OUTDIR = ./../out/${PLATFORM}-${CONFIGURATION}

CFLAGS += -x c
CFLAGS += -Werror -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function
CFLAGS += -I./../../include -I./../include
CFLAGS += $(DEBFLAGS)
CFLAGS += $(ARCH_CFLAGS)

LDFLAGS += $(ARCH_LDFLAGS) -Wl,-rpath,\$$ORIGIN

CLEANFILES = ${TARGET}

.PHONY: ${TARGET}

all:	${TARGET}

CreateCSR-PKCS10-GOST34.10-2001: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./CreateCSR-PKCS10-GOST34.10-2001/*.c ${LDFLAGS}
DeleteObjects-GOST34.10-2001: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./DeleteObjects-GOST34.10-2001/*.c ${LDFLAGS}
GetCertificateInfo-GOST34.10-2001: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./GetCertificateInfo-GOST34.10-2001/*.c ${LDFLAGS}
ImportCertificate-GOST34.10-2001: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./ImportCertificate-GOST34.10-2001/*.c ${LDFLAGS}
SignPKCS7-GOST34.10-2001: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./SignPKCS7-GOST34.10-2001/*.c ${LDFLAGS}
SignPKCS7Detached-GOST34.10-2001: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./SignPKCS7Detached-GOST34.10-2001/*.c ${LDFLAGS}
VerifyPKCS7: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./VerifyPKCS7/*.c ${LDFLAGS}
VerifyPKCS7Detached: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./VerifyPKCS7Detached/*.c ${LDFLAGS}
CreateCSR-PKCS10-GOST34.10-2012-256: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./CreateCSR-PKCS10-GOST34.10-2012-256/*.c ${LDFLAGS}
DeleteObjects-GOST34.10-2012-256: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./DeleteObjects-GOST34.10-2012-256/*.c ${LDFLAGS}
GetCertificateInfo-GOST34.10-2012-256: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./GetCertificateInfo-GOST34.10-2012-256/*.c ${LDFLAGS}
ImportCertificate-GOST34.10-2012-256: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./ImportCertificate-GOST34.10-2012-256/*.c ${LDFLAGS}
SignPKCS7-GOST34.10-2012-256: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./SignPKCS7-GOST34.10-2012-256/*.c ${LDFLAGS}
CreateCSR-PKCS10-GOST34.10-2012-512: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./CreateCSR-PKCS10-GOST34.10-2012-512/*.c ${LDFLAGS}
DeleteObjects-GOST34.10-2012-512: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./DeleteObjects-GOST34.10-2012-512/*.c ${LDFLAGS}
GetCertificateInfo-GOST34.10-2012-512: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./GetCertificateInfo-GOST34.10-2012-512/*.c ${LDFLAGS}
ImportCertificate-GOST34.10-2012-512: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./ImportCertificate-GOST34.10-2012-512/*.c ${LDFLAGS}
SignPKCS7-GOST34.10-2012-512: CopyLib
	@mkdir -p ${OUTDIR}
	${CC} ${CFLAGS} -o ${OUTDIR}/$@  ./SignPKCS7-GOST34.10-2012-512/*.c ${LDFLAGS}
	
CopyLib:
	@mkdir -p ${OUTDIR}
	cp -f ./../../lib/${PLATFORM}/librtpkcs11* ${OUTDIR}

clean:
	rm -r ${OUTDIR} || true
