From df33e730bde20290deef4fa3c1ea909e70dbac42 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Sat, 25 Jun 2022 10:14:57 -0700 Subject: Makefile rework, supporting "nested" components. --- Makefile | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 6d3a4ab..449455e 100644 --- a/Makefile +++ b/Makefile @@ -6,13 +6,17 @@ CXX ?= g++ CXXFLAGS := -Wall -Werror -std=c++20 -fPIC -iquote . ${OPTIMIZE} ${DEBUG} -PARTS := $(shell find * -type d -\( -name build -prune -o -print -\)) -PARTARS := $(addprefix build/lib, $(addsuffix .a, ${PARTS})) -PARTSOS := $(addprefix build/lib, $(addsuffix .so, ${PARTS})) +libname = $(shell realpath --canonicalize-missing --relative-to . build/$(dir $(1))/lib$(notdir $(1))) -MAINOBJS := $(addprefix build/, $(addsuffix .o, $(basename $(wildcard *.cpp)))) +PARTS := $(shell find * -type d -\( -name build -prune -o -name tools -prune -o -print -\)) +PARTARS := $(foreach part, ${PARTS}, $(call libname, ${part}.a)) +PARTSOS := $(foreach part, ${PARTS}, $(call libname, ${part}.so)) + +MAINOBJS := $(patsubst %.cpp, build/%.o, $(wildcard *.cpp)) MAINOBJS += build/git-tag.o +HEADERS := $(find -type f -name \*.h) + all: issim issim: build/issim-dynamic @@ -40,23 +44,27 @@ build/git-tag.cpp: ./get-git-tag > $@ .PHONY: build/git-tag.cpp -build/%.o: %.cpp Makefile +include $(shell find -type f -name \*.d) + +build/%.o: %.cpp @mkdir -p $(dir $@) - ${CXX} ${CXXFLAGS} -c -o $@ $< + ${CXX} ${CXXFLAGS} -MMD -c -o $@ $< -build/%.o: build/%.cpp Makefile +build/%.o: build/%.cpp @mkdir -p $(dir $@) - ${CXX} ${CXXFLAGS} -c -o $@ $< + ${CXX} ${CXXFLAGS} -MMD -c -o $@ $< -.SUFFIXES: -.SECONDARY: +define mklib = +$(call libname, $(1).a): $(patsubst %.cpp, build/%.o, $(wildcard $(1)/*.cpp)) + @mkdir -p $$(dir $$@) + $${AR} cr $$@ $$+ -.SECONDEXPANSION: +$(call libname, $(1).so): $(patsubst %.cpp, build/%.o, $(wildcard $(1)/*.cpp)) + @mkdir -p $$(dir $$@) + $${CXX} $${CXXFLAGS} -shared -o $$@ $$+ +endef -build/lib%.a: $$(addprefix build/, $$(addsuffix .o, $$(basename $$(wildcard %/*.cpp)))) - @mkdir -p $(dir $@) - ${AR} cr $@ $+ +$(foreach part, ${PARTS}, $(eval $(call mklib, ${part}))) -build/lib%.so: $$(addprefix build/, $$(addsuffix .o, $$(basename $$(wildcard %/*.cpp)))) - @mkdir -p $(dir $@) - ${CXX} ${CXXFLAGS} -shared -o $@ $+ +.SUFFIXES: +.SECONDARY: -- cgit v1.2.3