CXX := clang++ LD ?= ld INSTALL := install PKG_CONFIG ?= pkg-config BUILDDIR ?= build PREFIX ?= /usr/local UPSTREAM_DIR ?= ../upstream SOURCES := src/svg_color.cpp \ src/svg_doc.cpp \ src/svg_geom.cpp \ src/svg_import_util.cpp \ src/svg_path.cpp \ src/svg_pattern.cpp \ src/vec_core.cpp \ src/vec_grid.cpp \ src/main.cpp \ src/out_svg.cpp \ src/out_gerber.cpp \ src/out_sexp.cpp \ src/out_flattener.cpp \ src/out_dilater.cpp \ src/lambda_sink.cpp \ $(UPSTREAM_DIR)/cpp-base64/base64.cpp CLIPPER_SOURCES ?= $(UPSTREAM_DIR)/clipper-6.4.2/cpp/clipper.cpp $(UPSTREAM_DIR)/clipper-6.4.2/cpp/cpp_cairo/cairo_clipper.cpp PUGIXML_SOURCES ?= $(UPSTREAM_DIR)/pugixml/src/pugixml.cpp CLIPPER_INCLUDES ?= -I$(UPSTREAM_DIR)/clipper-6.4.2/cpp -I$(UPSTREAM_DIR)/clipper-6.4.2/cpp/cpp_cairo/ VORONOI_INCLUDES ?= -I$(UPSTREAM_DIR)/voronoi/src POISSON_INCLUDES ?= -I$(UPSTREAM_DIR)/poisson-disk-sampling/thinks/poisson_disk_sampling/ BASE64_INCLUDES ?= -I$(UPSTREAM_DIR)/cpp-base64 ARGAGG_INCLUDES ?= -I$(UPSTREAM_DIR)/argagg/include/argagg CAVC_INCLUDES ?= -I$(UPSTREAM_DIR)/CavalierContours/include/cavc/ # the folder name is subprocess.h SUBPROCESS_INCLUDES ?= -I$(UPSTREAM_DIR)/subprocess.h # make sure this appears after -Isvg-flatten/src on the compiler cmdline so pugixml loads the correct config PUGIXML_INCLUDES ?= -I$(UPSTREAM_DIR)/pugixml/src DEP_INCLUDES := $(CLIPPER_INCLUDES) $(VORONOI_INCLUDES) $(POISSON_INCLUDES) $(BASE64_INCLUDES) $(ARGAGG_INCLUDES)\ $(CAVC_INCLUDES) $(SUBPROCESS_INCLUDES) $(PUGIXML_INCLUDES) SOURCES += $(CLIPPER_SOURCES) SOURCES += $(PUGIXML_SOURCES) INCLUDES := -Iinclude -Isrc $(DEP_INCLUDES) PKG_CONFIG_DEPS := cairo CXXFLAGS := -std=c++2a -g -Wall -Wextra -O2 CXXFLAGS += $(shell $(PKG_CONFIG) --cflags $(PKG_CONFIG_DEPS)) # hack for stone age opencv in debian stable CXXFLAGS += $(shell $(PKG_CONFIG) --cflags opencv4 2> /dev/null || $(PKG_CONFIG) --cflags opencv 2>/dev/null) LDFLAGS := -lm -lc -lstdc++ LDFLAGS += $(shell $(PKG_CONFIG) --libs $(PKG_CONFIG_DEPS)) # debian hack. see above. OPENCV_LDFLAGS := $(shell $(PKG_CONFIG) --libs opencv4 2> /dev/null || $(PKG_CONFIG) --libs opencv 2>/dev/null) LDFLAGS += $(shell echo $(OPENCV_LDFLAGS) | sed 's/-l\S\+ //g') -lopencv_core -lopencv_imgproc -lopencv_imgcodecs TARGET := svg-flatten all: $(BUILDDIR)/$(TARGET) .PHONY: check-deps check-deps: @echo @$(PKG_CONFIG) --cflags --libs cairo >/dev/null # debian hack. see above. @$(PKG_CONFIG) --cflags --libs opencv4 >/dev/null ||$(PKG_CONFIG) --cflags --libs opencv >/dev/null $(BUILDDIR)/%.o: %.cpp @mkdir -p $(dir $@) $(CXX) -c $(CXXFLAGS) $(CXXFLAGS) $(INCLUDES) -o $@ $^ $(BUILDDIR)/$(TARGET): $(SOURCES:%.cpp=$(BUILDDIR)/%.o) @mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ -Wl,--start-group $^ -lstdc++fs -Wl,--end-group .PHONY: install install: $(INSTALL) $(BUILDDIR)/$(TARGET) $(PREFIX)/bin .PHONY: clean clean: rm -rf $(BUILDDIR)