summaryrefslogtreecommitdiff
path: root/Makefile
blob: 3b083910d8d1e877e6df12566d02a836de8206ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# Copyright (c) 2011 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.

CXX ?= g++
CXXFLAGS ?= -fno-strict-aliasing -Wall -Wextra -Werror -Wuninitialized
CPPFLAGS ?= -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
AR ?= ar
PKG_CONFIG ?= pkg-config
DBUSXX_XML2CPP = dbusxx-xml2cpp

# libevent, gdk and gtk-2.0 are needed to leverage chrome's MessageLoop
# TODO(cmasone): explore if newer versions of libbase let us avoid this.
BASE_LIBS = -lbase -lchromeos -levent -lpthread -lrt
BASE_INCLUDE_DIRS = -I..
BASE_LIB_DIRS =

LIBS = $(BASE_LIBS)
INCLUDE_DIRS = $(BASE_INCLUDE_DIRS) $(shell $(PKG_CONFIG) --cflags dbus-c++-1 \
	glib-2.0 gdk-2.0 gtk+-2.0)
LIB_DIRS = $(BASE_LIB_DIRS) $(shell $(PKG_CONFIG) --libs dbus-c++-1 glib-2.0 \
	gdk-2.0 gtk+-2.0)

TEST_LIBS = $(BASE_LIBS) -lgmock -lgtest
TEST_INCLUDE_DIRS = $(INCLUDE_DIRS)
TEST_LIB_DIRS = $(LIB_DIRS)

DBUS_ADAPTOR_HEADERS = \
	flimflam-device.h \
	flimflam-manager.h \
	flimflam-service.h

DBUS_PROXY_HEADERS = \
	dhcpcd.h \
	supplicant-bss.h \
	supplicant-interface.h \
	supplicant-network.h \
	supplicant-process.h

DBUS_HEADERS = $(DBUS_ADAPTOR_HEADERS) $(DBUS_PROXY_HEADERS)

SHILL_LIB = shill_lib.a
SHILL_OBJS = \
	dbus_control.o \
	device.o \
	device_dbus_adaptor.o \
	device_info.o \
	dhcp_config.o \
	dhcp_provider.o \
	dhcpcd_proxy.o \
	ethernet.o \
	ethernet_service.o \
	glib_io_handler.o \
	ipconfig.o \
	manager.o \
	manager_dbus_adaptor.o \
	rtnl_handler.o \
	rtnl_listener.o \
	service.o \
	service_dbus_adaptor.o \
	shill_config.o \
	shill_daemon.o \
	shill_event.o \
	wifi.o

SHILL_BIN = shill
SHILL_MAIN_OBJ = shill_main.o

TEST_BIN = shill_unittest
TEST_OBJS = \
	device_info_unittest.o \
	ipconfig_unittest.o \
	manager_unittest.o \
	mock_control.o \
	shill_unittest.o \
	testrunner.o

all: $(SHILL_BIN) $(TEST_BIN)
integration_tests: wifi_integrationtest

$(DBUS_PROXY_HEADERS): %.h: %.xml
	$(DBUSXX_XML2CPP) $< --proxy=$@

$(DBUS_ADAPTOR_HEADERS): %.h: %.xml
	$(DBUSXX_XML2CPP) $< --adaptor=$@

.cc.o:
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_DIRS) -c $< -o $@

$(SHILL_OBJS): $(DBUS_HEADERS)

$(SHILL_LIB): $(SHILL_OBJS)
	$(AR) rcs $@ $^

$(SHILL_BIN): $(SHILL_MAIN_OBJ) $(SHILL_LIB)
	$(CXX) $(CXXFLAGS) $(INCLUDE_DIRS) $(LIB_DIRS) $(LDFLAGS) $^ $(LIBS) \
	-o $@

$(TEST_BIN): CXXFLAGS += -DUNIT_TEST
$(TEST_BIN): $(TEST_OBJS) $(SHILL_LIB)
	$(CXX) $(CXXFLAGS) $(TEST_INCLUDE_DIRS) $(TEST_LIB_DIRS) $(LDFLAGS) $^ \
		$(TEST_LIBS) -o $@

# NB(quiche): statically link gmock, gtest, as test device will not have them
wifi_integrationtest: CXXFLAGS += -DUNIT_TEST
wifi_integrationtest: wifi_integrationtest.o $(SHILL_LIB)
	$(CXX) $(CXXFLAGS) $(TEST_INCLUDE_DIRS) $(TEST_LIB_DIRS) $(LDFLAGS) $^ \
		$(BASE_LIBS) -Wl,-Bstatic -lgmock -lgtest -Wl,-Bdynamic -o $@

clean:
	rm -rf *.o $(DBUS_HEADERS) $(SHILL_BIN) $(SHILL_LIB) $(TEST_BIN)