-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathMakefile
239 lines (197 loc) · 8.06 KB
/
Makefile
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# Broadband Forum IEEE 1905.1/1a stack
#
# Copyright (c) 2017, Broadband Forum
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# Subject to the terms and conditions of this license, each copyright
# holder and contributor hereby grants to those receiving rights under
# this license a perpetual, worldwide, non-exclusive, no-charge,
# royalty-free, irrevocable (except for failure to satisfy the
# conditions of this license) patent license to make, have made, use,
# offer to sell, sell, import, and otherwise transfer this software,
# where such license applies only to those patent claims, already
# acquired or hereafter acquired, licensable by such copyright holder or
# contributor that are necessarily infringed by:
#
# (a) their Contribution(s) (the licensed copyrights of copyright holders
# and non-copyrightable additions of contributors, in source or binary
# form) alone; or
#
# (b) combination of their Contribution(s) with the work of authorship to
# which such Contribution(s) was added by such copyright holder or
# contributor, if, at the time the Contribution is added, such addition
# causes such combination to be necessarily infringed. The patent
# license shall not apply to any other combinations which include the
# Contribution.
#
# Except as expressly stated above, no rights or licenses from any
# copyright holder or contributor is granted under this license, whether
# expressly, by implication, estoppel or otherwise.
#
# DISCLAIMER
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
################################################################################
# Configuration section. Tune the parameters below according to your needs
################################################################################
# Platform dependent CONFIGs
#
# You can either "export PLATFORM=..." (and "FLAVOUR", if needed) before
# calling this Makefile or let "PLATFORM" undefined to use the default value
# (which is "linux")
ifndef PLATFORM
PLATFORM := linux
FLAVOUR := x86_generic
#FLAVOUR := arm_wrt1900acx
#FLAVOUR := x86_windows_mingw
endif
ifeq ($(PLATFORM),linux)
ifeq ($(FLAVOUR), x86_generic)
CC := gcc
#CC := clang
CCFLAGS := -D_FLAVOUR_X86_GENERIC_
LDFLAGS += -lrt -lpthread # For threads
LDFLAGS += -lpcap # For packet capture
LDFLAGS += -lcrypto # For WPS crypto
AL_SUPPORTED := yes
HLE_SUPPORTED := yes
else ifeq ($(FLAVOUR), arm_wrt1900acx)
CC := $(WRT1900_CROSS)gcc
AR := $(WRT1900_CROSS)ar
CCFLAGS := -I $(WRT1900_SYSROOT)/include/
LDFLAGS := -L $(WRT1900_SYSROOT)/lib/
CCFLAGS += -D_FLAVOUR_ARM_WRT1900ACX_
LDFLAGS += -lrt -lpthread # For threads
LDFLAGS += -lpcap # For packet capture
LDFLAGS += -lcrypto # For WPS crypto
AL_SUPPORTED := yes
HLE_SUPPORTED := yes
else ifeq ($(FLAVOUR), x86_windows_mingw)
CC := $(MINGW_CROSS)gcc
LD := $(MINGW_CROSS)ld
AR := $(MINGW_CROSS)ar
CCFLAGS += -I $(MINGW_SYSROOT)/include/
LDFLAGS := -L $(MINGW_SYSROOT)/lib/
CCFLAGS += -D_FLAVOUR_X86_WINDOWS_MINGW_
LDFLAGS += -lws2_32 # Network stuff
AL_SUPPORTED := no
HLE_SUPPORTED := yes
else
$(error "Linux FLAVOUR unknown")
endif
CCFLAGS += -g -O0 -Wall -Werror #-Wextra
CCFLAGS += -D_HOST_IS_LITTLE_ENDIAN_=1 -DMAX_NETWORK_SEGMENT_SIZE=1500
CCFLAGS += -DINT8U="unsigned char"
CCFLAGS += -DINT16U="unsigned short int"
CCFLAGS += -DINT32U="unsigned int"
CCFLAGS += -DINT8S="signed char"
CCFLAGS += -DINT16S="signed short int"
CCFLAGS += -DINT32S="signed int"
CCFLAGS += -D_GNU_SOURCE
else
$(error "'PLATFORM' variable was not set to a valid value")
endif
# Platform independent CONFIGs
#CCFLAGS += -DDO_NOT_ACCEPT_UNAUTHENTICATED_COMMANDS
CCFLAGS += -DSEND_EMPTY_TLVS
CCFLAGS += -DFIX_BROKEN_TLVS
CCFLAGS += -DSPEED_UP_DISCOVERY
#
# These are special flags that change the way the implementation behaves.
# The README file contains more information regarding them.
CCFLAGS += -D_BUILD_NUMBER_=\"$(shell cat version.txt)\"
#
# Version flag to identify the binaries
CCFLAGS += -DREGISTER_EXTENSION_BBF
#
# These are special flags to enable Protocol extensions
################################################################################
# End of configuration section. Do not touch anything from this point on
################################################################################
# Shortcuts for later
#
SRC_FOLDER := $(shell pwd)/src
OUTPUT_FOLDER := $(shell pwd)/output
# "Common" library. Includes platform specific code that is used by both the
# AL and HLE entities (example: "PLATFORM_MALLOC()", "PLATFORM_PRINTF()", ...)
#
COMMON_LIB := $(OUTPUT_FOLDER)/libcommon.a
COMMON_INC := $(SRC_FOLDER)/common/interfaces
# "Factory" library. Includes "pure" 1905 related functions to parse/build 1905
# packets. This library is also used by both AL and HLE but most (if not all) of
# it is platform independent.
#
FACTORY_LIB := $(OUTPUT_FOLDER)/libfactory.a
FACTORY_INC := $(SRC_FOLDER)/factory/interfaces
FACTORY_INC += $(sort $(dir $(wildcard $(SRC_FOLDER)/factory/interfaces/extensions/*/)))
# The actual binaries that we are going to build: one for the AL and another one
# for the HLE entity.
#
AL_EXE := $(OUTPUT_FOLDER)/al_entity
HLE_EXE := $(OUTPUT_FOLDER)/hle_entity
# Compilation will need to create new directories during the process
#
MKDIR := mkdir -p
# Export all these variable to child Makefiles
#
export
################################################################################
# Targets
################################################################################
.PHONY: all
all:
ifeq ($(AL_SUPPORTED),yes)
all: $(AL_EXE)
endif
ifeq ($(HLE_SUPPORTED),yes)
all: $(HLE_EXE)
endif
.PHONY: $(COMMON_LIB)
$(COMMON_LIB):
$(MAKE) -C src/common
.PHONY: $(FACTORY_LIB)
$(FACTORY_LIB):
$(MAKE) -C src/factory
$(AL_EXE): $(COMMON_LIB) $(FACTORY_LIB)
$(MAKE) -C src/al
$(HLE_EXE): $(COMMON_LIB) $(FACTORY_LIB)
$(MAKE) -C src/hle
.PHONY: unit_tests
unit_tests: all
$(MAKE) -C src/factory unit_tests
.PHONY: clean
clean:
$(MAKE) -C src/common clean
$(MAKE) -C src/factory clean
$(MAKE) -C src/al clean
$(MAKE) -C src/hle clean
.PHONY: static-analysis
static-analysis: clean
scan-build $(MAKE) all
cppcheck --enable=warning,style,performance,portability --inconclusive --xml-version=2 --error-exitcode=2 --suppress=memleakOnRealloc:* src
# See https://code.broadband-forum.org/scm/software/tools.git (needs username/password) for
# the licenses/add-license.py tool
.PHONY: update-license
update-license:
add-license.py --exclude=version.txt --replace-summary