diff options
author | jimblandy@gmail.com <jimblandy@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2009-12-15 16:28:43 +0000 |
---|---|---|
committer | jimblandy@gmail.com <jimblandy@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2009-12-15 16:28:43 +0000 |
commit | 1c9c0568e097e8b3cfe6e1c4f954d0877fb03711 (patch) | |
tree | cdc44b0a3a339f5340ce939d4eec55d766e611ca /src/tools/linux | |
parent | Mozilla bug 532713 - OS X client code doesn't decoded extended family ids in ... (diff) | |
download | breakpad-1c9c0568e097e8b3cfe6e1c4f954d0877fb03711.tar.xz |
Issue 39001: Breakpad Linux dumper: Refactor Makefile.
Use GNU Make features to make the dumper, unit tests, and maintenance
targets more independent, so I get fewer conflicts as I work on
different parts of the patch series.
In particular:
- Provide targets to run tests and produce test coverage reports.
- Gather C and C++ build rules in one place.
- Avoid variables that list object files, as pattern rules can compute
these values directly from the dependencies.
- Use VPATH to find sources in other directories.
a=jimb, r=nealsid
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@441 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/tools/linux')
-rw-r--r-- | src/tools/linux/dump_syms/Makefile | 147 |
1 files changed, 123 insertions, 24 deletions
diff --git a/src/tools/linux/dump_syms/Makefile b/src/tools/linux/dump_syms/Makefile index 289dc4d8..61aee177 100644 --- a/src/tools/linux/dump_syms/Makefile +++ b/src/tools/linux/dump_syms/Makefile @@ -1,37 +1,136 @@ -CXX=g++ -CC=gcc +### Variables that can be overridden on the command line. +CC = gcc +CXX = g++ +CPPFLAGS = -DNDEBUG +CXXFLAGS = -g3 -O2 -Wall -m32 -CPPFLAGS=-DNDEBUG -CXXFLAGS=-g3 -O2 -Wall -m32 +# To produce test coverage reports: +# 1) Build all .o files and executables without optimization and with +# 'COVERAGE=1' on the make command line. +# 2) Run the tests. +# 3) Do 'make coverage'. +# All in one command: +# $ make CFLAGS='-O0' CXXFLAGS='-O0' COVERAGE=1 clean check coverage +COVERAGE= +# Build all executables. +all:: -# These flags are necessary to compile correctly; the 'override' -# command makes sure these are added even if the user sets CPPFLAGS on -# the command line. -override CPPFLAGS+=-I../../.. -D_REENTRANT +# Delete all generated files: executables, object files, test coverage +# reports, etc. +clean:: -.PHONY:all clean +# Run all tests. +# You can run a specific test FOO with the command: 'make check-FOO'. +check: -BIN=dump_syms +# Generate coverage reports for the execution that has taken place +# since the coverage data files were last deleted. Only files that +# have been added to COVERAGE_SOURCES (see below) get reported on. +coverage: -all:$(BIN) +# Reset all coverage counts. When coverage is enabled, each time you +# run the program, it adds its execution counts into the profiling +# data files in the build directory. 'make coverage-reset' deletes +# those files, so the counts reported by 'make coverage' start from +# zero again. Note that 'make clean' does this automatically. +coverage-reset: -DUMP_OBJ=dump_symbols.o dump_syms.o file_id.o stabs_reader.o module.o +.PHONY: all clean check coverage coverage-reset -dump_syms:$(DUMP_OBJ) - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $^ -dump_symbols.o:../../../common/linux/dump_symbols.cc - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $^ +### Variables used internally by this Makefile. -stabs_reader.o:../../../common/linux/stabs_reader.cc - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $^ +# The top of the breakpad source tree. +SRC = ../../.. -module.o:../../../common/linux/module.cc - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $^ +# A list of the executables that we should use the C++ compiler to +# link. GNU make's default executable-from-object rule uses $(CC), +# which doesn't include libstdc++, and perhaps does some other things +# wrong as well. Every executable listed in this variable uses the +# pattern rule provided at the bottom, which links all the +# dependencies using $(CXX). Value accumulated throughout the file. +CPP_EXECUTABLES = -file_id.o:../../../common/linux/file_id.cc - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $^ +# Source files whose coverage we are interested in. Value accumulated +# throughout the file. +COVERAGE_SOURCES = -clean: - rm -f $(BIN) $(DUMP_OBJ) + +### dump_syms: a program to produce Breakpad symbol files from the +### debugging information in Linux executables. +all:: dump_syms +dump_syms: \ + dump_syms.o \ + dump_symbols.o \ + file_id.o \ + module.o \ + stabs_reader.o \ + $(empty) +CPP_EXECUTABLES += dump_syms +clean:: + rm -f dump_syms + +dump_syms.o: dump_syms.cc + +VPATH += $(SRC)/common/linux +dump_symbols.o: dump_symbols.cc +file_id.o: file_id.cc +module.o: module.cc +stabs_reader.o: stabs_reader.cc + + +### Generic compilation rules. + +# Link C++ executables using the C++ compiler; see CPP_EXECUTABLES above. +$(CPP_EXECUTABLES): %: %.o + $(CXX) $(CXXFLAGS) $(COVERAGE_LDFLAGS) $(LDFLAGS) -o $@ $^ + +# These flags are required for breakpad sources to compile correctly. +BREAKPAD_CPPFLAGS = -I$(SRC) -D_REENTRANT + +%.o: %.cc + $(CXX) -c $^ -o $@ $(CPPFLAGS) $(BREAKPAD_CPPFLAGS) $(CXXFLAGS) +%.o: %.c + $(CC) -c $^ -o $@ $(CPPFLAGS) $(BREAKPAD_CPPFLAGS) $(CFLAGS) + +clean:: + rm -f *.o core + +### Generic testing rules. + +### To define a test, make the 'check' target depend on a particular +### target 'check-FOO' that runs your test, where FOO is the name of +### the test executable, or something else people will expect. +### +### This pattern rule provides commands for 'check-FOO' that are +### appropriate for Google C++ Testing Framework test programs. But +### you can provide your own commands. +check-%: % + srcdir=$(SRC) ./$< $(TEST_ARGS) + + +### Generic coverage reporting rules. +coverage: + gcov --branch-probabilities $(COVERAGE_SOURCES) + +coverage-reset: + rm -f *.gcda + +# If code coverage is enabled, pass the appropriate coverage flags to +# the compiler for the sources we care about. +ifdef COVERAGE + +COVERAGE_C_SOURCES = $(filter %.c,$(COVERAGE_SOURCES)) +$(COVERAGE_C_SOURCES:.c=.o): override CFLAGS += --coverage + +COVERAGE_CXX_SOURCES = $(filter %.cc,$(COVERAGE_SOURCES)) +$(COVERAGE_CXX_SOURCES:.cc=.o): override CXXFLAGS += --coverage + +COVERAGE_LDFLAGS = --coverage + +endif + +clean:: coverage-reset +clean:: + rm -f *.gcno *.gcov |