# 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.
#
# Top-level Makefile for WiMAX Manager.

include common.mk

PKG_CONFIG ?= pkg-config
DBUSXX_XML2CPP = dbusxx-xml2cpp

# Create a generator for DBus-C++ headers.
GEN_DBUSXX_ADAPTOR(%):
	$(call check_deps)
	$(call old_or_no_timestamp,\
           mkdir -p "$(dir $(TARGET_OR_MEMBER))" && \
           $(DBUSXX_XML2CPP) $< --adaptor=$(TARGET_OR_MEMBER))

GEN_DBUSXX_PROXY(%):
	$(call check_deps)
	$(call old_or_no_timestamp,\
           mkdir -p "$(dir $(TARGET_OR_MEMBER))" && \
           $(DBUSXX_XML2CPP) $< --proxy=$(TARGET_OR_MEMBER)) --sync

PROTOC ?= protoc
BASE_VER ?= 180609
PC_DEPS = dbus-c++-1 glib-2.0 gthread-2.0 gobject-2.0 \
	libchrome-$(BASE_VER) libchromeos-$(BASE_VER)
PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PC_DEPS))
PC_LIBS := $(shell $(PKG_CONFIG) --libs $(PC_DEPS))

CPPFLAGS += -I$(SRC)/.. -I$(OUT) $(PC_CFLAGS)
LDLIBS += -lmetrics -lgdmwimax -lprotobuf -lz $(PC_LIBS)

# TODO(benchan): Generalize and refactor DBus-C++ header generation.
GEN_DBUSXX_ADAPTOR(wimax_manager/dbus_bindings/manager.h): \
	$(SRC)/dbus_bindings/org.chromium.WiMaxManager.xml
clean: CLEAN(wimax_manager/dbus_bindings/manager.h)

GEN_DBUSXX_ADAPTOR(wimax_manager/dbus_bindings/device.h): \
	$(SRC)/dbus_bindings/org.chromium.WiMaxManager.Device.xml
clean: CLEAN(wimax_manager/dbus_bindings/device.h)

GEN_DBUSXX_ADAPTOR(wimax_manager/dbus_bindings/network.h): \
	$(SRC)/dbus_bindings/org.chromium.WiMaxManager.Network.xml
clean: CLEAN(wimax_manager/dbus_bindings/network.h)

GEN_DBUSXX_PROXY(wimax_manager/dbus_bindings/dbus_service.h): \
	$(SRC)/dbus_bindings/org.freedesktop.DBus.xml
clean: CLEAN(wimax_manager/dbus_bindings/dbus_service.h)

GEN_DBUSXX_PROXY(wimax_manager/dbus_bindings/power_manager.h): \
	$(SRC)/dbus_bindings/org.chromium.PowerManager.xml
clean: CLEAN(wimax_manager/dbus_bindings/power_manager.h)

LOCAL_PROTO_BINDINGS_DIR = wimax_manager/proto_bindings
LOCAL_PROTO_BINDINGS = \
	$(LOCAL_PROTO_BINDINGS_DIR)/config.pb.cc \
	$(LOCAL_PROTO_BINDINGS_DIR)/eap_parameters.pb.cc \
	$(LOCAL_PROTO_BINDINGS_DIR)/network_operator.pb.cc
LOCAL_PROTO_PATH = $(SRC)/proto
LOCAL_PROTO_HEADERS = $(patsubst %.cc,%.h,$(LOCAL_PROTO_BINDINGS))
LOCAL_PROTO_OBJS = $(patsubst %.cc,%.o,$(LOCAL_PROTO_BINDINGS))
$(LOCAL_PROTO_HEADERS): %.h: %.cc ;
$(LOCAL_PROTO_BINDINGS): \
	$(LOCAL_PROTO_BINDINGS_DIR)/%.pb.cc: $(LOCAL_PROTO_PATH)/%.proto
	$(call auto_mkdir,$@)
	$(PROTOC) --proto_path=$(LOCAL_PROTO_PATH) \
		--cpp_out=$(LOCAL_PROTO_BINDINGS_DIR) $<
clean: CLEAN($(LOCAL_PROTO_BINDINGS))
clean: CLEAN($(LOCAL_PROTO_HEADERS))
clean: CLEAN($(LOCAL_PROTO_OBJS))
$(eval $(call add_object_rules,$(LOCAL_PROTO_OBJS),CXX,cc))

SYSTEM_API_PROTO_BINDINGS = power_manager/suspend.pb.cc
SYSTEM_API_PROTO_PATH = $(SYSROOT)/usr/include/chromeos/dbus
SYSTEM_API_PROTO_HEADERS = $(patsubst %.cc,%.h,$(SYSTEM_API_PROTO_BINDINGS))
SYSTEM_API_PROTO_OBJS = $(patsubst %.cc,%.o,$(SYSTEM_API_PROTO_BINDINGS))
$(SYSTEM_API_PROTO_HEADERS): %.h: %.cc ;
$(SYSTEM_API_PROTO_BINDINGS): %.pb.cc: $(SYSTEM_API_PROTO_PATH)/%.proto
	$(PROTOC) --proto_path=$(SYSTEM_API_PROTO_PATH) --cpp_out=. $<
clean: CLEAN($(SYSTEM_API_PROTO_BINDINGS))
clean: CLEAN($(SYSTEM_API_PROTO_HEADERS))
clean: CLEAN($(SYSTEM_API_PROTO_OBJS))
$(eval $(call add_object_rules,$(SYSTEM_API_PROTO_OBJS),CXX,cc))

# Require DBus and protobuf binding headers to be generated first.
$(patsubst %.o,%.o.depends,$(CXX_OBJECTS)): \
	GEN_DBUSXX_ADAPTOR(wimax_manager/dbus_bindings/device.h) \
	GEN_DBUSXX_ADAPTOR(wimax_manager/dbus_bindings/manager.h) \
	GEN_DBUSXX_ADAPTOR(wimax_manager/dbus_bindings/network.h) \
	GEN_DBUSXX_PROXY(wimax_manager/dbus_bindings/dbus_service.h) \
	GEN_DBUSXX_PROXY(wimax_manager/dbus_bindings/power_manager.h) \
	$(LOCAL_PROTO_HEADERS) $(SYSTEM_API_PROTO_HEADERS)

CXX_BINARY(wimax-manager): \
	$(filter-out testrunner.o %_unittest.o,$(CXX_OBJECTS)) \
	$(LOCAL_PROTO_OBJS) $(SYSTEM_API_PROTO_OBJS)
clean: CLEAN(wimax-manager)

testrunner: \
	$(filter-out %main.o,$(CXX_OBJECTS)) \
	$(LOCAL_PROTO_OBJS) $(SYSTEM_API_PROTO_OBJS)
	$(call cxx_binary, -lgtest -lgmock)
clean: CLEAN(testrunner)

default: CXX_BINARY(wimax-manager)

all: default

tests: TEST(testrunner)
