diff options
| -rw-r--r-- | Makefile | 42 |
1 files changed, 25 insertions, 17 deletions
| @@ -6,13 +6,17 @@ CXX ?= g++ | |||
| 6 | 6 | ||
| 7 | CXXFLAGS := -Wall -Werror -std=c++20 -fPIC -iquote . ${OPTIMIZE} ${DEBUG} | 7 | CXXFLAGS := -Wall -Werror -std=c++20 -fPIC -iquote . ${OPTIMIZE} ${DEBUG} |
| 8 | 8 | ||
| 9 | PARTS := $(shell find * -type d -\( -name build -prune -o -print -\)) | 9 | libname = $(shell realpath --canonicalize-missing --relative-to . build/$(dir $(1))/lib$(notdir $(1))) |
| 10 | PARTARS := $(addprefix build/lib, $(addsuffix .a, ${PARTS})) | ||
| 11 | PARTSOS := $(addprefix build/lib, $(addsuffix .so, ${PARTS})) | ||
| 12 | 10 | ||
| 13 | MAINOBJS := $(addprefix build/, $(addsuffix .o, $(basename $(wildcard *.cpp)))) | 11 | PARTS := $(shell find * -type d -\( -name build -prune -o -name tools -prune -o -print -\)) |
| 12 | PARTARS := $(foreach part, ${PARTS}, $(call libname, ${part}.a)) | ||
| 13 | PARTSOS := $(foreach part, ${PARTS}, $(call libname, ${part}.so)) | ||
| 14 | |||
| 15 | MAINOBJS := $(patsubst %.cpp, build/%.o, $(wildcard *.cpp)) | ||
| 14 | MAINOBJS += build/git-tag.o | 16 | MAINOBJS += build/git-tag.o |
| 15 | 17 | ||
| 18 | HEADERS := $(find -type f -name \*.h) | ||
| 19 | |||
| 16 | all: issim | 20 | all: issim |
| 17 | 21 | ||
| 18 | issim: build/issim-dynamic | 22 | issim: build/issim-dynamic |
| @@ -40,23 +44,27 @@ build/git-tag.cpp: | |||
| 40 | ./get-git-tag > $@ | 44 | ./get-git-tag > $@ |
| 41 | .PHONY: build/git-tag.cpp | 45 | .PHONY: build/git-tag.cpp |
| 42 | 46 | ||
| 43 | build/%.o: %.cpp Makefile | 47 | include $(shell find -type f -name \*.d) |
| 48 | |||
| 49 | build/%.o: %.cpp | ||
| 44 | @mkdir -p $(dir $@) | 50 | @mkdir -p $(dir $@) |
| 45 | ${CXX} ${CXXFLAGS} -c -o $@ $< | 51 | ${CXX} ${CXXFLAGS} -MMD -c -o $@ $< |
| 46 | 52 | ||
| 47 | build/%.o: build/%.cpp Makefile | 53 | build/%.o: build/%.cpp |
| 48 | @mkdir -p $(dir $@) | 54 | @mkdir -p $(dir $@) |
| 49 | ${CXX} ${CXXFLAGS} -c -o $@ $< | 55 | ${CXX} ${CXXFLAGS} -MMD -c -o $@ $< |
| 50 | 56 | ||
| 51 | .SUFFIXES: | 57 | define mklib = |
| 52 | .SECONDARY: | 58 | $(call libname, $(1).a): $(patsubst %.cpp, build/%.o, $(wildcard $(1)/*.cpp)) |
| 59 | @mkdir -p $$(dir $$@) | ||
| 60 | $${AR} cr $$@ $$+ | ||
| 53 | 61 | ||
| 54 | .SECONDEXPANSION: | 62 | $(call libname, $(1).so): $(patsubst %.cpp, build/%.o, $(wildcard $(1)/*.cpp)) |
| 63 | @mkdir -p $$(dir $$@) | ||
| 64 | $${CXX} $${CXXFLAGS} -shared -o $$@ $$+ | ||
| 65 | endef | ||
| 55 | 66 | ||
| 56 | build/lib%.a: $$(addprefix build/, $$(addsuffix .o, $$(basename $$(wildcard %/*.cpp)))) | 67 | $(foreach part, ${PARTS}, $(eval $(call mklib, ${part}))) |
| 57 | @mkdir -p $(dir $@) | ||
| 58 | ${AR} cr $@ $+ | ||
| 59 | 68 | ||
| 60 | build/lib%.so: $$(addprefix build/, $$(addsuffix .o, $$(basename $$(wildcard %/*.cpp)))) | 69 | .SUFFIXES: |
| 61 | @mkdir -p $(dir $@) | 70 | .SECONDARY: |
| 62 | ${CXX} ${CXXFLAGS} -shared -o $@ $+ | ||
