summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile35
-rwxr-xr-xgen-deps.sh17
3 files changed, 41 insertions, 12 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a3493ef
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*.s??
diff --git a/Makefile b/Makefile
index a9d9a5f..f61d85b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,27 +1,38 @@
+# Function to expand a wildcard pattern recursively.
+rwildcard=$(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)$(filter $(subst *,%,$2),$d)))
+
.PHONY: all clean
CC=gcc
CXX=g++
CFLAGS=-std=c99
INCLUDE=-Idescriptor -Isrc -Itests -I.
CPPFLAGS=-O3 -fomit-frame-pointer -Wall -Wextra -g -DNDEBUG $(INCLUDE)
-OBJ=src/upb_parse.o src/upb_table.o src/upb_msg.o src/upb_enum.o src/upb_context.o \
- src/upb_string.o src/upb_text.o src/upb_serialize.o descriptor/descriptor.o
-SRC=src/*.c src/*.h descriptor/*.c descriptor/*.h tests/*.c tests/*.h tools/*.c
-ALL=$(OBJ) src/libupb.a tests/test_table tests/tests tools/upbc benchmark/benchmark
+
+ALL=deps $(OBJ) src/libupb.a tests/test_table tests/tests tools/upbc
all: $(ALL)
clean:
- rm -f $(ALL) benchmark/google_messages.proto.pb benchmark/google_messages.pb.*
-
-test: tests/tests
- ./tests/tests
+ rm -f $(call rwildcard,,*.o) $(ALL) benchmark/google_messages.proto.pb benchmark/google_messages.pb.* benchmark/b_*
+# The core library (src/libupb.a)
+OBJ=src/upb_parse.o src/upb_table.o src/upb_msg.o src/upb_enum.o src/upb_context.o \
+ src/upb_string.o src/upb_text.o src/upb_serialize.o descriptor/descriptor.o
+SRC=$(call rwildcard,,*.c)
+HEADERS=$(call rwildcard,,*.h)
src/libupb.a: $(OBJ)
ar rcs src/libupb.a $(OBJ)
+
+# Tests
+test: tests/tests
+ ./tests/tests
tests/test_table: src/libupb.a
tests/tests: src/libupb.a
+
+# Tools
tools/upbc: src/libupb.a
-benchmark/benchmark: src/libupb.a benchmark/google_messages.pb.h benchmark/google_messages.pb.o benchmark/benchmark.o
- $(CXX) $(CPPFLAGS) -o benchmark/benchmark benchmark/google_messages.pb.o benchmark/benchmark.cc src/libupb.a -lm -lprotobuf -lpthread
-benchmark/google_messages.pb.cc benchmark/google_messages.pb.h benchmark/google_messages.pb: benchmark/google_messages.proto
- protoc benchmark/google_messages.proto --cpp_out=. -obenchmark/google_messages.proto.pb
+
+# Benchmarks
+
+-include deps
+deps: $(SRC) $(HEADERS) gen-deps.sh Makefile
+ ./gen-deps.sh $(SRC)
diff --git a/gen-deps.sh b/gen-deps.sh
new file mode 100755
index 0000000..6f7b4af
--- /dev/null
+++ b/gen-deps.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+# This script wraps gcc -MM, which unhelpfully strips the directory
+# off of the input filename. In other words, if you run:
+#
+# $ gcc -MM src/upb_parse.c
+#
+# ...the emitted dependency information looks like:
+#
+# upb_parse.o: src/upb_parse.h [...]
+#
+# Since upb_parse.o is actually in src, the dependency information is
+# not used. To remedy this, we use the -MT flag (see gcc docs).
+
+rm -f deps
+for file in $@; do
+ gcc -MM $file -MT ${file%.*}.o -Idescriptor -Isrc -I. >> deps
+done
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback