# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# TODO(asharif): Convert this to common.mk.
CXX ?= g++

BASE_VER ?= 369476
PKG_CONFIG ?= pkg-config
PC_DEPS = openssl protobuf
PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PC_DEPS))
PC_LIBS := $(shell $(PKG_CONFIG) --libs $(PC_DEPS))

CXXFLAGS += -std=c++11 -g -Wall -Werror -Wall -Wno-error
CPPFLAGS += -Imybase -Icompat/ext -I. -I.. $(PC_CFLAGS)
LDLIBS += -lpthread -lgcov -lelf $(PC_LIBS)

MAIN_SOURCES = quipper.cc perf_converter.cc
PROGRAMS = $(MAIN_SOURCES:.cc=)

LIBRARY_SOURCES = \
	address_mapper.cc binary_data_utils.cc buffer_reader.cc buffer_writer.cc \
	conversion_utils.cc compat/ext/detail/log_level.cc data_reader.cc \
	data_writer.cc dso.cc file_reader.cc file_utils.cc \
	huge_pages_mapping_deducer.cc \
	mybase/base/logging.cc perf_option_parser.cc perf_data_utils.cc \
	perf_parser.cc perf_protobuf_io.cc perf_reader.cc perf_recorder.cc \
	perf_serializer.cc perf_stat_parser.cc run_command.cc \
	sample_info_reader.cc scoped_temp_path.cc string_utils.cc
GENERATED_SOURCES = perf_data.pb.cc perf_stat.pb.cc
GENERATED_HEADERS = $(GENERATED_SOURCES:.pb.cc=.pb.h)

COMMON_SOURCES = $(LIBRARY_SOURCES) $(GENERATED_SOURCES)
COMMON_OBJECTS = $(COMMON_SOURCES:.cc=.o)
TEST_COMMON_SOURCES = \
	dso_test_utils.cc perf_test_files.cc test_perf_data.cc test_utils.cc
TEST_COMMON_OBJECTS = $(TEST_COMMON_SOURCES:.cc=.o)

INTEGRATION_TEST_SOURCES = conversion_utils_test.cc
PERF_RECORDER_TEST_SOURCES = perf_recorder_test.cc
UNIT_TEST_SOURCES = \
	address_mapper_test.cc binary_data_utils_test.cc buffer_reader_test.cc \
	buffer_writer_test.cc file_reader_test.cc \
	huge_pages_mapping_deducer_test.cc perf_data_utils_test.cc \
	perf_option_parser_test.cc perf_parser_test.cc perf_reader_test.cc \
	perf_serializer_test.cc perf_stat_parser_test.cc run_command_test.cc \
	sample_info_reader_test.cc scoped_temp_path_test.cc
TEST_SOURCES = $(INTEGRATION_TEST_SOURCES) $(PERF_RECORDER_TEST_SOURCES) \
	$(UNIT_TEST_SOURCES) $(TEST_COMMON_SOURCES) test_runner.cc
TEST_OBJECTS = $(TEST_SOURCES:.cc=.o)

ALL_SOURCES = $(MAIN_SOURCES) $(COMMON_SOURCES) $(TEST_SOURCES)

all: $(PROGRAMS) $(TESTS)
	@echo Sources compiled!

ifneq ($(MAKECMDGOALS),clean)
  -include $(ALL_SOURCES:.cc=.d)
endif

# Taken from:
# http://www.gnu.org/software/make/manual/make.html#Automatic-Prerequisites
%.d: %.cc $(GENERATED_HEADERS)
	@set -e; rm -f $@; \
	$(CXX) -MM $(CPPFLAGS) $(CXXFLAGS) $< > $@.$$$$; \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

# Rule for compiling protobufs.
%.pb.h %.pb.cc: %.proto
	protoc --cpp_out=. $^

# Do not remove protobuf headers that were generated as dependencies of other
# modules.
.SECONDARY: $(GENERATED_HEADERS)

$(PROGRAMS): %: %.o $(COMMON_OBJECTS)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)

INTEGRATION_TEST_OBJECTS = $(INTEGRATION_TEST_SOURCES:.cc=.o) test_runner.o
integration_tests: LDLIBS += -lgtest
integration_tests: %: $(COMMON_OBJECTS) $(TEST_COMMON_OBJECTS) \
		      $(INTEGRATION_TEST_OBJECTS)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)

PERF_RECORDER_TEST_OBJECTS = $(PERF_RECORDER_TEST_SOURCES:.cc=.o)
perf_recorder_test: LDLIBS += -lgtest
perf_recorder_test: %: $(COMMON_OBJECTS) $(TEST_COMMON_OBJECTS) \
		       $(PERF_RECORDER_TEST_OBJECTS)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)

UNIT_TEST_OBJECTS = $(UNIT_TEST_SOURCES:.cc=.o) test_runner.o
unit_tests: LDLIBS += -lgtest -lcap
unit_tests: %: $(COMMON_OBJECTS) $(TEST_COMMON_OBJECTS) $(UNIT_TEST_OBJECTS)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)

# With large perf.data files, the tests will spew a lot of logging.  The
# following calls will pipe the logging to a log file.  To see test logging,
# build with 'FEATURES="test noclean"' and go to the build directory.
check: $(TESTS)
	for test in $(TESTS); do \
		case $$test in \
		perf_*_test) \
			./$$test 2> ./$$test.stderr.log && continue; \
			echo "See $$test.stderr.log for errors" \
			;; \
		*) \
			./$$test && continue \
			;; \
		esac; \
		exit 1; \
	done

clean:
	rm -f *.o *.d *.d.* *.a $(PROGRAMS) $(TESTS) $(GENERATED_SOURCES) \
		$(GENERATED_HEADERS)
