CXX ?= clang++ CXXFLAGS ?= -std=c++17 -O2 -Wall -Wextra -pedantic CPPFLAGS ?= -I. ASFLAGS ?= DEBUG ?= 0 ifeq ($(DEBUG),1) CXXFLAGS := $(filter-out -O2,$(CXXFLAGS)) CXXFLAGS += -O0 -g ASFLAGS += -g endif TARGET := bin/img_tool BUILD_DIR := build CPP_SRCS := src/main.cpp ASM_SRCS := asm/to_grayscale.s asm/blur.s asm/detect_edges.s OBJS := $(addprefix $(BUILD_DIR)/,$(CPP_SRCS:.cpp=.o)) $(addprefix $(BUILD_DIR)/,$(ASM_SRCS:.s=.o)) .PHONY: all clean debug all: $(TARGET) $(TARGET): $(OBJS) @mkdir -p $(dir $@) $(CXX) $(OBJS) -o $@ $(BUILD_DIR)/%.o: %.cpp @mkdir -p $(dir $@) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ $(BUILD_DIR)/%.o: %.s @mkdir -p $(dir $@) $(CXX) $(CPPFLAGS) $(ASFLAGS) -c $< -o $@ clean: rm -rf $(BUILD_DIR) $(TARGET) debug: $(MAKE) clean $(MAKE) DEBUG=1 all