1ALL += $(TARGET) $(PROGRAMS)
2
3all: $(ALL)
4
5OS:=$(shell uname)
6
7CXXFLAGS += -O2 -W -Wall -I$(DIRLEVEL)
8
9ifeq ($(OS),Linux)
10CXX = g++
11endif
12
13ifeq ($(OS),Darwin)
14CXX ?= c++
15CXXFLAGS += -x objective-c++
16LIBS += -framework Foundation -framework ApplicationServices
17endif
18
19ifeq ($(OS),OpenBSD)
20#CXX = ec++
21CXX = clang++
22endif
23
24ifeq ($(OS),FreeBSD)
25CXX ?= c++
26endif
27
28ifeq ($(OS),NetBSD)
29CXX = clang++
30CXXFLAGS += -I/usr/pkg/include
31LIBS += -Wl,-R/usr/pkg/lib -L/usr/pkg/lib
32endif
33
34CXXFLAGS += -std=c++11
35
36LINK ?= $(CXX)
37
38ifeq ($(STATIC),1)
39LDFLAGS += -static-libstdc++
40endif
41
42ifeq ($(STATIC),2)
43LDFLAGS += -static -static-libstdc++
44endif
45
46ifneq ($(findstring clang,$(CXX)),)
47CXXFLAGS += -Weverything -Wno-c++98-compat -Wno-exit-time-destructors \
48	 -Wno-global-constructors -Wno-padded -Wno-disabled-macro-expansion \
49	 -Wno-float-equal
50endif
51
52ifeq ($(CXX),g++)
53CXXFLAGS += --pedantic -Wextra
54endif
55
56ifeq ($(GNUTLS),1)
57CXXFLAGS += -DUSE_GNUTLS -I/usr/local/include
58LIBS += -L/usr/local/lib -lgnutls
59endif
60ifeq ($(THREADS),1)
61CXXFLAGS += -DUSE_THREADS
62LIBS += -lpthread
63endif
64ifeq ($(LOGLEVEL),)
65LOGLEVEL=info
66endif
67ifeq ($(LOGLEVEL),err)
68CXXFLAGS += -DTASKRUNNER_LOGERR
69endif
70ifeq ($(LOGLEVEL),warn)
71CXXFLAGS += -DTASKRUNNER_LOGWARN -DTASKRUNNER_LOGERR
72endif
73ifeq ($(LOGLEVEL),info)
74CXXFLAGS += -DTASKRUNNER_LOGERR -DTASKRUNNER_LOGWARN -DTASKRUNNER_LOGINFO
75endif
76ifeq ($(LOGLEVEL),dbg)
77CXXFLAGS += -DTASKRUNNER_LOGERR -DTASKRUNNER_LOGWARN
78CXXFLAGS += -DTASKRUNNER_LOGINFO -DTASKRUNNER_LOGDBG
79endif
80ifeq ($(SANDBOXED),1)
81CXXFLAGS += -DIS_SANDBOXED
82endif
83
84SOURCES += \
85	$(DIRLEVEL)/framework/task.cpp \
86	$(DIRLEVEL)/framework/taskconfig.cpp \
87	$(DIRLEVEL)/framework/engine.cpp \
88	$(DIRLEVEL)/framework/eventloop.cpp \
89	$(DIRLEVEL)/framework/socket.cpp \
90	$(DIRLEVEL)/framework/socketconnection.cpp \
91	$(DIRLEVEL)/framework/serversocket.cpp \
92	$(DIRLEVEL)/framework/socketreceiver.cpp \
93	$(DIRLEVEL)/framework/logger.cpp \
94	$(DIRLEVEL)/framework/bridgetask.cpp \
95	$(DIRLEVEL)/framework/synchronousbridge.cpp
96
97OPT_SOURCES += \
98	$(DIRLEVEL)/framework/shortmessageconnection.cpp \
99	$(DIRLEVEL)/framework/threadbridge.cpp \
100	$(DIRLEVEL)/framework/unixdomainbridge.cpp \
101	$(DIRLEVEL)/framework/unixdomainclient.cpp \
102	$(DIRLEVEL)/framework/loadbalancer.cpp
103
104OBJ=$(SOURCES:.cpp=.o)
105EXTRA_OBJ=$(EXTRA_SOURCES:.cpp=.o)
106OPT_OBJ=$(OPT_SOURCES:.cpp=.o)
107
108%.d: %.cpp
109	$(CXX) -MM $(CXXFLAGS) -MT $(@:.d=.o) $< > $@
110
111%.o: %.cpp
112	$(CXX) $(CXXFLAGS) -c $< -o $@
113
114$(TARGET): $(OBJ)
115	$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
116
117$(PROGRAMS):
118	$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
119
120ifneq ($(MAKECMDGOALS),clean)
121include $(SOURCES:.cpp=.d) $(EXTRA_SOURCES:.cpp=.d)
122endif
123
124clean:
125	$(RM) $(CLEAN) $(TARGET) $(OBJ) $(OPT_OBJ) $(EXTRA_OBJ) *~ \
126	  $(SOURCES:.cpp=.d) $(EXTRA_SOURCES:.cpp=.d) $(PROGRAMS)
127