blob: 1c69a8d213c3291c0fbf1a2cfbf0c3c2692c5a99 [file] [log] [blame]
# 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)