CC := gcc
DEBUG ?= 0
CC_TEEC_TARGET := cc-teec
TARGETS := $(CC_TEEC_TARGET)
TEE_CLIENT_SRC := tee_client.c
CC_TEEC_SRCS := cc-teec.c $(TEE_CLIENT_SRC)
ALL_SRCS := $(CC_TEEC_SRCS)
INC_DIR := include
BASE_CFLAGS := \
-I$(INC_DIR) \
-D_GNU_SOURCE \
-DBINARY_PREFIX=\"TEEC\" \
-std=gnu11
SECURITY_CFLAGS := \
-Wall \
-Werror \
-Wextra \
-Wformat-security \
-Wstrict-prototypes \
-Wshadow \
-Wunused \
-Wcast-align \
-Wpointer-arith
SECURITY_LDFLAGS := \
-Wl,--as-needed \
-Wl,-z,relro \
-Wl,-z,now \
-Wl,-z,noexecstack \
-Wl,--no-undefined \
-Wl,--fatal-warnings
PIE_CFLAGS := -fPIE -fpie
PIE_LDFLAGS := -pie
STACK_PROTECTOR := -fstack-protector-strong
ifeq ($(BUILD_MODE), release)
OPTIMIZE_CFLAGS := -O2
OPTIMIZE_LDFLAGS := -s
else
OPTIMIZE_CFLAGS := -O0 -ggdb3
OPTIMIZE_LDFLAGS := -g
endif
ifeq ($(DEBUG), 1)
DEBUG_CFLAGS := -g3
DEBUG_LDFLAGS := -g
else
DEBUG_CFLAGS :=
DEBUG_LDFLAGS :=
endif
CFLAGS := \
$(BASE_CFLAGS) \
$(SECURITY_CFLAGS) \
$(PIE_CFLAGS) \
$(STACK_PROTECTOR) \
$(OPTIMIZE_CFLAGS) \
$(DEBUG_CFLAGS)
LDFLAGS := \
$(PIE_LDFLAGS) \
$(SECURITY_LDFLAGS) \
$(OPTIMIZE_LDFLAGS) \
$(DEBUG_LDFLAGS)
LIBS := -l$(RUST_LIB_NAME)
.PHONY: all
all:
@if [ ! -d "$(RUST_TARGET_BUILD_DIR)" ]; then \
echo "Error: Build directory $(RUST_TARGET_BUILD_DIR) does not exist"; \
echo "Please build the Rust library first: cd .. && cargo build --release"; \
exit 1; \
fi
@RUST_LIB_PATH=$$(find $(RUST_TARGET_BUILD_DIR) -name "$(RUST_LIB_FILE)" 2>/dev/null | sort -r | head -1); \
if [ -z "$$RUST_LIB_PATH" ]; then \
echo "Error: Rust library $(RUST_LIB_FILE) not found in $(RUST_TARGET_BUILD_DIR)"; \
echo "Available files:"; \
ls -la $(RUST_TARGET_BUILD_DIR)/ 2>/dev/null || echo " (directory empty or not accessible)"; \
exit 1; \
fi; \
RUST_LIB_DIR=$$(dirname $$RUST_LIB_PATH); \
echo "Using Rust library: $$RUST_LIB_PATH"; \
$(CC) $(CFLAGS) $(LDFLAGS) -o $(CC_TEEC_TARGET) $(CC_TEEC_SRCS) -L$$RUST_LIB_DIR $(LIBS)
@RUST_LIB_PATH=$$(find $(RUST_TARGET_BUILD_DIR) -name "$(RUST_LIB_FILE)" 2>/dev/null | sort -r | head -1); \
.PHONY: clean
clean:
rm -rf $(TARGETS)