.DEFAULT_GOAL := all include config.mk # === BUILD ENVIRONMENT === BIN := bin BUILD := build LIB := lib CLI := cli # === MACRO DEFINITIONS === define objpath $(addprefix $(BUILD)/, $(addsuffix .o, $(basename $(1)))) endef define mkobj $(foreach DEP, $?, mkdir -p $(dir $(call objpath, $(DEP))) $(CC) $(CFLAGS) -o $(call objpath, $(DEP)) -c $(DEP)) $(LD) -r $(LDFLAGS) -o $@ $(call objpath, $?) endef # === BUILD TARGETS === all: $(BUILD) $(BIN) $(addprefix $(BIN)/,pw-test shfx dorne) $(BIN)/pw-test: $(addprefix $(LIB)/, main.c) $(CC) $(CFLAGS) -o $(BUILD)/pw-test.o -c $^ $(CLD) $(CLDFLAGS) -o $@ $(BUILD)/pw-test.o $(BIN)/shfx: shfx/main.c $(CC) $(CFLAGS) -o $(BUILD)/shfx.o -c $^ $(CLD) $(CLDFLAGS) -lncurses -o $@ $(BUILD)/shfx.o $(BIN)/dorne: $(addprefix $(BUILD)/,dorne.o epty.o) $(CLD) $(CLDFLAGS) -o $@ $^ $(BUILD) $(BIN): mkdir -p $@ $(BUILD)/dorne.o: $(addprefix $(CLI)/, main.c) $(mkobj) $(BUILD)/epty.o: $(addprefix $(CLI)/, epty.c _pty.c) $(mkobj) # $1/%.o: $1/%.c # === DEVELOPMENT TARGETS === .PHONY: debug run test debug: $(MAKE) all \ CFLAGS="$(CFLAGS) $(CFLAGS_DBG)" \ CLDFLAGS="$(CLDFLAGS) $(CLDFLAGS_DBG)" run: debug - command $(BIN)/pw-test test: clean run # === UTILITY TARGETS === .PHONY: clean clean: - rm -rf $(BUILD) $(BIN) vgcore.* &>/dev/null