libicmp/Makefile
lohhiiccc 2e509336c7 feat(utils): add ICMP checksum and time utilities with tests
- Added `icmp_checksum`.
 - Added `icmp_get_time`.
 - Created unit tests for checksum and time.
 - Set `-D_POSIX_C_SOURCE=199309L` in CPPFLAGS for clock_gettime support.
2026-01-24 22:00:24 +01:00

103 lines
2.2 KiB
Makefile

LIB_NAME = icmp
LIB_STATIC = lib$(LIB_NAME).a
LIB_SHARED = lib$(LIB_NAME).so
LIB_VERSION = 1.0.0
TEST_BIN = test.out
# Build configuration
BUILD_STATIC ?= yes
BUILD_SHARED ?= yes
# Installation paths
PREFIX ?= /usr/local
INCLUDEDIR = $(PREFIX)/include
LIBDIR = $(PREFIX)/lib
.DEFAULT_GOAL := all
MAKEFLAGS += --no-print-directory
include sources.mk
CC = clang
CPPFLAGS = -std=c99 -I includes -D_POSIX_C_SOURCE=199309L
CFLAGS = -Wall -Wextra -Werror -pipe
CFLAGS_SHARED = $(CFLAGS) -fPIC
LDFLAGS =
TEST_LDFLAGS = -lcriterion
OBJ_DIR = .build
OBJ_DIR_STATIC = $(OBJ_DIR)/static
OBJ_DIR_SHARED = $(OBJ_DIR)/shared
OBJS_STATIC = $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR_STATIC)/%.o)
OBJS_SHARED = $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR_SHARED)/%.o)
DEPS = $(OBJS_STATIC:.o=.d) $(OBJS_SHARED:.o=.d)
TARGETS =
ifeq ($(BUILD_STATIC),yes)
TARGETS += $(LIB_STATIC)
endif
ifeq ($(BUILD_SHARED),yes)
TARGETS += $(LIB_SHARED)
endif
.PHONY: all
all: $(TARGETS)
$(LIB_STATIC): $(OBJS_STATIC)
$(AR) rcs $@ $^
$(LIB_SHARED): $(OBJS_SHARED)
$(CC) -shared -Wl,-soname,$(LIB_SHARED).$(LIB_VERSION) -o $@ $^
$(OBJ_DIR_STATIC)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(dir $@)
$(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -c $< -o $@
$(OBJ_DIR_SHARED)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(dir $@)
$(CC) $(CPPFLAGS) $(CFLAGS_SHARED) -MMD -MP -c $< -o $@
-include $(DEPS)
.PHONY: test
test: $(TEST_BIN)
./$(TEST_BIN)
$(TEST_BIN): $(TESTS) $(OBJS_STATIC)
@mkdir -p $(dir $@)
$(CC) $(CPPFLAGS) $(CFLAGS) $(TEST_LDFLAGS) $^ -o $@
.PHONY: install
install: all
install -d $(DESTDIR)$(INCLUDEDIR)
install -d $(DESTDIR)$(LIBDIR)
install -m 644 includes/icmp.h $(DESTDIR)$(INCLUDEDIR)
install -m 644 includes/icmp_types.h $(DESTDIR)$(INCLUDEDIR)
ifeq ($(BUILD_STATIC),yes)
install -m 644 $(LIB_STATIC) $(DESTDIR)$(LIBDIR)
endif
ifeq ($(BUILD_SHARED),yes)
install -m 755 $(LIB_SHARED) $(DESTDIR)$(LIBDIR)
ln -sf $(LIB_SHARED) $(DESTDIR)$(LIBDIR)/$(LIB_SHARED).$(LIB_VERSION)
endif
.PHONY: uninstall
uninstall:
$(RM) $(DESTDIR)$(INCLUDEDIR)/icmp.h
$(RM) $(DESTDIR)$(INCLUDEDIR)/icmp_types.h
$(RM) $(DESTDIR)$(LIBDIR)/$(LIB_STATIC)
$(RM) $(DESTDIR)$(LIBDIR)/$(LIB_SHARED)*
.PHONY: clean
clean:
$(RM) -r $(OBJ_DIR)
.PHONY: fclean
fclean: clean
$(RM) $(LIB_STATIC) $(LIB_SHARED)
$(RM) $(TEST_BIN)
.PHONY: re
re: fclean
$(MAKE) all