Makefile.am 41.8 KB
Newer Older
BSBandme's avatar
BSBandme committed
1 2 3
benchmarks_protoc_inputs_benchmark_wrapper =                               \
	benchmarks.proto

4
benchmarks_protoc_inputs =                                                 \
BSBandme's avatar
BSBandme committed
5
	datasets/google_message1/proto3/benchmark_message1_proto3.proto
6 7

benchmarks_protoc_inputs_proto2 =                                          \
BSBandme's avatar
BSBandme committed
8
	datasets/google_message1/proto2/benchmark_message1_proto2.proto          \
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
	datasets/google_message2/benchmark_message2.proto                        \
	datasets/google_message3/benchmark_message3.proto                        \
	datasets/google_message3/benchmark_message3_1.proto                      \
	datasets/google_message3/benchmark_message3_2.proto                      \
	datasets/google_message3/benchmark_message3_3.proto                      \
	datasets/google_message3/benchmark_message3_4.proto                      \
	datasets/google_message3/benchmark_message3_5.proto                      \
	datasets/google_message3/benchmark_message3_6.proto                      \
	datasets/google_message3/benchmark_message3_7.proto                      \
	datasets/google_message3/benchmark_message3_8.proto                      \
	datasets/google_message4/benchmark_message4.proto                        \
	datasets/google_message4/benchmark_message4_1.proto                      \
	datasets/google_message4/benchmark_message4_2.proto                      \
	datasets/google_message4/benchmark_message4_3.proto

Yilun Chong's avatar
Yilun Chong committed
24
make_tmp_dir:
25
	mkdir -p 'tmp/java/src/main/java'
Yilun Chong's avatar
Yilun Chong committed
26
	touch make_tmp_dir
27

28 29 30
# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is
# relative to srcdir, which may not be the same as the current directory when
# building out-of-tree.
BSBandme's avatar
BSBandme committed
31
protoc_middleman: make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs) $(well_known_type_protoc_inputs) $(benchmarks_protoc_inputs_benchmark_wrapper)
Yilun Chong's avatar
Yilun Chong committed
32
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd/cpp --java_out=$$oldpwd/tmp/java/src/main/java --python_out=$$oldpwd/tmp $(benchmarks_protoc_inputs) $(benchmarks_protoc_inputs_benchmark_wrapper) )
33 34
	touch protoc_middleman

Yilun Chong's avatar
Yilun Chong committed
35
protoc_middleman2:  make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs_proto2) $(well_known_type_protoc_inputs)
Yilun Chong's avatar
Yilun Chong committed
36
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd/cpp --java_out=$$oldpwd/tmp/java/src/main/java --python_out=$$oldpwd/tmp $(benchmarks_protoc_inputs_proto2) )
37
	touch protoc_middleman2
38

Yilun Chong's avatar
Yilun Chong committed
39
all_data = $$(find $$(cd $(srcdir) && pwd) -type f -name "dataset.*.pb" -not -path "$$(cd $(srcdir) && pwd)/tmp/*")
40 41 42 43

############# CPP RULES ##############

benchmarks_protoc_outputs =                                                \
Yilun Chong's avatar
Yilun Chong committed
44 45 46
	cpp/benchmarks.pb.cc                                                     \
	cpp/datasets/google_message1/proto3/benchmark_message1_proto3.pb.cc

47
benchmarks_protoc_outputs_header =                                         \
Yilun Chong's avatar
Yilun Chong committed
48 49
	cpp/benchmarks.pb.h                                                      \
	cpp/datasets/google_message1/proto3/benchmark_message1_proto3.pb.h
50 51

benchmarks_protoc_outputs_proto2_header =                                  \
Yilun Chong's avatar
Yilun Chong committed
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
	cpp/datasets/google_message1/proto2/benchmark_message1_proto2.pb.h       \
	cpp/datasets/google_message2/benchmark_message2.pb.h                     \
	cpp/datasets/google_message3/benchmark_message3.pb.h                     \
	cpp/datasets/google_message3/benchmark_message3_1.pb.h                   \
	cpp/datasets/google_message3/benchmark_message3_2.pb.h                   \
	cpp/datasets/google_message3/benchmark_message3_3.pb.h                   \
	cpp/datasets/google_message3/benchmark_message3_4.pb.h                   \
	cpp/datasets/google_message3/benchmark_message3_5.pb.h                   \
	cpp/datasets/google_message3/benchmark_message3_6.pb.h                   \
	cpp/datasets/google_message3/benchmark_message3_7.pb.h                   \
	cpp/datasets/google_message3/benchmark_message3_8.pb.h                   \
	cpp/datasets/google_message4/benchmark_message4.pb.h                     \
	cpp/datasets/google_message4/benchmark_message4_1.pb.h                   \
	cpp/datasets/google_message4/benchmark_message4_2.pb.h                   \
	cpp/datasets/google_message4/benchmark_message4_3.pb.h
67 68

benchmarks_protoc_outputs_proto2 =                                         \
Yilun Chong's avatar
Yilun Chong committed
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
	cpp/datasets/google_message1/proto2/benchmark_message1_proto2.pb.cc      \
	cpp/datasets/google_message2/benchmark_message2.pb.cc                    \
	cpp/datasets/google_message3/benchmark_message3.pb.cc                    \
	cpp/datasets/google_message3/benchmark_message3_1.pb.cc                  \
	cpp/datasets/google_message3/benchmark_message3_2.pb.cc                  \
	cpp/datasets/google_message3/benchmark_message3_3.pb.cc                  \
	cpp/datasets/google_message3/benchmark_message3_4.pb.cc                  \
	cpp/datasets/google_message3/benchmark_message3_5.pb.cc                  \
	cpp/datasets/google_message3/benchmark_message3_6.pb.cc                  \
	cpp/datasets/google_message3/benchmark_message3_7.pb.cc                  \
	cpp/datasets/google_message3/benchmark_message3_8.pb.cc                  \
	cpp/datasets/google_message4/benchmark_message4.pb.cc                    \
	cpp/datasets/google_message4/benchmark_message4_1.pb.cc                  \
	cpp/datasets/google_message4/benchmark_message4_2.pb.cc                  \
	cpp/datasets/google_message4/benchmark_message4_3.pb.cc
