blob: a260f1dfa610879c0dbd85c6e4a94e63929ea8f0 [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.
PKG_CONFIG ?= pkg-config
BASE_VER ?= 180609
PC_DEPS = dbus-c++-1 gobject-2.0 gthread-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 += $(PC_CFLAGS) $($(*F)_CPPFLAGS)
CXXFLAGS += -Wall -Werror -g -O0 $($(*F)_CXXFLAGS)
LDLIBS = $(PC_LIBS) -lgflags -ldl -lmetrics -lminijail
LDLIBS_UNITTEST = $(LDLIBS) -lgtest
LDFLAGS_CROMO = -Wl,--dynamic-list-cpp-typeinfo,--dynamic-list=cromo.ver
DBUSXX_XML2CPP = dbusxx-xml2cpp
CROMO = cromo
# We keep utility functions in libcromo so plugin tests can use them
# without pulling in all of cromo
LIBCROMO = libcromo.a
PLUGINS = dummy_modem.so
LIBDIR = /usr/lib
PLUGINDIR ?= $(LIBDIR)/cromo/plugins
DBUSDATADIR ?= /etc/dbus-1/system.d
DBUSCONFIGFILE ?= org.chromium.ModemManager.conf
DBUSIFACEDIR ?= $(ROOT)/usr/share/dbus-1/interfaces
plugin_manager_CPPFLAGS=-DPLUGINDIR=\"$(PLUGINDIR)\"
dummy_modem_CPPFLAGS = -fPIC
dummy_modem_handler_CPPFLAGS = -fPIC
XMLFILES := mm-mobile-error.xml \
mm-serial-error.xml \
org.freedesktop.ModemManager.Modem.xml \
org.freedesktop.ModemManager.Modem.Cdma.xml \
org.freedesktop.ModemManager.Modem.Firmware.xml \
org.freedesktop.ModemManager.Modem.Gsm.xml \
org.freedesktop.ModemManager.Modem.Gsm.Card.xml \
org.freedesktop.ModemManager.Modem.Gsm.Contacts.xml \
org.freedesktop.ModemManager.Modem.Gsm.Network.xml \
org.freedesktop.ModemManager.Modem.Gsm.SMS.xml \
org.freedesktop.ModemManager.Modem.Gsm.Ussd.xml \
org.freedesktop.ModemManager.Modem.Simple.xml \
org.freedesktop.ModemManager.xml
# Interfaces we pull from our own source tree instead of the system. The
# ModemManager interface uses a method (MmPropertiesChanged) that doesn't appear
# on the real org.freedesktop.DBus.Properties, so use a hacked local copy of
# that interface instead of the system one.
# TODO(ellyjones): Undo this hack, probably by making modemmanager and cromo use
# PropertiesChanged instead of MmPropertiesChanged.
LOCALXMLFILES := org.freedesktop.DBus.Properties.xml
XMLPREFIX := \\(org.freedesktop.ModemManager\\|org.freedesktop.DBus\\)
EMPTY := manager
GLUE_HEADERS := $(foreach XML,$(XMLFILES) $(LOCALXMLFILES), \
$(shell ./iface2header "$(XMLPREFIX)" \
$(EMPTY) \
$(XML)))
# TODO(rochberg):
# Double-hack alert: The first hack is the existence of libcromo.a The
# second hack is that if we link against libcromo.a, our current
# method for exporting symbols does not export symbols for libraries.
# So we link against utilities.o, but external tests link against
# libcromo (which is currently just utilities.o)
SRCS = carrier.cc \
cromo_server.cc \
hooktable.cc \
main.cc \
modem_handler.cc \
plugin_manager.cc \
sandbox.cc \
sms_message.cc \
sms_cache.cc \
syslog_helper.cc \
utilities.cc
OBJS = $(SRCS:.cc=.o)
TARGETS = $(CROMO) $(LIBCROMO) $(PLUGINS)
TESTS = cromo_server_unittest sms_message_unittest sms_cache_unittest \
utilities_unittest
INSTALL_TARGETS = install-programs install-libs install-headers
ifdef INSTALL_TESTS
TARGETS += $(TESTS)
INSTALL_TARGETS += install-tests
endif
dummy_SRCS = dummy_modem_handler.cc \
dummy_modem.cc
dummy_OBJS = $(dummy_SRCS:.cc=.o)
all : $(TARGETS)
%unittest :
$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ $(LDLIBS_UNITTEST) -o $@
# We need to disable unused variable warnings for sms*unittes for gcc 4.7.
# gTest framework defines _testinfo for every test case, which is not usually
# used by a test case, which causes unused variable warnings.
sms%unittest.o: sms%unittest.cc
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -Wno-unused-variable -c $^ -o $@
system-glue: $(patsubst %,$(DBUSIFACEDIR)/%,$(XMLFILES))
@for xml in $(XMLFILES); do \
hdr=$$(./iface2header "$(XMLPREFIX)" $(EMPTY) $$xml); \
echo "xml2cpp $$xml -> $$hdr"; \
$(DBUSXX_XML2CPP) $(DBUSIFACEDIR)/$$xml --adaptor=$$hdr; \
done
local-glue: $(patsubst %,local-xml/%,$(LOCALXMLFILES))
@for xml in $(LOCALXMLFILES); do \
hdr=$$(./iface2header "$(XMLPREFIX)" $(EMPTY) $$xml); \
echo "xml2cpp[l] $$xml -> $$hdr"; \
$(DBUSXX_XML2CPP) local-xml/$$xml --adaptor=$$hdr; \
done
glue: system-glue local-glue
$(OBJS) cromo_server_unittest.o: glue
$(dummy_OBJS): glue
$(CROMO): $(OBJS) $(LIBCROMO) cromo.ver
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(LDFLAGS_CROMO) $(OBJS) $(LDLIBS) -o $@
$(LIBCROMO): cromo_server.o hooktable.o utilities.o \
modem_handler.o sms_message.o sms_cache.o syslog_helper.o
$(AR) r $@ $^
cromo_server_unittest: carrier.o cromo_server_unittest.o cromo_server.o \
hooktable.o syslog_helper.o
utilities_unittest: utilities_unittest.o $(LIBCROMO)
sms_message_unittest: sms_message_unittest.o $(LIBCROMO)
sms_cache_unittest: sms_cache_unittest.o $(LIBCROMO)
dummy_modem.so: $(dummy_OBJS)
$(CXX) -shared -o $@ $^
EXPORT_HEADERS=$(GLUE_HEADERS) modem_handler.h cromo_server.h plugin.h \
hooktable.h carrier.h utilities.h modem.h \
sms_message.h sms_cache.h
install-headers: glue
install -d $(DESTDIR)/usr/include/cromo
install -t $(DESTDIR)/usr/include/cromo $(EXPORT_HEADERS)
install-programs:
install -d $(DESTDIR)$(PLUGINDIR) \
$(DESTDIR)$(DBUSDATADIR) \
$(DESTDIR)/usr/sbin \
$(DESTDIR)/usr/bin
install -t $(DESTDIR)/usr/sbin $(CROMO)
install -t $(DESTDIR)$(DBUSDATADIR) -m 0644 $(DBUSCONFIGFILE)
install -t $(DESTDIR)/usr/bin mm-cromo-command
tests: $(TESTS)
install-tests: $(TESTS)
install -d $(DESTDIR)/usr/bin
install -t $(DESTDIR)/usr/bin $^
install-libs: $(LIBCROMO)
install -d $(DESTDIR)$(LIBDIR)
install -t $(DESTDIR)$(LIBDIR) $(LIBCROMO)
install: $(INSTALL_TARGETS)
.PHONY: clean
clean:
$(RM) $(CROMO) *.so *.o *glue.h .*.d core a.out
# Boilerplate for automatically calculating dependencies
#.%.d: %.cc
# $(CXX) -MM $(CPPFLAGS) $(CXXFLAGS) -MF $@ -MT $(<:.cc=.o) -MT $@ $<
#depfiles = $(patsubst %.cc,.%.d,$(SRCS)))
#$(depfiles): $(GLUE_HEADERS)
#ifneq ($(MAKECMDGOALS),clean)
#include $(depfiles)
#endif