OPTIMIZE ?= -O3 DEBUG ?= -g AR ?= ar 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})) MAINOBJS := $(addprefix build/, $(addsuffix .o, $(basename $(wildcard *.cpp)))) MAINOBJS += build/git-tag.o all: issim issim: build/issim-dynamic @ln -sf $< $@ .PHONY: issim issim-static: build/issim-static @ln -sf $< $@ .PHONY: issim-static build/issim-dynamic: ${MAINOBJS} ${PARTSOS} @mkdir -p $(dir $@) ${CXX} ${CXXFLAGS} -o $@ $+ build/issim-static: ${MAINOBJS} ${PARTARS} @mkdir -p $(dir $@) ${CXX} ${CXXFLAGS} -o $@ $+ clean: rm -rf build issim issim-static .PHONY: clean build/git-tag.cpp: @mkdir -p $(dir $@) ./get-git-tag > $@ .PHONY: build/git-tag.cpp build/%.o: %.cpp Makefile @mkdir -p $(dir $@) ${CXX} ${CXXFLAGS} -c -o $@ $< build/%.o: build/%.cpp Makefile @mkdir -p $(dir $@) ${CXX} ${CXXFLAGS} -c -o $@ $< .SUFFIXES: .SECONDARY: .SECONDEXPANSION: build/lib%.a: $$(addprefix build/, $$(addsuffix .o, $$(basename $$(wildcard %/*.cpp)))) @mkdir -p $(dir $@) ${AR} cr $@ $+ build/lib%.so: $$(addprefix build/, $$(addsuffix .o, $$(basename $$(wildcard %/*.cpp)))) @mkdir -p $(dir $@) ${CXX} ${CXXFLAGS} -shared -o $@ $+