84 85 86 87 88 89 90


$(benchmarks_protoc_outputs): protoc_middleman
$(benchmarks_protoc_outputs_header): protoc_middleman
$(benchmarks_protoc_outputs_proto2): protoc_middleman2
$(benchmarks_protoc_outputs_proto2_header): protoc_middleman2

Yilun Chong's avatar
Yilun Chong committed
91 92
initialize_submodule:
	oldpwd=`pwd`
93
	cd $(top_srcdir) && git submodule update --init -r third_party/benchmark
94
	cd $(top_srcdir)/third_party/benchmark && cmake -DCMAKE_BUILD_TYPE=Release && make
Yilun Chong's avatar
Yilun Chong committed
95 96
	cd $$oldpwd
	touch initialize_submodule
Yilun Chong's avatar
Yilun Chong committed
97

Yilun Chong's avatar
Yilun Chong committed
98 99
$(top_srcdir)/third_party/benchmark/src/libbenchmark.a: initialize_submodule

100 101 102 103 104
AM_CXXFLAGS = $(NO_OPT_CXXFLAGS) $(PROTOBUF_OPT_FLAG) -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare

bin_PROGRAMS = cpp-benchmark

cpp_benchmark_LDADD = $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/third_party/benchmark/src/libbenchmark.a
Yilun Chong's avatar
Yilun Chong committed
105 106
cpp_benchmark_SOURCES = cpp/cpp_benchmark.cc
cpp_benchmark_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir)/cpp -I$(top_srcdir)/third_party/benchmark/include
107 108 109
# Explicit deps because BUILT_SOURCES are only done before a "make all/check"
# so a direct "make test_cpp" could fail if parallel enough.
# See: https://www.gnu.org/software/automake/manual/html_node/Built-Sources-Example.html#Recording-Dependencies-manually
Yilun Chong's avatar
Yilun Chong committed
110
cpp/cpp_benchmark-cpp_benchmark.$(OBJEXT): $(benchmarks_protoc_outputs) $(benchmarks_protoc_outputs_proto2) $(benchmarks_protoc_outputs_header) $(benchmarks_protoc_outputs_proto2_header) $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/third_party/benchmark/src/libbenchmark.a
111
cpp/benchmark-cpp_benchmark.$(OBJEXT): $(benchmarks_protoc_outputs) $(benchmarks_protoc_outputs_proto2) $(benchmarks_protoc_outputs_header) $(benchmarks_protoc_outputs_proto2_header) $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/third_party/benchmark/src/libbenchmark.a
112 113 114 115 116 117
nodist_cpp_benchmark_SOURCES =                                             \
	$(benchmarks_protoc_outputs)                                             \
	$(benchmarks_protoc_outputs_proto2)                                      \
	$(benchmarks_protoc_outputs_proto2_header)                               \
	$(benchmarks_protoc_outputs_header)

Yilun Chong's avatar
Yilun Chong committed
118
cpp: protoc_middleman protoc_middleman2 cpp-benchmark initialize_submodule
119 120 121 122 123 124
	./cpp-benchmark $(all_data)

############ CPP RULES END ############

############# JAVA RULES ##############

Yilun Chong's avatar
Yilun Chong committed
125
java_benchmark_testing_files =                                      \
126
	java/src/main/java/com/google/protobuf/ProtoCaliperBenchmark.java
127 128

javac_middleman: $(java_benchmark_testing_files) protoc_middleman protoc_middleman2
129
	cp -r $(srcdir)/java tmp
