Files
cHTTP/Makefile
T

74 lines
1.7 KiB
Makefile

# Makefile for tinyhttp with cross-platform support
# Supports Windows and Linux with various build configurations
# Detect operating system
ifeq ($(OS),Windows_NT)
DETECTED_OS := Windows
# On Windows, we need to link with winsock library
LIBS := -lws2_32
RM := del /Q
# Windows executable extension
EXE := .exe
else
DETECTED_OS := $(shell uname -s)
LIBS :=
RM := rm -f
EXE :=
endif
# Compiler and flags
CC := gcc
CFLAGS := -Wall -Wextra -I.
LDFLAGS :=
# Project files
SRC := tinyhttp.c example.c
HEADERS := tinyhttp.h
TARGET := example$(EXE)
# Default target
.PHONY: all clean release debug asan coverage
# Default is release build
all: release
# Release build
release: CFLAGS += -O2 -DNDEBUG
release: $(TARGET)
# Debug build
debug: CFLAGS += -ggdb -DDEBUG
debug: $(TARGET)
# Address Sanitizer build
asan: CFLAGS += -fsanitize=address -fno-omit-frame-pointer -O1
asan: LDFLAGS += -fsanitize=address
asan: $(TARGET)
# Coverage build
coverage: CFLAGS += -fprofile-arcs -ftest-coverage -O0
coverage: LDFLAGS += -fprofile-arcs -ftest-coverage
coverage: $(TARGET)
# Compile and link
$(TARGET): $(SRC) $(HEADERS)
$(CC) $(CFLAGS) $(SRC) -o $@ $(LDFLAGS) $(LIBS)
# Clean build artifacts
clean:
ifeq ($(DETECTED_OS),Windows)
$(RM) $(TARGET) *.gcda *.gcno *.gcov
else
$(RM) $(TARGET) *.o *.gcda *.gcno *.gcov
endif
# Show help
help:
@echo "Available targets:"
@echo " all - Same as 'release'"
@echo " release - Optimized build (-O2, NDEBUG)"
@echo " debug - Debug build with symbols (-ggdb)"
@echo " asan - Address Sanitizer build"
@echo " coverage - Code coverage build"
@echo " clean - Remove build artifacts"
@echo " help - Show this help"