fs2port/port/Makefile

63 lines
1.9 KiB
Makefile

# FS2 C port - Makefile
#
# Layout:
# src/ .c sources for the fs2port binary
# include/ .h headers shared by sources
# tools/ .c sources for the offline analysis tools
# screenshots/ saved .png / .ppm output
# obj/ .o object files (build output)
# bin/ compiled fs2port binary + tool binaries (build output)
CC = gcc
CFLAGS = -std=c11 -O2 -Wall -Wextra -Wshadow $(shell sdl2-config --cflags) -Iinclude
LDFLAGS = $(shell sdl2-config --libs) -lm
TOOL_CFLAGS = -std=c11 -O2 -Wall -Iinclude
SRC_DIR = src
TOOL_DIR = tools
OBJ_DIR = obj
BIN_DIR = bin
INC_DIR = include
SOURCES = $(notdir $(wildcard $(SRC_DIR)/*.c))
OBJECTS = $(SOURCES:%.c=$(OBJ_DIR)/%.o)
PORT_OBJS = $(filter-out $(OBJ_DIR)/main.o, $(OBJECTS))
HEADERS = $(wildcard $(INC_DIR)/*.h)
TARGET = $(BIN_DIR)/fs2port
TOOL_SRCS = $(notdir $(wildcard $(TOOL_DIR)/*.c))
TOOLS = $(TOOL_SRCS:%.c=$(BIN_DIR)/%)
.PHONY: all clean run tools
all: $(TARGET) tools
tools: $(TOOLS)
$(TARGET): $(OBJECTS) | $(BIN_DIR)
$(CC) -o $@ $^ $(LDFLAGS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(HEADERS) | $(OBJ_DIR)
$(CC) $(CFLAGS) -c $< -o $@
# chunk5SetupTest checks the C SetupViewProjection against the fs2trace
# oracle; it links the port objects (no SDL needed beyond the libs).
$(BIN_DIR)/chunk5SetupTest: $(TOOL_DIR)/chunk5SetupTest.c $(PORT_OBJS) | $(BIN_DIR)
$(CC) $(TOOL_CFLAGS) -o $@ $(TOOL_DIR)/chunk5SetupTest.c $(PORT_OBJS) -lm
# ramToPpm decodes a RAM dump's hires page with the port's decoder.
$(BIN_DIR)/ramToPpm: $(TOOL_DIR)/ramToPpm.c $(PORT_OBJS) | $(BIN_DIR)
$(CC) $(TOOL_CFLAGS) -o $@ $(TOOL_DIR)/ramToPpm.c $(PORT_OBJS) -lm
# Default rule for the standalone tools (no port dependencies).
$(BIN_DIR)/%: $(TOOL_DIR)/%.c | $(BIN_DIR)
$(CC) $(TOOL_CFLAGS) -o $@ $<
$(OBJ_DIR) $(BIN_DIR):
mkdir -p $@
run: $(TARGET)
./$(TARGET)
clean:
rm -f $(OBJ_DIR)/*.o $(TARGET) $(TOOLS)