130 131 132
	mkdir -p tmp/java/lib
	cp $(top_srcdir)/java/core/target/*.jar tmp/java/lib/protobuf-java.jar
	cd tmp/java && mvn clean compile assembly:single -Dprotobuf.version=$(PACKAGE_VERSION) && cd ../..
133 134
	@touch javac_middleman

135
java-benchmark: javac_middleman
136
	@echo "Writing shortcut script java-benchmark..."
Yilun Chong's avatar
Yilun Chong committed
137
	@echo '#! /bin/bash' > java-benchmark
138 139 140 141
	@echo 'all_data=""' >> java-benchmark
	@echo 'conf=()' >> java-benchmark
	@echo 'data_files=""' >> java-benchmark
	@echo 'for arg in $$@; do if [[ $${arg:0:1} == "-" ]]; then conf+=($$arg); else data_files+="$$arg,"; fi; done' >> java-benchmark
142 143 144 145
	@echo 'java -cp '\"tmp/java/target/*:$(top_srcdir)/java/core/target/*:$(top_srcdir)/java/util/target/*\"" \\" >>java-benchmark
	@echo '   com.google.caliper.runner.CaliperMain com.google.protobuf.ProtoCaliperBenchmark -i runtime '"\\"  >> java-benchmark
	@echo '   -b serializeToByteArray,serializeToMemoryStream,deserializeFromByteArray,deserializeFromMemoryStream '"\\" >> java-benchmark
	@echo '   -DdataFile=$${data_files:0:-1} $${conf[*]}' >> java-benchmark
146 147 148 149 150 151 152
	@chmod +x java-benchmark

java: protoc_middleman protoc_middleman2 java-benchmark
	./java-benchmark $(all_data)

############# JAVA RULES END ##############

Yilun Chong's avatar
Yilun Chong committed
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169

############# PYTHON RULES ##############

python_add_init: protoc_middleman protoc_middleman2
	all_file=`find tmp -type f -regex '.*\.py'` &&                   \
	for file in $${all_file[@]}; do                                  \
		path="$${file%/*}";                                            \
		while true; do                                                 \
			touch "$$path/__init__.py" && chmod +x "$$path/__init__.py"; \
			if [[ $$path != *"/"* ]]; then break; fi;                    \
			path=$${path%/*};                                            \
		done                                                           \
	done

python_cpp_pkg_flags = `pkg-config --cflags --libs python`

lib_LTLIBRARIES = libbenchmark_messages.la
Yilun Chong's avatar
Yilun Chong committed
170
libbenchmark_messages_la_SOURCES = python/python_benchmark_messages.cc
171
libbenchmark_messages_la_LIBADD = $(top_srcdir)/src/.libs/libprotobuf.la
Yilun Chong's avatar
Yilun Chong committed
172
libbenchmark_messages_la_LDFLAGS = -version-info 1:0:0 -export-dynamic
Yilun Chong's avatar
Yilun Chong committed
173 174
libbenchmark_messages_la_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir)/cpp $(python_cpp_pkg_flags)
libbenchmark_messages_la-python_benchmark_messages.$(OBJEXT): $(benchmarks_protoc_outputs_header) $(benchmarks_protoc_outputs_proto2_header) $(benchmarks_protoc_outputs) $(benchmarks_protoc_outputs_proto2)
Yilun Chong's avatar
Yilun Chong committed
175 176 177 178 179 180 181 182
nodist_libbenchmark_messages_la_SOURCES =                         \
	$(benchmarks_protoc_outputs)                                    \
	$(benchmarks_protoc_outputs_proto2)                             \
	$(benchmarks_protoc_outputs_proto2_header)                      \
	$(benchmarks_protoc_outputs_header)

python-pure-python-benchmark: python_add_init
	@echo "Writing shortcut script python-pure-python-benchmark..."
Yilun Chong's avatar
Yilun Chong committed
183
	@echo '#! /bin/bash' > python-pure-python-benchmark
184 185
	@echo export LD_LIBRARY_PATH=$(top_srcdir)/src/.libs >> python-pure-python-benchmark
	@echo export DYLD_LIBRARY_PATH=$(top_srcdir)/src/.libs >> python-pure-python-benchmark
Yilun Chong's avatar
Yilun Chong committed
186
	@echo export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=\'python\' >> python-pure-python-benchmark
Yilun Chong's avatar
Yilun Chong committed
187
	@echo cp $(srcdir)/python/py_benchmark.py tmp >> python-pure-python-benchmark
188
	@echo python tmp/py_benchmark.py '$$@' >> python-pure-python-benchmark
Yilun Chong's avatar
Yilun Chong committed
189 190 191 192
	@chmod +x python-pure-python-benchmark

python-cpp-reflection-benchmark: python_add_init
	@echo "Writing shortcut script python-cpp-reflection-benchmark..."
Yilun Chong's avatar
Yilun Chong committed
193
	@echo '#! /bin/bash' > python-cpp-reflection-benchmark
194 195
	@echo export LD_LIBRARY_PATH=$(top_srcdir)/src/.libs >> python-cpp-reflection-benchmark
	@echo export DYLD_LIBRARY_PATH=$(top_srcdir)/src/.libs >> python-cpp-reflection-benchmark
Yilun Chong's avatar
Yilun Chong committed
196
	@echo export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=\'cpp\' >> python-cpp-reflection-benchmark
Yilun Chong's avatar
Yilun Chong committed
197
	@echo cp $(srcdir)/python/py_benchmark.py tmp >> python-cpp-reflection-benchmark
198
	@echo python tmp/py_benchmark.py '$$@' >> python-cpp-reflection-benchmark
Yilun Chong's avatar
Yilun Chong committed
199 200 201 202
	@chmod +x python-cpp-reflection-benchmark

python-cpp-generated-code-benchmark: python_add_init libbenchmark_messages.la
	@echo "Writing shortcut script python-cpp-generated-code-benchmark..."
Yilun Chong's avatar
Yilun Chong committed
203
	@echo '#! /bin/bash' > python-cpp-generated-code-benchmark
204 205
	@echo export LD_LIBRARY_PATH=$(top_srcdir)/src/.libs >> python-cpp-generated-code-benchmark
	@echo export DYLD_LIBRARY_PATH=$(top_srcdir)/src/.libs >> python-cpp-generated-code-benchmark
Yilun Chong's avatar
Yilun Chong committed
206
	@echo export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=\'cpp\' >> python-cpp-generated-code-benchmark
Yilun Chong's avatar
Yilun Chong committed
207
	@echo cp $(srcdir)/python/py_benchmark.py tmp >> python-cpp-generated-code-benchmark
208
	@echo python tmp/py_benchmark.py --cpp_generated '$$@' >> python-cpp-generated-code-benchmark
Yilun Chong's avatar
Yilun Chong committed
209 210 211 212 213 214 215 216 217 218 219 220 221
	@chmod +x python-cpp-generated-code-benchmark

python-pure-python: python-pure-python-benchmark
	./python-pure-python-benchmark $(all_data)

python-cpp-reflection: python-cpp-reflection-benchmark
	./python-cpp-reflection-benchmark $(all_data)

python-cpp-generated-code: python-cpp-generated-code-benchmark
	./python-cpp-generated-code-benchmark $(all_data)

############# PYTHON RULES END ##############

BSBandme's avatar
BSBandme committed
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
############# GO RULES BEGIN ##############

benchmarks_protoc_inputs_proto2_message1 =                                 \
	datasets/google_message1/proto2/benchmark_message1_proto2.proto

benchmarks_protoc_inputs_proto2_message2 =                                 \
	datasets/google_message2/benchmark_message2.proto

benchmarks_protoc_inputs_proto2_message3 =                                 \
	datasets/google_message3/benchmark_message3.proto                        \
	datasets/google_message3/benchmark_message3_1.proto                      \
	datasets/google_message3/benchmark_message3_2.proto                      \
	datasets/google_message3/benchmark_message3_3.proto                      \
	datasets/google_message3/benchmark_message3_4.proto                      \
	datasets/google_message3/benchmark_message3_5.proto                      \
	datasets/google_message3/benchmark_message3_6.proto                      \
	datasets/google_message3/benchmark_message3_7.proto                      \
	datasets/google_message3/benchmark_message3_8.proto

benchmarks_protoc_inputs_proto2_message4 =                                 \
	datasets/google_message4/benchmark_message4.proto                        \
	datasets/google_message4/benchmark_message4_1.proto                      \
	datasets/google_message4/benchmark_message4_2.proto                      \
	datasets/google_message4/benchmark_message4_3.proto

Yilun Chong's avatar
Yilun Chong committed
247
go_protoc_middleman: make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs) $(well_known_type_protoc_inputs) $(benchmarks_protoc_inputs_proto2_message1) $(benchmarks_protoc_inputs_proto2_message2) $(benchmarks_protoc_inputs_proto2_message3) $(benchmarks_protoc_inputs_proto2_message4) $(well_known_type_protoc_inputs)
BSBandme's avatar
BSBandme committed
248 249 250 251 252 253
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --go_out=$$oldpwd/tmp $(benchmarks_protoc_inputs) )
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --go_out=$$oldpwd/tmp $(benchmarks_protoc_inputs_benchmark_wrapper) )
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --go_out=$$oldpwd/tmp $(benchmarks_protoc_inputs_proto2_message1) )
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --go_out=$$oldpwd/tmp $(benchmarks_protoc_inputs_proto2_message2) )
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --go_out=$$oldpwd/tmp $(benchmarks_protoc_inputs_proto2_message3) )
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --go_out=$$oldpwd/tmp $(benchmarks_protoc_inputs_proto2_message4) )
Yilun Chong's avatar
Yilun Chong committed
254
	touch go_protoc_middleman
BSBandme's avatar
BSBandme committed
255

256
go-benchmark: go_protoc_middleman
BSBandme's avatar
BSBandme committed
257
	@echo "Writing shortcut script go-benchmark..."
Yilun Chong's avatar
Yilun Chong committed
258
	@echo '#! /bin/bash' > go-benchmark
Yilun Chong's avatar
Yilun Chong committed
259 260
	@echo 'cd $(srcdir)/go' >> go-benchmark
	@echo 'all_data=""' >> go-benchmark
261 262
	@echo 'conf=()' >> go-benchmark
	@echo 'data_files=()' >> go-benchmark
263
	@echo 'for arg in $$@; do if [[ $${arg:0:1} == "-" ]]; then conf+=($$arg); else data_files+=("$$arg"); fi; done' >> go-benchmark
264
	@echo 'go test -bench=. $${conf[*]} -- $${data_files[*]}' >> go-benchmark
Yilun Chong's avatar
Yilun Chong committed
265
	@echo 'cd ..' >> go-benchmark
BSBandme's avatar
BSBandme committed
266 267
	@chmod +x go-benchmark

268
go: go_protoc_middleman go-benchmark
BSBandme's avatar
BSBandme committed
269 270 271 272
	./go-benchmark $(all_data)

############# GO RULES END ##############

Yilun Chong's avatar
Yilun Chong committed
273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324
############# GOGO RULES BEGIN ############

cpp_no_group_benchmarks_protoc_outputs_header =                             \
	gogo/cpp_no_group/benchmarks.pb.h                                         \
	gogo/cpp_no_group/datasets/google_message1/proto3/benchmark_message1_proto3.pb.h

cpp_no_group_benchmarks_protoc_outputs =                                    \
	gogo/cpp_no_group/benchmarks.pb.cc                                        \
	gogo/cpp_no_group/datasets/google_message1/proto3/benchmark_message1_proto3.pb.cc

cpp_no_group_benchmarks_protoc_outputs_proto2_header =                      \
	gogo/cpp_no_group/datasets/google_message1/proto2/benchmark_message1_proto2.pb.h \
	gogo/cpp_no_group/datasets/google_message2/benchmark_message2.pb.h        \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3.pb.h        \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_1.pb.h      \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_2.pb.h      \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_3.pb.h      \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_4.pb.h      \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_5.pb.h      \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_6.pb.h      \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_7.pb.h      \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_8.pb.h      \
	gogo/cpp_no_group/datasets/google_message4/benchmark_message4.pb.h        \
	gogo/cpp_no_group/datasets/google_message4/benchmark_message4_1.pb.h      \
	gogo/cpp_no_group/datasets/google_message4/benchmark_message4_2.pb.h      \
	gogo/cpp_no_group/datasets/google_message4/benchmark_message4_3.pb.h

cpp_no_group_benchmarks_protoc_outputs_proto2 =                             \
	gogo/cpp_no_group/datasets/google_message1/proto2/benchmark_message1_proto2.pb.cc \
	gogo/cpp_no_group/datasets/google_message2/benchmark_message2.pb.cc       \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3.pb.cc       \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_1.pb.cc     \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_2.pb.cc     \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_3.pb.cc     \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_4.pb.cc     \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_5.pb.cc     \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_6.pb.cc     \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_7.pb.cc     \
	gogo/cpp_no_group/datasets/google_message3/benchmark_message3_8.pb.cc     \
	gogo/cpp_no_group/datasets/google_message4/benchmark_message4.pb.cc       \
	gogo/cpp_no_group/datasets/google_message4/benchmark_message4_1.pb.cc     \
	gogo/cpp_no_group/datasets/google_message4/benchmark_message4_2.pb.cc     \
	gogo/cpp_no_group/datasets/google_message4/benchmark_message4_3.pb.cc

$(cpp_no_group_benchmarks_protoc_outputs): cpp_no_group_protoc_middleman
$(cpp_no_group_benchmarks_protoc_outputs_header): cpp_no_group_protoc_middleman
$(cpp_no_group_benchmarks_protoc_outputs_proto2): cpp_no_group_protoc_middleman
$(cpp_no_group_benchmarks_protoc_outputs_proto2_header): cpp_no_group_protoc_middleman

generate_cpp_no_group_benchmark_code:
	cp $(srcdir)/cpp/cpp_benchmark.cc gogo/cpp_no_group/cpp_benchmark.cc
	sed -i -e "s/\#include \"datasets/\#include \"gogo\/cpp_no_group\/datasets/g" gogo/cpp_no_group/cpp_benchmark.cc
325
	sed -i -e "s/\#include \"benchmarks.pb.h/\#include \"gogo\/cpp_no_group\/benchmarks.pb.h/g" gogo/cpp_no_group/cpp_benchmark.cc
Yilun Chong's avatar
Yilun Chong committed
326
	touch generate_cpp_no_group_benchmark_code
327

Yilun Chong's avatar
Yilun Chong committed
328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345
bin_PROGRAMS += cpp-no-group-benchmark
cpp_no_group_benchmark_LDADD = $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/third_party/benchmark/src/libbenchmark.a
cpp_no_group_benchmark_SOURCES = gogo/cpp_no_group/cpp_benchmark.cc
cpp_no_group_benchmark_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir)/gogo/cpp_no_group -I$(top_srcdir)/third_party/benchmark/include
# Explicit deps because BUILT_SOURCES are only done before a "make all/check"
# so a direct "make test_cpp" could fail if parallel enough.
# See: https://www.gnu.org/software/automake/manual/html_node/Built-Sources-Example.html#Recording-Dependencies-manually
gogo/cpp_no_group/cpp_no_group_benchmark-cpp_benchmark.$(OBJEXT): $(cpp_no_group_benchmarks_protoc_outputs) $(cpp_no_group_benchmarks_protoc_outputs_proto2) $(cpp_no_group_benchmarks_protoc_outputs_header) \
	$(cpp_no_group_benchmarks_protoc_outputs_proto2_header) $(top_srcdir)/third_party/benchmark/src/libbenchmark.a generate_cpp_no_group_benchmark_code
gogo/cpp_no_group/cpp_benchmark.cc: generate_cpp_no_group_benchmark_code
nodist_cpp_no_group_benchmark_SOURCES =                                    \
	$(cpp_no_group_benchmarks_protoc_outputs_proto2)                         \
	$(cpp_no_group_benchmarks_protoc_outputs)                                \
	$(cpp_no_group_benchmarks_protoc_outputs_header)                         \
	$(cpp_no_group_benchmarks_protoc_outputs_proto2_header)

cpp_no_group: cpp_no_group_protoc_middleman generate_gogo_data cpp-no-group-benchmark
	./cpp-no-group-benchmark $(gogo_data)
346

Yilun Chong's avatar
Yilun Chong committed
347 348 349 350 351
gogo_proto_middleman: protoc-gen-gogoproto
	mkdir -p "tmp/gogo_proto"
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I$(srcdir) -I$(top_srcdir) --plugin=protoc-gen-gogoproto --gogoproto_out=$$oldpwd/tmp/gogo_proto $(benchmarks_protoc_inputs) $(benchmarks_protoc_inputs_benchmark_wrapper) $(benchmarks_protoc_inputs_proto2) )
	touch gogo_proto_middleman

352
gogo_data = $$(for data in $(all_data); do echo "tmp/gogo_data$${data\#$(srcdir)}"; done | xargs)
Yilun Chong's avatar
Yilun Chong committed
353 354

generate_gogo_data: protoc_middleman protoc_middleman2 gogo-data-scrubber
355 356
	mkdir -p `dirname $(gogo_data)`
	./gogo-data-scrubber $(all_data) $(gogo_data)
Yilun Chong's avatar
Yilun Chong committed
357
	touch generate_gogo_data
358

Yilun Chong's avatar
Yilun Chong committed
359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411
make_tmp_dir_gogo:
	mkdir -p tmp/go_no_group/benchmark_code
	mkdir -p tmp/gogofast/benchmark_code
	mkdir -p tmp/gogofaster/benchmark_code
	mkdir -p tmp/gogoslick/benchmark_code
	touch make_tmp_dir_gogo

go_no_group_protoc_middleman: make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --go_out=$$oldpwd/tmp/go_no_group $(benchmarks_protoc_inputs) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --go_out=$$oldpwd/tmp/go_no_group $(benchmarks_protoc_inputs_benchmark_wrapper) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --go_out=$$oldpwd/tmp/go_no_group $(benchmarks_protoc_inputs_proto2_message1) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --go_out=$$oldpwd/tmp/go_no_group $(benchmarks_protoc_inputs_proto2_message2) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --go_out=$$oldpwd/tmp/go_no_group $(benchmarks_protoc_inputs_proto2_message3) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --go_out=$$oldpwd/tmp/go_no_group $(benchmarks_protoc_inputs_proto2_message4) )
	touch go_no_group_protoc_middleman

cpp_no_group_protoc_middleman: make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --cpp_out=$$oldpwd/gogo/cpp_no_group $(benchmarks_protoc_inputs) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --cpp_out=$$oldpwd/gogo/cpp_no_group $(benchmarks_protoc_inputs_benchmark_wrapper) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --cpp_out=$$oldpwd/gogo/cpp_no_group $(benchmarks_protoc_inputs_proto2_message1) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --cpp_out=$$oldpwd/gogo/cpp_no_group $(benchmarks_protoc_inputs_proto2_message2) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --cpp_out=$$oldpwd/gogo/cpp_no_group $(benchmarks_protoc_inputs_proto2_message3) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --cpp_out=$$oldpwd/gogo/cpp_no_group $(benchmarks_protoc_inputs_proto2_message4) )
	touch cpp_no_group_protoc_middleman

gogofast_protoc_middleman: make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofast_out=$$oldpwd/tmp/gogofast $(benchmarks_protoc_inputs) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofast_out=$$oldpwd/tmp/gogofast $(benchmarks_protoc_inputs_benchmark_wrapper) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofast_out=$$oldpwd/tmp/gogofast $(benchmarks_protoc_inputs_proto2_message1) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofast_out=$$oldpwd/tmp/gogofast $(benchmarks_protoc_inputs_proto2_message2) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofast_out=$$oldpwd/tmp/gogofast $(benchmarks_protoc_inputs_proto2_message3) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofast_out=$$oldpwd/tmp/gogofast $(benchmarks_protoc_inputs_proto2_message4) )
	touch gogofast_protoc_middleman

gogofaster_protoc_middleman: make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofaster_out=$$oldpwd/tmp/gogofaster $(benchmarks_protoc_inputs) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofaster_out=$$oldpwd/tmp/gogofaster $(benchmarks_protoc_inputs_benchmark_wrapper) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofaster_out=$$oldpwd/tmp/gogofaster $(benchmarks_protoc_inputs_proto2_message1) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofaster_out=$$oldpwd/tmp/gogofaster $(benchmarks_protoc_inputs_proto2_message2) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofaster_out=$$oldpwd/tmp/gogofaster $(benchmarks_protoc_inputs_proto2_message3) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogofaster_out=$$oldpwd/tmp/gogofaster $(benchmarks_protoc_inputs_proto2_message4) )
	touch gogofaster_protoc_middleman

gogoslick_protoc_middleman: make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogoslick_out=$$oldpwd/tmp/gogoslick $(benchmarks_protoc_inputs) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogoslick_out=$$oldpwd/tmp/gogoslick $(benchmarks_protoc_inputs_benchmark_wrapper) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogoslick_out=$$oldpwd/tmp/gogoslick $(benchmarks_protoc_inputs_proto2_message1) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogoslick_out=$$oldpwd/tmp/gogoslick $(benchmarks_protoc_inputs_proto2_message2) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogoslick_out=$$oldpwd/tmp/gogoslick $(benchmarks_protoc_inputs_proto2_message3) )
	oldpwd=`pwd` && ( cd $(srcdir)/tmp/gogo_proto && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$$oldpwd/$(top_srcdir)/src --gogoslick_out=$$oldpwd/tmp/gogoslick $(benchmarks_protoc_inputs_proto2_message4) )
	touch gogoslick_protoc_middleman

generate-gogo-benchmark-code:
Yilun Chong's avatar
Yilun Chong committed
412
	@echo '#! /bin/bash' > generate-gogo-benchmark-code
Yilun Chong's avatar
Yilun Chong committed
413 414 415 416 417 418 419 420 421 422 423 424 425 426
	@echo 'cp $(srcdir)/go/go_benchmark_test.go tmp/$$1/benchmark_code/$$1_benchmark1_test.go' >> generate-gogo-benchmark-code
	@echo 'sed -i -e "s/\.\.\/tmp/../g" tmp/$$1/benchmark_code/$$1_benchmark1_test.go' >> generate-gogo-benchmark-code
	@echo 'sed -i -e "s/b\.Run(\"\(.*\)\"/b.Run(\"\1\_$$1\"/g" tmp/$$1/benchmark_code/$$1_benchmark1_test.go' >> generate-gogo-benchmark-code
	@echo 'if [[ $$2 == 1 ]]; then sed -i -e "s/github\.com\/golang/github.com\/gogo/g" tmp/$$1/benchmark_code/$$1_benchmark1_test.go; fi ' >> generate-gogo-benchmark-code
	@chmod +x generate-gogo-benchmark-code

generate_all_gogo_benchmark_code: generate-gogo-benchmark-code make_tmp_dir_gogo
	./generate-gogo-benchmark-code go_no_group 0
	./generate-gogo-benchmark-code gogofast 1
	./generate-gogo-benchmark-code gogofaster 1
	./generate-gogo-benchmark-code gogoslick 1

gogo-benchmark:
	@echo "Writing shortcut script gogo-benchmark..."
Yilun Chong's avatar
Yilun Chong committed
427
	@echo '#! /bin/bash' > gogo-benchmark
Yilun Chong's avatar
Yilun Chong committed
428 429 430 431 432 433 434 435 436 437
	@echo 'cd tmp/$$1/benchmark_code' >> gogo-benchmark
	@echo 'shift' >> gogo-benchmark
	@echo 'all_data=""' >> gogo-benchmark
	@echo 'for data_file in $$@; do all_data="$$all_data ../../../$$data_file"; done' >> gogo-benchmark
	@echo 'go test -bench=. -- $$all_data' >> gogo-benchmark
	@echo 'cd ../..' >> gogo-benchmark
	@chmod +x gogo-benchmark

go_no_group: go_no_group_protoc_middleman generate_gogo_data generate_all_gogo_benchmark_code gogo-benchmark
	./gogo-benchmark go_no_group $(gogo_data)
438 439

gogofast: gogofast_protoc_middleman generate_gogo_data gogo-benchmark generate_all_gogo_benchmark_code
Yilun Chong's avatar
Yilun Chong committed
440
	./gogo-benchmark gogofast $(gogo_data)
441

Yilun Chong's avatar
Yilun Chong committed
442 443 444 445 446 447 448 449 450
gogofaster: gogofaster_protoc_middleman  generate_gogo_data gogo-benchmark generate_all_gogo_benchmark_code
	./gogo-benchmark gogofaster $(gogo_data)

gogoslick: gogoslick_protoc_middleman  generate_gogo_data gogo-benchmark generate_all_gogo_benchmark_code
	./gogo-benchmark gogoslick $(gogo_data)


############# GOGO RULES END ############

451

Yilun Chong's avatar
Yilun Chong committed
452 453
############ UTIL RULES BEGIN ############

454
bin_PROGRAMS += protoc-gen-gogoproto gogo-data-scrubber protoc-gen-proto2_to_proto3 proto3-data-stripper
Yilun Chong's avatar
Yilun Chong committed
455 456 457 458 459 460 461 462 463 464 465 466 467 468

protoc_gen_gogoproto_LDADD = $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/src/libprotoc.la
protoc_gen_gogoproto_SOURCES = util/protoc-gen-gogoproto.cc
protoc_gen_gogoproto_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir)/cpp -I$(srcdir)/util

gogo_data_scrubber_LDADD = $(top_srcdir)/src/libprotobuf.la
gogo_data_scrubber_SOURCES = util/gogo_data_scrubber.cc
gogo_data_scrubber_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir)/cpp -I$(srcdir)/util
util/gogo_data_scrubber-gogo_data_scrubber.$(OBJEXT): $(benchmarks_protoc_outputs) $(benchmarks_protoc_outputs_proto2) $(benchmarks_protoc_outputs_header) $(benchmarks_protoc_outputs_proto2_header)
nodist_gogo_data_scrubber_SOURCES =                                        \
	$(benchmarks_protoc_outputs)                                             \
	$(benchmarks_protoc_outputs_proto2)                                      \
	$(benchmarks_protoc_outputs_proto2_header)                               \
	$(benchmarks_protoc_outputs_header)
469 470 471 472 473 474 475 476 477 478 479 480 481 482 483

protoc_gen_proto2_to_proto3_LDADD = $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/src/libprotoc.la
protoc_gen_proto2_to_proto3_SOURCES = util/protoc-gen-proto2_to_proto3.cc
protoc_gen_proto2_to_proto3_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir)/cpp -I$(srcdir)/util

proto3_data_stripper_LDADD = $(top_srcdir)/src/libprotobuf.la
proto3_data_stripper_SOURCES = util/proto3_data_stripper.cc
proto3_data_stripper_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir)/cpp -I$(srcdir)/util
util/proto3_data_stripper-proto3_data_stripper.$(OBJEXT): $(benchmarks_protoc_outputs) $(benchmarks_protoc_outputs_proto2) $(benchmarks_protoc_outputs_header) $(benchmarks_protoc_outputs_proto2_header)
nodist_proto3_data_stripper_SOURCES =                                      \
	$(benchmarks_protoc_outputs)                                             \
	$(benchmarks_protoc_outputs_proto2)                                      \
	$(benchmarks_protoc_outputs_proto2_header)                               \
	$(benchmarks_protoc_outputs_header)

484

Yilun Chong's avatar
Yilun Chong committed
485
############ UTIL RULES END ############
BSBandme's avatar
BSBandme committed
486

487 488 489 490 491 492 493
############ PROTO3 PREPARATION BEGIN #############

proto3_proto_middleman: protoc-gen-proto2_to_proto3
	mkdir -p "tmp/proto3_proto"
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I$(srcdir) -I$(top_srcdir) --plugin=protoc-gen-proto2_to_proto3 --proto2_to_proto3_out=$$oldpwd/tmp/proto3_proto $(benchmarks_protoc_inputs) $(benchmarks_protoc_inputs_benchmark_wrapper) $(benchmarks_protoc_inputs_proto2) )
	touch proto3_proto_middleman

Yilun Chong's avatar
Yilun Chong committed
494 495
full_srcdir = $$(cd $(srcdir) && pwd)
proto3_data = $$(for data in $(all_data); do echo $(full_srcdir)"/tmp/proto3_data$${data\#$(full_srcdir)}"; done | xargs)
496 497 498 499 500 501 502 503

generate_proto3_data: protoc_middleman protoc_middleman2 proto3-data-stripper
	mkdir -p `dirname $(proto3_data)`
	./proto3-data-stripper $(all_data) $(proto3_data)
	touch generate_proto3_data

############ PROTO3 PREPARATION END #############

Yilun Chong's avatar
Yilun Chong committed
504 505 506 507 508 509 510 511 512
############ PHP RULES BEGIN #################

proto3_middleman_php: proto3_proto_middleman
	mkdir -p "tmp/php"
	oldpwd=`pwd` && ( cd tmp/proto3_proto && $$oldpwd/../src/protoc$(EXEEXT) -I$(srcdir) -I$(top_srcdir) --php_out=$$oldpwd/tmp/php $(benchmarks_protoc_inputs) $(benchmarks_protoc_inputs_benchmark_wrapper) $(benchmarks_protoc_inputs_proto2) )
	touch proto3_middleman_php

php-benchmark: proto3_middleman_php generate_proto3_data
	mkdir -p "tmp/php/Google/Protobuf/Benchmark" && cp php/PhpBenchmark.php "tmp/php/Google/Protobuf/Benchmark"
513
	cp php/autoload.php "tmp/php"
Yilun Chong's avatar
Yilun Chong committed
514 515 516 517 518 519 520 521 522 523
	@echo "Writing shortcut script php-benchmark..."
	@echo '#! /bin/bash' > php-benchmark
	@echo 'export PROTOBUF_PHP_SRCDIR="$$(cd $(top_srcdir) && pwd)/php/src"' >> php-benchmark
	@echo 'cd tmp/php' >> php-benchmark
	@echo 'export CURRENT_DIR=$$(pwd)' >> php-benchmark
	@echo 'php -d auto_prepend_file="autoload.php" -d include_path="$$(pwd)" Google/Protobuf/Benchmark/PhpBenchmark.php $$@' >> php-benchmark
	@echo 'cd ../..' >> php-benchmark
	@chmod +x php-benchmark

php: php-benchmark proto3_middleman_php
524
	./php-benchmark --behavior_prefix="php" $(proto3_data)
Yilun Chong's avatar
Yilun Chong committed
525 526

php_c_extension:
527
	cd $(top_srcdir)/php/ext/google/protobuf && phpize && ./configure CFLAGS='-O3' && make -j8
Yilun Chong's avatar
Yilun Chong committed
528 529

php-c-benchmark: proto3_middleman_php generate_proto3_data php_c_extension php_c_extension
530 531
	mkdir -p "tmp/php/Google/Protobuf/Benchmark" && cp php/PhpBenchmark.php "tmp/php/Google/Protobuf/Benchmark"
	cp php/autoload.php "tmp/php"
Yilun Chong's avatar
Yilun Chong committed
532 533 534 535 536 537 538 539 540 541 542
	@echo "Writing shortcut script php-c-benchmark..."
	@echo '#! /bin/bash' > php-c-benchmark
	@echo 'export PROTOBUF_PHP_SRCDIR="$$(cd $(top_srcdir) && pwd)/php/src"' >> php-c-benchmark
	@echo 'export PROTOBUF_PHP_EXTDIR="$$PROTOBUF_PHP_SRCDIR/../ext/google/protobuf/modules"' >> php-c-benchmark
	@echo 'cd tmp/php' >> php-c-benchmark
	@echo 'export CURRENT_DIR=$$(pwd)' >> php-c-benchmark
	@echo 'php -d auto_prepend_file="autoload.php" -d include_path="$$(pwd)" -d extension="$$PROTOBUF_PHP_EXTDIR/protobuf.so" Google/Protobuf/Benchmark/PhpBenchmark.php $$@' >> php-c-benchmark
	@echo 'cd ../..' >> php-c-benchmark
	@chmod +x php-c-benchmark

php_c: php-c-benchmark proto3_middleman_php
543
	./php-c-benchmark --behavior_prefix="php_c" $(proto3_data)
Yilun Chong's avatar
Yilun Chong committed
544 545 546 547


############ PHP RULES END #################

548 549 550 551 552 553 554 555
############ protobuf.js RULE BEGIN #############

pbjs_preparation:
	mkdir -p tmp/protobuf.js
	cd tmp/protobuf.js && git clone https://github.com/dcodeIO/protobuf.js.git && \
			cd protobuf.js && npm install && npm run build
	cd tmp/protobuf.js && npm install benchmark
	cp protobuf.js/* tmp/protobuf.js
Yilun Chong's avatar
Yilun Chong committed
556
	cp js/benchmark_suite.js tmp/protobuf.js
557 558 559
	touch pbjs_preparation

pbjs_middleman: pbjs_preparation
Yilun Chong's avatar
Yilun Chong committed
560
	export OLDDIR=$$(pwd) && cd tmp/protobuf.js && node generate_pbjs_files.js --target static-module --include_path=$$OLDDIR -o generated_bundle_code.js $(benchmarks_protoc_inputs) $(benchmarks_protoc_inputs_benchmark_wrapper) $(benchmarks_protoc_inputs_proto2)
561 562 563 564 565
	touch pbjs_middleman

pbjs-benchmark: pbjs_middleman
	@echo '#! /bin/bash' > pbjs-benchmark
	@echo 'cd tmp/protobuf.js' >> pbjs-benchmark
Yilun Chong's avatar
Yilun Chong committed
566 567
	@echo 'sed -i "s/protobufjs/.\/protobuf.js/g" generated_bundle_code.js' >> pbjs-benchmark
	@echo 'env NODE_PATH=".:./node_modules:$$NODE_PATH" node protobufjs_benchmark.js $$@' >> pbjs-benchmark
568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591
	@chmod +x pbjs-benchmark

pbjs: pbjs-benchmark
	./pbjs-benchmark $(all_data)

############ protobuf.js RULE END #############

############ JS RULE BEGIN #############

js_preparation:
	mkdir -p tmp/js
	oldpwd=$$(pwd) && cd $(top_srcdir)/js && npm install && npm test
	cd tmp/js && npm install benchmark
	cp js/* tmp/js
	touch js_preparation

js_middleman: js_preparation
	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --js_out=import_style=commonjs,binary:$$oldpwd/tmp/js $(benchmarks_protoc_inputs) $(benchmarks_protoc_inputs_benchmark_wrapper) $(benchmarks_protoc_inputs_proto2))
	touch js_middleman

js-benchmark: js_middleman
	@echo '#! /bin/bash' > js-benchmark
	@echo 'export TOP_JS_SRCDIR=$$(cd $(top_srcdir)/js && pwd)' >> js-benchmark
	@echo 'cd tmp/js' >> js-benchmark
Yilun Chong's avatar
Yilun Chong committed
592
	@echo 'env NODE_PATH="$$TOP_JS_SRCDIR:.:./node_modules:$$NODE_PATH" node --max-old-space-size=4096 js_benchmark.js $$@' >> js-benchmark
593 594 595 596 597 598 599
	@chmod +x js-benchmark

js: js-benchmark
	./js-benchmark $(all_data)

############ JS RULE END #############

Yilun Chong's avatar
Yilun Chong committed
600 601 602
MAINTAINERCLEANFILES =                                                     \
	Makefile.in

603 604 605 606 607
CLEANFILES =                                                               \
	$(benchmarks_protoc_outputs)                                             \
	$(benchmarks_protoc_outputs_header)                                      \
	$(benchmarks_protoc_outputs_proto2)                                      \
	$(benchmarks_protoc_outputs_proto2_header)                               \
Yilun Chong's avatar
Yilun Chong committed
608
	initialize_submodule                                                     \
Yilun Chong's avatar
Yilun Chong committed
609
	make_tmp_dir                                                             \
610 611 612
	protoc_middleman                                                         \
	protoc_middleman2                                                        \
	javac_middleman                                                          \
Yilun Chong's avatar
Yilun Chong committed
613 614 615 616
	java-benchmark                                                           \
	python_cpp_proto_library                                                 \
	python-pure-python-benchmark                                             \
	python-cpp-reflection-benchmark                                          \
BSBandme's avatar
BSBandme committed
617 618 619
	python-cpp-generated-code-benchmark                                      \
	go-benchmark                                                             \
	go_protoc_middleman                                                      \
Yilun Chong's avatar
Yilun Chong committed
620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641
	make_tmp_dir_gogo                                                        \
	gogo_proto_middleman                                                     \
	generate_gogo_data                                                       \
	go_no_group_protoc_middleman                                             \
	go_no_group                                                              \
	go-no-group-benchmark                                                    \
	$(cpp_no_group_benchmarks_protoc_outputs_header)                         \
	$(cpp_no_group_benchmarks_protoc_outputs)                                \
	$(cpp_no_group_benchmarks_protoc_outputs_proto2_header)                  \
	$(cpp_no_group_benchmarks_protoc_outputs_proto2)                         \
	generate_all_gogo_benchmark_code                                         \
	generate-gogo-benchmark-code                                             \
	cpp_no_group_protoc_middleman                                            \
	generate_cpp_no_group_benchmark_code                                     \
	generate_gogo_benchmark_code                                             \
	gogofast_protoc_middleman                                                \
	gogofast                                                                 \
	gogofaster_protoc_middleman                                              \
	gogofaster                                                               \
	gogoslick_protoc_middleman                                               \
	gogoslick                                                                \
	gogo-benchmark                                                           \
642 643
	gogo/cpp_no_group/cpp_benchmark.*                                        \
	proto3_proto_middleman                                                   \
Yilun Chong's avatar
Yilun Chong committed
644 645 646
	generate_proto3_data                                                     \
	php-benchmark                                                            \
	php-c-benchmark                                                          \
647 648 649 650 651 652 653
	proto3_middleman_php                                                     \
	pbjs_preparation                                                         \
	pbjs_middleman                                                           \
	pbjs-benchmark                                                           \
	js_preparation                                                           \
	js_middleman                                                             \
	js-benchmark
654 655 656

clean-local:
	-rm -rf tmp/*
657