- Add detailed build and bootstrap instructions to README.md. - Convert all source and header files from .c/.h to .c.md/.h.md. - Add bootstrap.sh script for automated building across version history. - Update Makefile and sources.mk to reflect new markdown-based source organization.
70 lines
1.4 KiB
Makefile
70 lines
1.4 KiB
Makefile
NAME = c-md
|
|
VERSION = 2.0.0
|
|
.DEFAULT_GOAL := all
|
|
|
|
TEST_BIN= c-md.test
|
|
CMD = ./$(NAME)
|
|
|
|
MAKEFLAGS += --no-print-directory
|
|
include sources.mk
|
|
|
|
CC = clang
|
|
CPPFLAGS = -std=c99
|
|
CFLAGS = -Wall -Wextra -Werror -pipe
|
|
LDFLAGS =
|
|
TEST_LDFLAGS = -lcriterion
|
|
|
|
BUILD_DIR = .build
|
|
OBJ_DIR = $(BUILD_DIR)/objs
|
|
MAP_DIR = $(BUILD_DIR)/maps
|
|
|
|
GEN_SRCS = $(MD_SRCS:$(SRC_DIR)/%.c.md=$(BUILD_DIR)/srcs/%.c)
|
|
GEN_HDRS = $(MD_HDRS:$(INC_DIR)/%.h.md=$(BUILD_DIR)/$(INC_DIR)/%.h)
|
|
|
|
OBJS = $(GEN_SRCS:$(BUILD_DIR)/srcs/%.c=$(OBJ_DIR)/%.o)
|
|
DEPS = $(OBJS:.o=.d)
|
|
|
|
.SECONDARY: $(GEN_SRCS) $(GEN_HDRS)
|
|
|
|
.PHONY: all
|
|
all: $(NAME)
|
|
|
|
$(NAME): $(GEN_HDRS) $(OBJS)
|
|
$(CC) $(LDFLAGS) -o $@ $(OBJS)
|
|
|
|
$(BUILD_DIR)/srcs/%.c: $(SRC_DIR)/%.c.md
|
|
@mkdir -p $(dir $@) $(dir $(MAP_DIR)/$*.map)
|
|
$(CMD) -i $< -o $@ -m $(MAP_DIR)/$*.map
|
|
|
|
$(BUILD_DIR)/$(INC_DIR)/%.h: $(INC_DIR)/%.h.md
|
|
@mkdir -p $(dir $@) $(dir $(MAP_DIR)/$*.h.map)
|
|
$(CMD) -e c -i $< -o $@ -m $(MAP_DIR)/$*.h.map
|
|
|
|
$(OBJ_DIR)/%.o: $(BUILD_DIR)/srcs/%.c $(GEN_HDRS)
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -I $(BUILD_DIR)/$(INC_DIR) -MMD -MP -c $< -o $@
|
|
|
|
-include $(DEPS)
|
|
|
|
|
|
.PHONY: test
|
|
test: $(TEST_BIN)
|
|
./$(TEST_BIN)
|
|
|
|
$(TEST_BIN): $(TESTS) $(filter-out $(OBJ_DIR)/main.o,$(OBJS))
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -I $(BUILD_DIR)/$(INC_DIR) $(TEST_LDFLAGS) $^ -o $@
|
|
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
$(RM) -r $(BUILD_DIR)
|
|
|
|
.PHONY: fclean
|
|
fclean: clean
|
|
$(RM) $(NAME)
|
|
$(RM) $(TEST_BIN)
|
|
|
|
.PHONY: re
|
|
re: fclean
|
|
$(MAKE) all
|