Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Makefile is much improved ("make deps" works again, etc).

  • Loading branch information...
commit 2aaea5390a841e2682a318746e90aebbe8a955b9 1 parent f03c8bd
Joshua Haberman authored
Showing with 41 additions and 12 deletions.
  1. +1 −0  .gitignore
  2. +23 −12 Makefile
  3. +17 −0 gen-deps.sh
View
1  .gitignore
@@ -0,0 +1 @@
+*.s??
View
35 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)
View
17 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
Please sign in to comment.
Something went wrong with that request. Please try again.