gerbolyze/svg-flatten/Makefile

125 wiersze
3.7 KiB
Makefile

2021-01-24 17:44:56 +00:00
2021-06-03 21:45:11 +00:00
CXX ?= clang++
LD ?= ld
2021-02-04 21:53:33 +00:00
INSTALL := install
2021-01-24 17:44:56 +00:00
PKG_CONFIG ?= pkg-config
2021-06-05 20:39:02 +00:00
PYTHON3 ?= python3
2021-01-24 17:44:56 +00:00
BUILDDIR ?= build
2021-08-29 14:27:23 +00:00
CACHEDIR ?= cache
2021-02-04 21:53:33 +00:00
PREFIX ?= /usr/local
2021-08-29 14:27:23 +00:00
UPSTREAM_DIR ?= upstream
2021-01-24 17:44:56 +00:00
WASI_SDK ?= wasi-sdk-20.0
WASI_SDK_URL ?= https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz
2021-08-29 14:27:23 +00:00
WASI_SDK_PATH ?= $(CACHEDIR)/$(WASI_SDK)
WASI_CXX ?= $(WASI_SDK_PATH)/bin/clang++ --sysroot=$(WASI_SDK_PATH)/share/wasi-sysroot
SOURCES := \
src/svg_color.cpp \
2021-01-24 17:44:56 +00:00
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 \
2021-01-25 13:55:13 +00:00
src/vec_grid.cpp \
src/main.cpp \
src/flatten.cpp \
2021-01-25 13:55:13 +00:00
src/out_svg.cpp \
src/out_gerber.cpp \
2021-01-29 23:27:43 +00:00
src/out_sexp.cpp \
2021-01-26 22:21:31 +00:00
src/out_flattener.cpp \
2021-01-30 14:18:56 +00:00
src/out_dilater.cpp \
src/out_scaler.cpp \
2021-01-25 13:55:13 +00:00
src/lambda_sink.cpp \
src/flatten.cpp \
src/util.cpp \
2021-06-02 13:05:36 +00:00
src/nopencv.cpp \
$(UPSTREAM_DIR)/cpp-base64/base64.cpp \
$(UPSTREAM_DIR)/clipper-6.4.2/cpp/clipper.cpp \
$(UPSTREAM_DIR)/pugixml/src/pugixml.cpp
2021-01-24 17:44:56 +00:00
PUGIXML_INCLUDES ?= -I$(UPSTREAM_DIR)/pugixml/src
CLIPPER_INCLUDES ?= -I$(UPSTREAM_DIR)/clipper-6.4.2/cpp
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/
SUBPROCESS_INCLUDES ?= -I$(UPSTREAM_DIR)/subprocess.h
2021-05-30 18:22:59 +00:00
MINUNIT_INCLUDES ?= -I$(UPSTREAM_DIR)/minunit
STB_INCLUDES ?= -isystem$(UPSTREAM_DIR)/stb
2021-01-24 17:44:56 +00:00
2021-05-30 18:22:59 +00:00
INCLUDES := -Iinclude -Isrc $(CLIPPER_INCLUDES) $(VORONOI_INCLUDES) $(POISSON_INCLUDES) $(BASE64_INCLUDES) $(ARGAGG_INCLUDES) $(CAVC_INCLUDES) $(SUBPROCESS_INCLUDES) $(MINUNIT_INCLUDES) $(STB_INCLUDES)
2021-01-26 22:21:31 +00:00
2023-04-16 12:04:53 +00:00
CXXFLAGS := -std=c++20 -g -Wall -Wextra -O2
2021-08-29 14:27:23 +00:00
LDFLAGS := -lm -lstdc++
ifdef USE_SYSTEM_PUGIXML
2021-08-29 14:27:23 +00:00
HOST_CXXFLAGS := $(CXXFLAGS) $(shell $(PKG_CONFIG) --cflags pugixml)
HOST_LDFLAGS := $(LDFLAGS) $(shell $(PKG_CONFIG) --libs pugixml)
HOST_SOURCES := $(SOURCES)
HOST_INCLUDES := $(INCLUDES)
else
2021-08-29 14:27:23 +00:00
HOST_CXXFLAGS := $(CXXFLAGS)
HOST_LDFLAGS := $(LDFLAGS)
HOST_SOURCES := $(SOURCES) $(PUGIXML_SOURCES)
HOST_INCLUDES := $(INCLUDES) $(PUGIXML_INCLUDES)
endif
2021-01-24 17:44:56 +00:00
2021-08-29 14:27:23 +00:00
HOST_LDFLAGS += -lstdc++fs # for debian's ancient compilers
WASI_CXXFLAGS ?= -DNOFORK -DNOTHROW -DWASI -DPUGIXML_NO_EXCEPTIONS -fno-exceptions $(CXXFLAGS)
BINARY := svg-flatten
2021-09-26 13:45:09 +00:00
all: $(BUILDDIR)/$(BINARY) $(BUILDDIR)/nopencv-test
2021-01-29 23:27:43 +00:00
.PHONY: wasm
wasm: $(BUILDDIR)/$(BINARY).wasm
2021-08-29 14:27:23 +00:00
$(CACHEDIR)/$(WASI_SDK):
mkdir -p $(dir $@)
cd $(dir $@); curl -L ${WASI_SDK_URL} | tar xzf -
2021-01-24 17:44:56 +00:00
2021-08-29 14:27:23 +00:00
$(BUILDDIR)/wasi/%.o: %.cpp $(CACHEDIR)/$(WASI_SDK)
2021-01-24 17:44:56 +00:00
@mkdir -p $(dir $@)
2021-08-29 14:27:23 +00:00
$(WASI_CXX) -c $(WASI_CXXFLAGS) $(INCLUDES) $(PUGIXML_INCLUDES) -o $@ $<
2021-01-24 17:44:56 +00:00
2021-08-29 14:27:23 +00:00
$(BUILDDIR)/$(BINARY).wasm: $(patsubst %.cpp,$(BUILDDIR)/wasi/%.o,$(SOURCES) $(PUGIXML_SOURCES))
@mkdir -p $(dir $@)
$(WASI_CXX) $(WASI_CXXFLAGS) -o $@ $^ $(LDFLAGS)
$(BUILDDIR)/host/%.o: %.cpp
@mkdir -p $(dir $@)
$(CXX) -c $(HOST_CXXFLAGS) $(HOST_CXXFLAGS) $(HOST_INCLUDES) -o $@ $<
.PRECIOUS: $(HOST_SOURCES:%.cpp=$(BUILDDIR)/host/%.o)
2021-09-26 13:45:09 +00:00
.INTERMEDIATE: $(HOST_SOURCES:%.cpp=$(BUILDDIR)/host/%.o)
2021-08-29 14:27:23 +00:00
$(BUILDDIR)/$(BINARY): $(HOST_SOURCES:%.cpp=$(BUILDDIR)/host/%.o)
2021-01-24 17:44:56 +00:00
@mkdir -p $(dir $@)
2021-08-29 14:27:23 +00:00
$(CXX) $(HOST_CXXFLAGS) -o $@ $^ $(HOST_LDFLAGS)
2021-02-04 21:53:33 +00:00
$(BUILDDIR)/nopencv-test: src/test/nopencv_test.cpp src/nopencv.cpp src/util.cpp
2021-05-30 18:22:59 +00:00
@mkdir -p $(dir $@)
2021-09-26 13:45:09 +00:00
$(CXX) $(CXXFLAGS) $(INCLUDES) -o $@ $^ $(HOST_LDFLAGS)
2021-05-30 18:22:59 +00:00
.PHONY: tests
2021-06-03 21:45:11 +00:00
tests: $(BUILDDIR)/nopencv-test
$(BUILDDIR)/nopencv-test
$(PYTHON3) src/test/svg_tests.py || ( mkdir -p testcase-fails && cp /tmp/gerbolyze-*.{svg,png} testcase-fails/ && false )
2021-05-30 18:22:59 +00:00
2021-02-04 21:53:33 +00:00
.PHONY: install
install:
2021-08-29 14:27:23 +00:00
$(INSTALL) $(BUILDDIR)/$(BINARY) $(PREFIX)/bin
2021-01-24 17:44:56 +00:00
.PHONY: clean
clean:
rm -rf $(BUILDDIR)
2021-08-29 14:27:23 +00:00
.PHONY: mrproper
mrproper: clean
rm -rf $(CACHEDIR)