#!/usr/bin/make -f #define path variables IPP_SRC_INCLUDE_DIR = ../../ext/ipp/sources/ippcp/src/ IPP_INCLUDE_DIR = ../../ext/ipp/sources/include/ GTEST_INCLUDE_DIR = ../../ext/ LIB_INSTALL_DIR = $(epidinstalldir)/lib/posix-$(ARCH)/ TEST_INSTALL_DIR = $(epidinstalldir)/test/ HEADERS_INSTALL_DIR := $(epidinstalldir)/include/epid/member/ API_HEADERS_INSTALL = $(wildcard ./*.h) MEMBER_INCLUDE_DIR = ../../ TINY_MEMBER_INCLUDE_DIR = ./tiny/ MEMBER_SRC = $(wildcard ./src/*.c) TINY_MEMBER_SRC = $(wildcard ./tiny/src/*.c) TINY_MEMBER_MATH_SRC = $(wildcard ./tiny/math/src/*.c) TINY_STDLIB_MEMBER_SRC = $(wildcard ./tiny/stdlib/src/*.c) MEMBER_TPM2_TSS_UTEST_SRC = $(wildcard ./tpm2/unittests/*.cc) ifneq ($(TSS_PATH),) MEMBER_TPM2_SRC = $(wildcard ./tpm2/ibm_tss/*.c) MEMBER_TPM2_UTEST_SRC = $(filter-out $(wildcard ./tpm2/unittests/*-simulator-test.cc), \ $(MEMBER_TPM2_TSS_UTEST_SRC)) MEMBER_INCLUDE_DIR += -I$(TSS_PATH) CFLAGS += -DTPM_TSS CXXFLAGS += -DTPM_TSS else MEMBER_TPM2_SRC = $(wildcard ./tpm2/src/*.c) MEMBER_TPM2_UTEST_SRC = $(filter-out $(wildcard ./tpm2/unittests/*-tss-test.cc), \ $(MEMBER_TPM2_TSS_UTEST_SRC)) endif MEMBER_SRC += $(MEMBER_TPM2_SRC) MEMBER_LIB = ./libmember.a MATH_LIB = ./libmath.a STDLIB_LIB = ./libtiny_stdlib.a MEMBER_UTEST_EXE = ./member-utest$(EXE_EXTENSION) MEMBER_UTEST_SRC = $(wildcard ./unittests/*.cc) \ ./tpm2/unittests/tpm2_wrapper-testhelper.cc TINY_MEMBER_UTEST_SRC = $(wildcard ./tiny/unittests/*.cc) TINY_MEMBER_MATH_UTEST_SRC = $(wildcard ./tiny/math/unittests/*.cc) ifneq ($(TINY),) MEMBER_OBJ = $(TINY_MEMBER_SRC:.c=.o) MATH_OBJ = $(TINY_MEMBER_MATH_SRC:.c=.o) STDLIB_OBJ = $(TINY_STDLIB_MEMBER_SRC:.c=.o) MEMBER_UTEST_OBJ = $(TINY_MEMBER_UTEST_SRC:.cc=.o) TINY_MEMBER_MATH_UTEST_OBJ = $(TINY_MEMBER_MATH_UTEST_SRC:.cc=.o) MEMBER_INCLUDE_DIR += -I$(TINY_MEMBER_INCLUDE_DIR) else MEMBER_OBJ = $(MEMBER_SRC:.c=.o) MEMBER_UTEST_OBJ = $(MEMBER_UTEST_SRC:.cc=.o) MEMBER_TPM2_UTEST_OBJ = $(MEMBER_TPM2_UTEST_SRC:.cc=.o) endif LIB_MEMBER_DIR = . LIB_VERIFIER_DIR = ../verifier LIB_COMMON_TESTHELPER_DIR = ../common-testhelper LIB_COMMON_DIR = ../common LIB_IPPCP_DIR = ../../ext/ipp/sources/ippcp/src #set flags for linker LDFLAGS += -L$(GTEST_INCLUDE_DIR)/gtest -L$(LIB_COMMON_TESTHELPER_DIR) \ -L$(LIB_MEMBER_DIR) -L$(LIB_VERIFIER_DIR) -L$(LIB_COMMON_DIR) \ -L$(LIB_IPPCP_DIR) -lgtest -lcommon-testhelper \ -lmember -lverifier -lcommon -lippcp ifneq ($(TSS_PATH),) LDFLAGS += -L$(TSS_PATH) -ltss -lcrypto endif ifneq ($(TINY),) CPPDEFINES := -DNDEBUG LDFLAGS += -lmath -ltiny_stdlib CFLAGS := -Os -fno-builtin -fno-stack-protector -fomit-frame-pointer -fno-asynchronous-unwind-tables \ -fdata-sections -ffunction-sections -fvisibility=hidden -Werror -Wall -Wextra ifneq ($(OS),Windows_NT) CFLAGS += -fPIC endif ifeq ($(findstring gcc,$(CC)),gcc) CFLAGS += -Wno-missing-braces endif ifeq ($(ARCH), x86) CFLAGS += -m32 endif endif $(MEMBER_OBJ): %.o: %.c $(CC) $(CFLAGS) -I$(IPP_INCLUDE_DIR) -I$(IPP_SRC_INCLUDE_DIR) \ -I$(MEMBER_INCLUDE_DIR) -c $^ -o $@ $(MEMBER_LIB): $(MEMBER_OBJ) $(AR) rc $(MEMBER_LIB) $(MEMBER_OBJ) $(RANLIB) $(MEMBER_LIB) $(MEMBER_UTEST_EXE): $(MEMBER_UTEST_OBJ) $(CXX) -o $@ $^ $(LDFLAGS) $(MEMBER_UTEST_OBJ): %.o: %.cc $(CXX) -o $@ $(CXXFLAGS) $(GTEST_DEFINES) -I$(MEMBER_INCLUDE_DIR) \ -I$(GTEST_INCLUDE_DIR) -c $^ ifneq ($(TINY),) $(MATH_OBJ): %.o: %.c $(CC) $(CFLAGS) -I$(MEMBER_INCLUDE_DIR) -c $^ -o $@ $(STDLIB_OBJ): %.o: %.c $(CC) $(CFLAGS) -I$(MEMBER_INCLUDE_DIR) -c $^ -o $@ $(MATH_LIB): $(MATH_OBJ) $(AR) rc $(MATH_LIB) $(MATH_OBJ) $(RANLIB) $(MATH_LIB) $(STDLIB_LIB): $(STDLIB_OBJ) $(AR) rc $(STDLIB_LIB) $(STDLIB_OBJ) $(RANLIB) $(STDLIB_LIB) TINY_MEMBER_MATH_UTEST_EXE = ./member.math-utest$(EXE_EXTENSION) $(TINY_MEMBER_MATH_UTEST_EXE): $(TINY_MEMBER_MATH_UTEST_OBJ) $(CXX) -o $@ $^ $(LDFLAGS) $(TINY_MEMBER_MATH_UTEST_OBJ): %.o: %.cc $(CXX) -o $@ $(CXXFLAGS) $(GTEST_DEFINES) -I$(MEMBER_INCLUDE_DIR) \ -I$(GTEST_INCLUDE_DIR) -c $^ else MEMBER_TPM2_UTEST_EXE = ./member.tpm2-utest$(EXE_EXTENSION) $(MEMBER_TPM2_UTEST_EXE): $(MEMBER_TPM2_UTEST_OBJ) $(CXX) -o $@ $^ $(LDFLAGS) $(MEMBER_TPM2_UTEST_OBJ): %.o: %.cc $(CXX) -o $@ $(CXXFLAGS) $(GTEST_DEFINES) -I$(MEMBER_INCLUDE_DIR) \ -I$(GTEST_INCLUDE_DIR) -c $^ endif build: all LIBS = $(MEMBER_LIB) ifneq ($(TINY),) LIBS += $(STDLIB_LIB) $(MATH_LIB) endif all: $(LIBS) install: mkdir -p '$(LIB_INSTALL_DIR)' mkdir -p '$(HEADERS_INSTALL_DIR)' cp $(MEMBER_LIB) '$(LIB_INSTALL_DIR)' ifneq ($(TINY),) cp $(MATH_LIB) '$(LIB_INSTALL_DIR)' cp $(STDLIB_LIB) '$(LIB_INSTALL_DIR)' endif cp $(API_HEADERS_INSTALL) '$(HEADERS_INSTALL_DIR)' #install tests if they exist ifneq (,$(wildcard $(MEMBER_UTEST_EXE))) mkdir -p '$(TEST_INSTALL_DIR)' cp $(MEMBER_UTEST_EXE) '$(TEST_INSTALL_DIR)' endif ifneq ($(TINY),) mkdir -p '$(TEST_INSTALL_DIR)' cp $(TINY_MEMBER_MATH_UTEST_EXE) '$(TEST_INSTALL_DIR)' else mkdir -p '$(TEST_INSTALL_DIR)' cp $(MEMBER_TPM2_UTEST_EXE) '$(TEST_INSTALL_DIR)' endif utest: $(MEMBER_UTEST_EXE) $(MEMBER_TPM2_UTEST_EXE) $(TINY_MEMBER_MATH_UTEST_EXE) run_utest: $(MEMBER_UTEST_EXE) $(GTEST_FLAGS) $(MEMBER_TPM2_UTEST_EXE) $(GTEST_FLAGS) $(TINY_MEMBER_MATH_UTEST_EXE) $(GTEST_FLAGS) check: utest run_utest clean: rm -f $(MEMBER_OBJ) \ $(MEMBER_LIB) \ $(MATH_OBJ) \ $(MATH_LIB) \ $(STDLIB_OBJ) \ $(STDLIB_LIB) \ $(MEMBER_UTEST_OBJ) \ $(MEMBER_UTEST_EXE) \ $(MEMBER_TPM2_UTEST_OBJ) \ $(MEMBER_TPM2_UTEST_EXE) \ $(TINY_MEMBER_MATH_UTEST_OBJ) \ $(TINY_MEMBER_MATH_UTEST_EXE) \ *.xml