|
1 |
| -MAKEFLAGS+=-r -j |
2 |
| - |
3 |
| -config=debug |
4 |
| -files=demo/pirate.obj |
5 |
| - |
6 |
| -BUILD=build/$(config) |
7 |
| - |
8 |
| -LIBRARY_SOURCES=$(wildcard src/*.cpp) |
9 |
| -LIBRARY_OBJECTS=$(LIBRARY_SOURCES:%=$(BUILD)/%.o) |
10 |
| - |
11 |
| -DEMO_SOURCES=$(wildcard demo/*.c demo/*.cpp) tools/objloader.cpp |
12 |
| -DEMO_OBJECTS=$(DEMO_SOURCES:%=$(BUILD)/%.o) |
13 |
| - |
14 |
| -GLTFPACK_SOURCES=$(wildcard gltf/*.cpp) |
15 |
| -GLTFPACK_OBJECTS=$(GLTFPACK_SOURCES:%=$(BUILD)/%.o) |
16 |
| - |
17 |
| -OBJECTS=$(LIBRARY_OBJECTS) $(DEMO_OBJECTS) $(GLTFPACK_OBJECTS) |
18 |
| - |
19 |
| -LIBRARY=$(BUILD)/libmeshoptimizer.a |
20 |
| -DEMO=$(BUILD)/meshoptimizer |
21 |
| - |
22 |
| -CFLAGS=-g -Wall -Wextra -std=c89 |
23 |
| -CXXFLAGS=-g -Wall -Wextra -Wshadow -Wno-missing-field-initializers -std=gnu++98 |
24 |
| -LDFLAGS= |
25 |
| - |
26 |
| -$(GLTFPACK_OBJECTS): CXXFLAGS+=-std=c++11 |
27 |
| - |
28 |
| -ifdef BASISU |
29 |
| - $(GLTFPACK_OBJECTS): CXXFLAGS+=-DWITH_BASISU |
30 |
| - $(BUILD)/gltf/basis%.cpp.o: CXXFLAGS+=-I$(BASISU) |
31 |
| - gltfpack: LDFLAGS+=-lpthread |
32 |
| - |
33 |
| - ifeq ($(HOSTTYPE),x86_64) |
34 |
| - $(BUILD)/gltf/basislib.cpp.o: CXXFLAGS+=-msse4.1 |
35 |
| - endif |
36 |
| -endif |
37 |
| - |
38 |
| -WASI_SDK?=/opt/wasi-sdk |
39 |
| -WASMCC?=$(WASI_SDK)/bin/clang++ |
40 |
| -WASIROOT?=$(WASI_SDK)/share/wasi-sysroot |
41 |
| - |
42 |
| -WASM_FLAGS=--target=wasm32-wasi --sysroot=$(WASIROOT) |
43 |
| -WASM_FLAGS+=-Wall -Wextra |
44 |
| -WASM_FLAGS+=-O3 -DNDEBUG -nostartfiles -nostdlib -Wl,--no-entry -Wl,-s |
45 |
| -WASM_FLAGS+=-mcpu=mvp # make sure clang doesn't use post-MVP features like sign extension |
46 |
| -WASM_FLAGS+=-fno-slp-vectorize -fno-vectorize -fno-unroll-loops |
47 |
| -WASM_FLAGS+=-Wl,-z -Wl,stack-size=36864 -Wl,--initial-memory=65536 |
48 |
| -WASM_EXPORT_PREFIX=-Wl,--export |
49 |
| - |
50 |
| -WASM_DECODER_SOURCES=src/vertexcodec.cpp src/indexcodec.cpp src/vertexfilter.cpp tools/wasmstubs.cpp |
51 |
| -WASM_DECODER_EXPORTS=meshopt_decodeVertexBuffer meshopt_decodeIndexBuffer meshopt_decodeIndexSequence meshopt_decodeFilterOct meshopt_decodeFilterQuat meshopt_decodeFilterExp sbrk __wasm_call_ctors |
52 |
| - |
53 |
| -WASM_ENCODER_SOURCES=src/vertexcodec.cpp src/indexcodec.cpp src/vertexfilter.cpp src/vcacheoptimizer.cpp src/vfetchoptimizer.cpp src/spatialorder.cpp tools/wasmstubs.cpp |
54 |
| -WASM_ENCODER_EXPORTS=meshopt_encodeVertexBuffer meshopt_encodeVertexBufferBound meshopt_encodeVertexBufferLevel meshopt_encodeIndexBuffer meshopt_encodeIndexBufferBound meshopt_encodeIndexSequence meshopt_encodeIndexSequenceBound meshopt_encodeVertexVersion meshopt_encodeIndexVersion meshopt_encodeFilterOct meshopt_encodeFilterQuat meshopt_encodeFilterExp meshopt_optimizeVertexCache meshopt_optimizeVertexCacheStrip meshopt_optimizeVertexFetchRemap meshopt_spatialSortRemap sbrk __wasm_call_ctors |
55 |
| - |
56 |
| -WASM_SIMPLIFIER_SOURCES=src/simplifier.cpp src/vfetchoptimizer.cpp tools/wasmstubs.cpp |
57 |
| -WASM_SIMPLIFIER_EXPORTS=meshopt_simplify meshopt_simplifyWithAttributes meshopt_simplifyScale meshopt_simplifyPoints meshopt_optimizeVertexFetchRemap sbrk __wasm_call_ctors |
58 |
| - |
59 |
| -WASM_CLUSTERIZER_SOURCES=src/clusterizer.cpp tools/wasmstubs.cpp |
60 |
| -WASM_CLUSTERIZER_EXPORTS=meshopt_buildMeshletsBound meshopt_buildMeshlets meshopt_computeClusterBounds meshopt_computeMeshletBounds meshopt_optimizeMeshlet sbrk __wasm_call_ctors |
61 |
| - |
62 |
| -ifneq ($(werror),) |
63 |
| - CFLAGS+=-Werror |
64 |
| - CXXFLAGS+=-Werror |
| 1 | +# -*- Makefile -*- for meshoptimizer |
| 2 | + |
| 3 | +.SECONDEXPANSION: |
| 4 | +.SUFFIXES: |
| 5 | + |
| 6 | +ifneq ($(findstring $(MAKEFLAGS),s),s) |
| 7 | +ifndef V |
| 8 | + QUIET = @ |
| 9 | + QUIET_CXX = @echo ' ' CXX $<; |
| 10 | + QUIET_AR = @echo ' ' AR $@; |
| 11 | + QUIET_RANLIB = @echo ' ' RANLIB $@; |
| 12 | + QUIET_INSTALL = @echo ' ' INSTALL $<; |
| 13 | + export V |
65 | 14 | endif
|
66 |
| - |
67 |
| -ifeq ($(config),iphone) |
68 |
| - IPHONESDK=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk |
69 |
| - CFLAGS+=-arch armv7 -arch arm64 -isysroot $(IPHONESDK) |
70 |
| - CXXFLAGS+=-arch armv7 -arch arm64 -isysroot $(IPHONESDK) -stdlib=libc++ |
71 |
| - LDFLAGS+=-arch armv7 -arch arm64 -isysroot $(IPHONESDK) -L $(IPHONESDK)/usr/lib -mios-version-min=7.0 |
72 | 15 | endif
|
73 | 16 |
|
74 |
| -ifeq ($(config),trace) |
75 |
| - CXXFLAGS+=-DTRACE=1 |
76 |
| -endif |
| 17 | +LIB = libmeshoptimizer.a |
| 18 | +AR ?= ar |
| 19 | +ARFLAGS ?= rc |
| 20 | +CXX ?= g++ |
| 21 | +RANLIB ?= ranlib |
| 22 | +RM ?= rm -f |
77 | 23 |
|
78 |
| -ifeq ($(config),tracev) |
79 |
| - CXXFLAGS+=-DTRACE=2 |
80 |
| -endif |
| 24 | +BUILD_DIR := build |
| 25 | +BUILD_ID ?= default-build-id |
| 26 | +OBJ_DIR := $(BUILD_DIR)/$(BUILD_ID) |
81 | 27 |
|
82 |
| -ifeq ($(config),release) |
83 |
| - CXXFLAGS+=-O3 -DNDEBUG |
| 28 | +ifeq (,$(BUILD_ID)) |
| 29 | +$(error BUILD_ID cannot be an empty string) |
84 | 30 | endif
|
85 | 31 |
|
86 |
| -ifeq ($(config),coverage) |
87 |
| - CXXFLAGS+=-coverage |
88 |
| - LDFLAGS+=-coverage |
89 |
| -endif |
| 32 | +prefix ?= /usr/local |
| 33 | +libdir := $(prefix)/lib |
| 34 | +includedir := $(prefix)/include |
90 | 35 |
|
91 |
| -ifeq ($(config),release-avx512) |
92 |
| - CXXFLAGS+=-O3 -DNDEBUG -mavx512vl -mavx512vbmi -mavx512vbmi2 |
93 |
| -endif |
| 36 | +CXXFLAGS ?= -O2 |
| 37 | +CXXFLAGS += -I$(includedir) |
94 | 38 |
|
95 |
| -ifeq ($(config),release-scalar) |
96 |
| - CXXFLAGS+=-O3 -DNDEBUG -DMESHOPTIMIZER_NO_SIMD |
97 |
| -endif |
| 39 | +HEADERS = \ |
| 40 | + src/meshoptimizer.h \ |
98 | 41 |
|
99 |
| -ifeq ($(config),coverage-scalar) |
100 |
| - CXXFLAGS+=-coverage -DMESHOPTIMIZER_NO_SIMD |
101 |
| - LDFLAGS+=-coverage |
102 |
| -endif |
| 42 | +SOURCES = \ |
| 43 | + src/*.cpp \ |
103 | 44 |
|
104 |
| -ifeq ($(config),sanitize) |
105 |
| - CXXFLAGS+=-fsanitize=address,undefined -fsanitize-undefined-trap-on-error |
106 |
| - LDFLAGS+=-fsanitize=address,undefined |
107 |
| -endif |
| 45 | +SOURCES := $(wildcard $(SOURCES)) |
108 | 46 |
|
109 |
| -ifeq ($(config),analyze) |
110 |
| - CXXFLAGS+=--analyze |
111 |
| -endif |
112 |
| - |
113 |
| -ifeq ($(config),fuzz) |
114 |
| - CXXFLAGS+=-O1 -fsanitize=address,fuzzer |
115 |
| - LDFLAGS+=-fsanitize=address,fuzzer |
| 47 | +HEADERS_INST := $(patsubst src/%,$(includedir)/%,$(HEADERS)) |
| 48 | +OBJECTS := $(patsubst %.cpp,$(OBJ_DIR)/%.o,$(SOURCES)) |
116 | 49 |
|
117 |
| - $(GLTFPACK_OBJECTS): CXXFLAGS+=-DGLTFFUZZ |
118 |
| -endif |
| 50 | +.PHONY: install |
119 | 51 |
|
120 |
| -all: $(DEMO) |
| 52 | +all: $(OBJ_DIR)/$(LIB) |
121 | 53 |
|
122 |
| -test: $(DEMO) |
123 |
| - $(DEMO) $(files) |
| 54 | +$(includedir)/%.h: src/%.h |
| 55 | + -@if [ ! -d $(includedir) ]; then mkdir -p $(includedir); fi |
| 56 | + $(QUIET_INSTALL)cp $< $@ |
| 57 | + @chmod 0644 $@ |
124 | 58 |
|
125 |
| -check: $(DEMO) |
126 |
| - $(DEMO) |
| 59 | +$(libdir)/%.a: $(OBJ_DIR)/%.a |
| 60 | + -@if [ ! -d $(libdir) ]; then mkdir -p $(libdir); fi |
| 61 | + $(QUIET_INSTALL)cp $< $@ |
| 62 | + @chmod 0644 $@ |
127 | 63 |
|
128 |
| -dev: $(DEMO) |
129 |
| - $(DEMO) -d $(files) |
| 64 | +install: $(HEADERS_INST) $(libdir)/$(LIB) |
130 | 65 |
|
131 |
| -nanite: $(DEMO) |
132 |
| - $(DEMO) -n $(files) |
133 |
| - |
134 |
| -format: |
135 |
| - clang-format -i src/*.h src/*.cpp demo/*.cpp gltf/*.h gltf/*.cpp |
136 |
| - |
137 |
| -formatjs: |
138 |
| - prettier -w js/*.js gltf/*.js demo/*.html js/*.ts |
139 |
| - |
140 |
| -js: js/meshopt_decoder.js js/meshopt_decoder.module.js js/meshopt_encoder.js js/meshopt_encoder.module.js js/meshopt_simplifier.js js/meshopt_simplifier.module.js js/meshopt_clusterizer.js js/meshopt_clusterizer.module.js |
141 |
| - |
142 |
| -symbols: $(BUILD)/amalgamated.so |
143 |
| - nm $< -U -g |
144 |
| - |
145 |
| -gltfpack: $(BUILD)/gltfpack |
146 |
| - ln -fs $^ $@ |
147 |
| - |
148 |
| -ifeq ($(config),fuzz) |
149 |
| -gltffuzz: $(BUILD)/gltfpack |
150 |
| - cp $^ $@ |
151 |
| - mkdir -p /tmp/gltffuzz |
152 |
| - cp gltf/fuzz.glb /tmp/gltffuzz/ |
153 |
| - ./gltffuzz /tmp/gltffuzz -fork=16 -dict=gltf/fuzz.dict -ignore_crashes=1 -max_len=32768 |
154 |
| -endif |
155 |
| - |
156 |
| -$(BUILD)/gltfpack: $(GLTFPACK_OBJECTS) $(LIBRARY) |
157 |
| - $(CXX) $^ $(LDFLAGS) -o $@ |
158 |
| - |
159 |
| -gltfpack.wasm: gltf/library.wasm |
160 |
| - |
161 |
| -gltf/library.wasm: $(LIBRARY_SOURCES) $(GLTFPACK_SOURCES) |
162 |
| - $(WASMCC) $^ -o $@ -Wall -Os -DNDEBUG --target=wasm32-wasi --sysroot=$(WASIROOT) -nostartfiles -Wl,--no-entry -Wl,--export=pack -Wl,--export=malloc -Wl,--export=free -Wl,--export=__wasm_call_ctors -Wl,-s -Wl,--allow-undefined-file=gltf/wasistubs.txt |
163 |
| - |
164 |
| -build/decoder_base.wasm: $(WASM_DECODER_SOURCES) |
165 |
| - @mkdir -p build |
166 |
| - $(WASMCC) $^ $(WASM_FLAGS) $(patsubst %,$(WASM_EXPORT_PREFIX)=%,$(WASM_DECODER_EXPORTS)) -o $@ |
167 |
| - |
168 |
| -build/decoder_simd.wasm: $(WASM_DECODER_SOURCES) |
169 |
| - @mkdir -p build |
170 |
| - $(WASMCC) $^ $(WASM_FLAGS) $(patsubst %,$(WASM_EXPORT_PREFIX)=%,$(WASM_DECODER_EXPORTS)) -o $@ -msimd128 -mbulk-memory |
171 |
| - |
172 |
| -build/encoder.wasm: $(WASM_ENCODER_SOURCES) |
173 |
| - @mkdir -p build |
174 |
| - $(WASMCC) $^ $(WASM_FLAGS) $(patsubst %,$(WASM_EXPORT_PREFIX)=%,$(WASM_ENCODER_EXPORTS)) -lc -o $@ |
175 |
| - |
176 |
| -build/simplifier.wasm: $(WASM_SIMPLIFIER_SOURCES) |
177 |
| - @mkdir -p build |
178 |
| - $(WASMCC) $^ $(WASM_FLAGS) $(patsubst %,$(WASM_EXPORT_PREFIX)=%,$(WASM_SIMPLIFIER_EXPORTS)) -lc -o $@ |
179 |
| - |
180 |
| -build/clusterizer.wasm: $(WASM_CLUSTERIZER_SOURCES) |
181 |
| - @mkdir -p build |
182 |
| - $(WASMCC) $^ $(WASM_FLAGS) $(patsubst %,$(WASM_EXPORT_PREFIX)=%,$(WASM_CLUSTERIZER_EXPORTS)) -lc -o $@ |
183 |
| - |
184 |
| -js/meshopt_decoder.js: build/decoder_base.wasm build/decoder_simd.wasm tools/wasmpack.py |
185 |
| - sed -i "s#Built with clang.*#Built with $$($(WASMCC) --version | head -n 1 | sed 's/\s\+(.*//')#" $@ |
186 |
| - sed -i "s#Built from meshoptimizer .*#Built from meshoptimizer $$(cat src/meshoptimizer.h | grep -Po '(?<=version )[0-9.]+')#" $@ |
187 |
| - sed -i "s#\([\"']\).*\(;\s*//\s*embed! base\)#\\1$$(cat build/decoder_base.wasm | python3 tools/wasmpack.py)\\1\\2#" $@ |
188 |
| - sed -i "s#\([\"']\).*\(;\s*//\s*embed! simd\)#\\1$$(cat build/decoder_simd.wasm | python3 tools/wasmpack.py)\\1\\2#" $@ |
189 |
| - |
190 |
| -js/meshopt_encoder.js: build/encoder.wasm tools/wasmpack.py |
191 |
| -js/meshopt_simplifier.js: build/simplifier.wasm tools/wasmpack.py |
192 |
| -js/meshopt_clusterizer.js: build/clusterizer.wasm tools/wasmpack.py |
193 |
| - |
194 |
| -js/meshopt_encoder.js js/meshopt_simplifier.js js/meshopt_clusterizer.js: |
195 |
| - sed -i "s#Built with clang.*#Built with $$($(WASMCC) --version | head -n 1 | sed 's/\s\+(.*//')#" $@ |
196 |
| - sed -i "s#Built from meshoptimizer .*#Built from meshoptimizer $$(cat src/meshoptimizer.h | grep -Po '(?<=version )[0-9.]+')#" $@ |
197 |
| - sed -i "s#\([\"']\).*\(;\s*//\s*embed! wasm\)#\\1$$(cat $< | python3 tools/wasmpack.py)\\1\\2#" $@ |
198 |
| - |
199 |
| -js/%.module.js: js/%.js |
200 |
| - sed '\#// export!#q' <$< >$@ |
201 |
| - sed -i "/use strict.;/d" $@ |
202 |
| - sed -i "s#// export! \(.*\)#export { \\1 };#" $@ |
203 |
| - |
204 |
| -$(DEMO): $(DEMO_OBJECTS) $(LIBRARY) |
205 |
| - $(CXX) $^ $(LDFLAGS) -o $@ |
206 |
| - |
207 |
| -vcachetuner: tools/vcachetuner.cpp tools/objloader.cpp $(LIBRARY) |
208 |
| - $(CXX) $^ -fopenmp $(CXXFLAGS) -std=c++11 $(LDFLAGS) -o $@ |
209 |
| - |
210 |
| -codecbench: tools/codecbench.cpp $(LIBRARY) |
211 |
| - $(CXX) $^ $(CXXFLAGS) $(LDFLAGS) -o $@ |
212 |
| - |
213 |
| -codecbench.js: tools/codecbench.cpp $(LIBRARY_SOURCES) |
214 |
| - emcc $^ -O3 -g -DNDEBUG -s TOTAL_MEMORY=268435456 -s SINGLE_FILE=1 -o $@ |
215 |
| - |
216 |
| -codecbench-simd.js: tools/codecbench.cpp $(LIBRARY_SOURCES) |
217 |
| - emcc $^ -O3 -g -DNDEBUG -s TOTAL_MEMORY=268435456 -s SINGLE_FILE=1 -msimd128 -o $@ |
218 |
| - |
219 |
| -codecbench.wasm: tools/codecbench.cpp $(LIBRARY_SOURCES) |
220 |
| - $(WASMCC) $^ -fno-exceptions --target=wasm32-wasi --sysroot=$(WASIROOT) -lc++ -lc++abi -O3 -g -DNDEBUG -o $@ |
221 |
| - |
222 |
| -codecbench-simd.wasm: tools/codecbench.cpp $(LIBRARY_SOURCES) |
223 |
| - $(WASMCC) $^ -fno-exceptions --target=wasm32-wasi --sysroot=$(WASIROOT) -lc++ -lc++abi -O3 -g -DNDEBUG -msimd128 -o $@ |
224 |
| - |
225 |
| -codectest: tools/codectest.cpp $(LIBRARY) |
226 |
| - $(CXX) $^ $(CXXFLAGS) $(LDFLAGS) -o $@ |
| 66 | +clean: |
| 67 | + $(RM) -r $(OBJ_DIR) |
227 | 68 |
|
228 |
| -codecfuzz: tools/codecfuzz.cpp src/vertexcodec.cpp src/indexcodec.cpp |
229 |
| - $(CXX) $^ -fsanitize=fuzzer,address,undefined -O1 -g -o $@ |
| 69 | +distclean: |
| 70 | + $(RM) -r $(BUILD_DIR) |
230 | 71 |
|
231 |
| -simplifyfuzz: tools/simplifyfuzz.cpp src/simplifier.cpp |
232 |
| - $(CXX) $^ -fsanitize=fuzzer,address,undefined -O1 -g -o $@ |
| 72 | +$(OBJ_DIR)/$(LIB): $(OBJECTS) |
| 73 | + $(QUIET_AR)$(AR) $(ARFLAGS) $@ $^ |
| 74 | + $(QUIET_RANLIB)$(RANLIB) $@ |
233 | 75 |
|
234 |
| -$(LIBRARY): $(LIBRARY_OBJECTS) |
235 |
| - ar rcs $@ $^ |
| 76 | +$(OBJ_DIR)/%.o: %.cpp $(OBJ_DIR)/.cflags | $$(@D)/. |
| 77 | + $(QUIET_CXX)$(CXX) $(CXXFLAGS) -o $@ -c $< |
236 | 78 |
|
237 |
| -$(BUILD)/amalgamated.so: $(LIBRARY_SOURCES) |
238 |
| - @mkdir -p $(dir $@) |
239 |
| - cat $^ | $(CXX) $(CXXFLAGS) -x c++ - -I src/ -o $@ -shared -fPIC |
| 79 | +.PRECIOUS: $(OBJ_DIR)/. $(OBJ_DIR)%/. |
240 | 80 |
|
241 |
| -$(BUILD)/%.cpp.o: %.cpp |
242 |
| - @mkdir -p $(dir $@) |
243 |
| - $(CXX) $< $(CXXFLAGS) -c -MMD -MP -o $@ |
| 81 | +$(OBJ_DIR)/.: |
| 82 | + $(QUIET)mkdir -p $@ |
244 | 83 |
|
245 |
| -$(BUILD)/%.c.o: %.c |
246 |
| - @mkdir -p $(dir $@) |
247 |
| - $(CC) $< $(CFLAGS) -c -MMD -MP -o $@ |
| 84 | +$(OBJ_DIR)%/.: |
| 85 | + $(QUIET)mkdir -p $@ |
248 | 86 |
|
249 |
| --include $(OBJECTS:.o=.d) |
| 87 | +TRACK_CFLAGS = $(subst ','\'',$(CXX) $(CXXFLAGS)) |
250 | 88 |
|
251 |
| -clean: |
252 |
| - rm -rf $(BUILD) |
| 89 | +$(OBJ_DIR)/.cflags: .force-cflags | $$(@D)/. |
| 90 | + @FLAGS='$(TRACK_CFLAGS)'; \ |
| 91 | + if test x"$$FLAGS" != x"`cat $(OBJ_DIR)/.cflags 2>/dev/null`" ; then \ |
| 92 | + echo " * rebuilding meshoptimizer: new build flags or prefix"; \ |
| 93 | + echo "$$FLAGS" > $(OBJ_DIR)/.cflags; \ |
| 94 | + fi |
253 | 95 |
|
254 |
| -.PHONY: all clean format js |
| 96 | +.PHONY: .force-cflags |
0 commit comments