74 lines
1.7 KiB
Makefile
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"
|