| |
|
|
| CC = gcc |
| AR = ar |
| CFLAGS = -Wall -Wextra -std=c11 -O2 -fPIC |
| LDFLAGS = -shared |
|
|
| INCLUDE_DIR = include |
| SRC_DIR = src |
| BUILD_DIR = build |
| LIB_DIR = libs |
|
|
| INCLUDES = -I$(INCLUDE_DIR) |
|
|
| LIBOQS_DIR = $(LIB_DIR)/liboqs |
| GMSSL_DIR = $(LIB_DIR)/GmSSL |
|
|
| ifdef USE_LIBOQS |
| INCLUDES += -I$(LIBOQS_DIR)/include |
| LDFLAGS += -L$(LIBOQS_DIR)/lib -loqs |
| CFLAGS += -DHAVE_LIBOQS |
| endif |
|
|
| ifdef USE_GMSSL |
| INCLUDES += -I$(GMSSL_DIR)/include |
| LDFLAGS += -L$(GMSSL_DIR)/lib -lgmssl |
| CFLAGS += -DHAVE_GMSSL |
| endif |
|
|
| SOURCES = $(SRC_DIR)/unified_crypto_interface.c \ |
| $(SRC_DIR)/algorithm_registry.c \ |
| $(SRC_DIR)/classic_crypto_adapter.c \ |
| $(SRC_DIR)/pqc_adapter.c \ |
| $(SRC_DIR)/hybrid_crypto.c |
|
|
| OBJECTS = $(SOURCES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o) |
|
|
| TARGET_LIB = $(BUILD_DIR)/libuci.so |
| TARGET_STATIC = $(BUILD_DIR)/libuci.a |
|
|
| .PHONY: all clean install examples tests |
|
|
| all: $(BUILD_DIR) $(TARGET_LIB) $(TARGET_STATIC) |
|
|
| $(BUILD_DIR): |
| mkdir -p $(BUILD_DIR) |
|
|
| $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c |
| $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ |
|
|
| $(TARGET_LIB): $(OBJECTS) |
| $(CC) $(LDFLAGS) -o $@ $^ |
|
|
| $(TARGET_STATIC): $(OBJECTS) |
| $(AR) rcs $@ $^ |
|
|
| examples: $(TARGET_LIB) |
| mkdir -p $(BUILD_DIR)/examples |
| $(CC) $(CFLAGS) $(INCLUDES) examples/demo.c -o $(BUILD_DIR)/examples/uci_demo -L$(BUILD_DIR) -luci $(LDFLAGS) |
| $(CC) $(CFLAGS) $(INCLUDES) examples/list_algorithms.c -o $(BUILD_DIR)/examples/uci_list_algorithms -L$(BUILD_DIR) -luci $(LDFLAGS) |
| $(CC) $(CFLAGS) $(INCLUDES) examples/signature_demo.c -o $(BUILD_DIR)/examples/uci_signature_demo -L$(BUILD_DIR) -luci $(LDFLAGS) |
| $(CC) $(CFLAGS) $(INCLUDES) examples/kem_demo.c -o $(BUILD_DIR)/examples/uci_kem_demo -L$(BUILD_DIR) -luci $(LDFLAGS) |
|
|
| tests: $(TARGET_LIB) |
| mkdir -p $(BUILD_DIR)/tests |
| $(CC) $(CFLAGS) $(INCLUDES) tests/test_basic.c -o $(BUILD_DIR)/tests/test_basic -L$(BUILD_DIR) -luci $(LDFLAGS) |
|
|
| clean: |
| rm -rf $(BUILD_DIR) |
|
|
| install: $(TARGET_LIB) $(TARGET_STATIC) |
| install -d $(DESTDIR)/usr/local/lib |
| install -m 644 $(TARGET_LIB) $(DESTDIR)/usr/local/lib/ |
| install -m 644 $(TARGET_STATIC) $(DESTDIR)/usr/local/lib/ |
| install -d $(DESTDIR)/usr/local/include |
| install -m 644 $(INCLUDE_DIR)/*.h $(DESTDIR)/usr/local/include/ |
|
|
| help: |
| @echo "Unified Crypto Interface - Build System" |
| @echo "" |
| @echo "Targets:" |
| @echo " all - Build UCI library (default)" |
| @echo " examples - Build example programs" |
| @echo " tests - Build test programs" |
| @echo " clean - Remove build artifacts" |
| @echo " install - Install library and headers" |
| @echo " help - Show this help message" |
| @echo "" |
| @echo "Options:" |
| @echo " USE_LIBOQS=1 - Enable LibOQS support" |
| @echo " USE_GMSSL=1 - Enable GmSSL support" |
| @echo "" |
| @echo "Example:" |
| @echo " make USE_LIBOQS=1 USE_GMSSL=1" |
| @echo " make examples USE_LIBOQS=1" |
|
|