• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2#
3#  Copyright (c) 2020, The OpenThread Authors.
4#  All rights reserved.
5#
6#  Redistribution and use in source and binary forms, with or without
7#  modification, are permitted provided that the following conditions are met:
8#  1. Redistributions of source code must retain the above copyright
9#     notice, this list of conditions and the following disclaimer.
10#  2. Redistributions in binary form must reproduce the above copyright
11#     notice, this list of conditions and the following disclaimer in the
12#     documentation and/or other materials provided with the distribution.
13#  3. Neither the name of the copyright holder nor the
14#     names of its contributors may be used to endorse or promote products
15#     derived from this software without specific prior written permission.
16#
17#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27#  POSSIBILITY OF SUCH DAMAGE.
28#
29
30set -euxo pipefail
31
32readonly OT_BUILD_JOBS=$(getconf _NPROCESSORS_ONLN)
33
34reset_source()
35{
36    rm -rf build output tmp
37}
38
39build_all_features()
40{
41    local options=(
42        "-DOPENTHREAD_CONFIG_ANNOUNCE_SENDER_ENABLE=1"
43        "-DOPENTHREAD_CONFIG_ANYCAST_LOCATOR=1"
44        "-DOPENTHREAD_CONFIG_BORDER_AGENT_ENABLE=1"
45        "-DOPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE=1"
46        "-DOPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE=1"
47        "-DOPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE=1"
48        "-DOPENTHREAD_CONFIG_CHANNEL_MONITOR_ENABLE=1"
49        "-DOPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE=1"
50        "-DOPENTHREAD_CONFIG_COAP_API_ENABLE=1"
51        "-DOPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE=1"
52        "-DOPENTHREAD_CONFIG_COMMISSIONER_ENABLE=1"
53        "-DOPENTHREAD_CONFIG_DATASET_UPDATER_ENABLE=1"
54        "-DOPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE=1"
55        "-DOPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE=1"
56        "-DOPENTHREAD_CONFIG_DIAG_ENABLE=1"
57        "-DOPENTHREAD_CONFIG_DNS_CLIENT_ENABLE=1"
58        "-DOPENTHREAD_CONFIG_DNS_DSO_ENABLE=1"
59        "-DOPENTHREAD_CONFIG_ECDSA_ENABLE=1"
60        "-DOPENTHREAD_CONFIG_HEAP_EXTERNAL_ENABLE=1"
61        "-DOPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE=1"
62        "-DOPENTHREAD_CONFIG_IP6_FRAGMENTATION_ENABLE=1"
63        "-DOPENTHREAD_CONFIG_IP6_SLAAC_ENABLE=1"
64        "-DOPENTHREAD_CONFIG_JAM_DETECTION_ENABLE=1"
65        "-DOPENTHREAD_CONFIG_JOINER_ENABLE=1"
66        "-DOPENTHREAD_CONFIG_LEGACY_ENABLE=1"
67        "-DOPENTHREAD_CONFIG_LINK_RAW_ENABLE=1"
68        "-DOPENTHREAD_CONFIG_LOG_LEVEL_DYNAMIC_ENABLE=1"
69        "-DOPENTHREAD_CONFIG_MAC_BEACON_RSP_WHEN_JOINABLE_ENABLE=1"
70        "-DOPENTHREAD_CONFIG_MAC_FILTER_ENABLE=1"
71        "-DOPENTHREAD_CONFIG_MAC_RETRY_SUCCESS_HISTOGRAM_ENABLE=1"
72        "-DOPENTHREAD_CONFIG_MAC_SOFTWARE_ACK_TIMEOUT_ENABLE=1"
73        "-DOPENTHREAD_CONFIG_MAC_SOFTWARE_CSMA_BACKOFF_ENABLE=1"
74        "-DOPENTHREAD_CONFIG_MAC_SOFTWARE_ENERGY_SCAN_ENABLE=1"
75        "-DOPENTHREAD_CONFIG_MAC_SOFTWARE_RETRANSMIT_ENABLE=1"
76        "-DOPENTHREAD_CONFIG_MAC_SOFTWARE_TX_SECURITY_ENABLE=1"
77        "-DOPENTHREAD_CONFIG_MLE_ATTACH_BACKOFF_ENABLE=1"
78        "-DOPENTHREAD_CONFIG_MLE_STEERING_DATA_SET_OOB_ENABLE=1"
79        "-DOPENTHREAD_CONFIG_MPL_DYNAMIC_INTERVAL_ENABLE"
80        "-DOPENTHREAD_CONFIG_NCP_HDLC_ENABLE=1"
81        "-DOPENTHREAD_CONFIG_NCP_SPI_ENABLE=1"
82        "-DOPENTHREAD_CONFIG_PING_SENDER_ENABLE=1"
83        "-DOPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE=1"
84        "-DOPENTHREAD_CONFIG_PLATFORM_RADIO_COEX_ENABLE=1"
85        "-DOPENTHREAD_CONFIG_PLATFORM_USEC_TIMER_ENABLE=1"
86        "-DOPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE=1"
87        "-DOPENTHREAD_CONFIG_SNTP_CLIENT_ENABLE=1"
88        "-DOPENTHREAD_CONFIG_SRP_CLIENT_ENABLE=1"
89        "-DOPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE=1"
90        "-DOPENTHREAD_CONFIG_TMF_NETWORK_DIAG_MTD_ENABLE=1"
91        "-DOPENTHREAD_CONFIG_UDP_FORWARD_ENABLE=1"
92        "-DOPENTHREAD_CONFIG_MAC_BEACON_PAYLOAD_PARSING_ENABLE=1"
93        "-DOPENTHREAD_CONFIG_MAC_OUTGOING_BEACON_PAYLOAD_ENABLE=1"
94    )
95
96    local options_1_3=(
97        "-DOPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE=1"
98        "-DOPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE=1"
99        "-DOPENTHREAD_CONFIG_DUA_ENABLE=1"
100        "-DOPENTHREAD_CONFIG_MLR_ENABLE=1"
101    )
102
103    # Build Thread 1.1 with full features and no log
104    export CPPFLAGS="${options[*]}"
105    reset_source
106    make -f examples/Makefile-simulation THREAD_VERSION=1.1 LOG_OUTPUT=NONE
107
108    # Build Thread 1.1 with full features and full logs
109    export CPPFLAGS="${options[*]}"
110    reset_source
111    make -f examples/Makefile-simulation THREAD_VERSION=1.1 FULL_LOGS=1
112
113    # Build Thread 1.3 with full features and logs
114    export CPPFLAGS="${options[*]} ${options_1_3[*]}"
115    reset_source
116    make -f examples/Makefile-simulation THREAD_VERSION=1.3 LOG_OUTPUT=NONE
117
118    # Build Thread 1.3 with full features and full logs
119    export CPPFLAGS="${options[*]} ${options_1_3[*]}"
120    reset_source
121    make -f examples/Makefile-simulation THREAD_VERSION=1.3 FULL_LOGS=1
122
123    # Build Thread 1.1 with ASSERT disabled
124    export CPPFLAGS="${options[*]} -DOPENTHREAD_CONFIG_ASSERT_ENABLE=0"
125    reset_source
126    make -f examples/Makefile-simulation THREAD_VERSION=1.1
127
128    # Build Thread 1.1 OTNS
129    export CPPFLAGS="${options[*]}"
130    reset_source
131    make -f examples/Makefile-simulation THREAD_VERSION=1.1 OTNS=1
132
133    # Build Thread 1.3 with external heap and msg pool using heap
134    export CPPFLAGS="${options[*]} ${options_1_3[*]} -DOPENTHREAD_CONFIG_MESSAGE_USE_HEAP_ENABLE=1"
135    reset_source
136    make -f examples/Makefile-simulation THREAD_VERSION=1.3
137}
138
139build_nest_common()
140{
141    local options=(
142        "-DOPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE=1"
143        "-DOPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE=1"
144        "-DOPENTHREAD_CONFIG_CHANNEL_MONITOR_ENABLE=1"
145        "-DOPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE=1"
146        "-DOPENTHREAD_CONFIG_DATASET_UPDATER_ENABLE=1"
147        "-DOPENTHREAD_CONFIG_DIAG_ENABLE=1"
148        "-DOPENTHREAD_CONFIG_JAM_DETECTION_ENABLE=1"
149        "-DOPENTHREAD_CONFIG_LEGACY_ENABLE=1"
150        "-DOPENTHREAD_CONFIG_MAC_FILTER_ENABLE=1"
151        "-DOPENTHREAD_CONFIG_PING_SENDER_ENABLE=1"
152        "-DOPENTHREAD_CONFIG_NCP_SPI_ENABLE=1"
153        "-DOPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE=1"
154        "-DOPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE=1"
155    )
156    export CPPFLAGS="${options[*]}"
157
158    reset_source
159    mkdir build && cd build
160    ../configure \
161        --enable-cli \
162        --enable-mtd \
163        --with-examples=simulation \
164        --disable-docs \
165        --disable-tests
166    make -j"${OT_BUILD_JOBS}"
167    cd ..
168
169    options=(
170        "-DOPENTHREAD_CONFIG_ANOUNCE_SENDER_ENABLE=1"
171        "-DOPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE=1"
172        "-DOPENTHREAD_CONFIG_TIME_SYNC_ENABLE=1"
173        "-DOPENTHREAD_CONFIG_NCP_HDLC_ENABLE=1"
174    )
175    export CPPFLAGS="${options[*]}"
176
177    reset_source
178    mkdir build && cd build
179    ../configure \
180        --enable-cli \
181        --enable-ftd \
182        --enable-mtd \
183        --enable-ncp \
184        --enable-radio-only \
185        --enable-radio-cli \
186        --disable-docs \
187        --disable-tests \
188        --with-examples=simulation
189    make -j"${OT_BUILD_JOBS}"
190    cd ..
191
192    options=(
193        "-DOPENTHREAD_CONFIG_NCP_HDLC_ENABLE=1"
194        "-DOPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE=1"
195    )
196    export CPPFLAGS="${options[*]}"
197
198    reset_source
199    mkdir build && cd build
200    ../configure \
201        --enable-ftd \
202        --enable-mtd \
203        --enable-ncp \
204        --with-examples=simulation \
205        --disable-docs \
206        --disable-tests \
207        --with-vendor-extension=../src/core/common/extension_example.cpp \
208        --with-ncp-vendor-hook-source=../src/ncp/example_vendor_hook.cpp
209    make -j"${OT_BUILD_JOBS}"
210    cd ..
211}
212
213build_multi_radio_links()
214{
215    # TREL radio link only.
216    local options=(
217        "-DOPENTHREAD_CONFIG_NCP_HDLC_ENABLE=1"
218        "-DOPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE=1"
219        "-DOPENTHREAD_CONFIG_LOG_LEVEL=OT_LOG_LEVEL_DEBG"
220        "-DOPENTHREAD_CONFIG_RADIO_LINK_IEEE_802_15_4_ENABLE=0"
221        "-DOPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE=1"
222    )
223    export CPPFLAGS="${options[*]}"
224
225    reset_source
226    mkdir build && cd build
227    ../configure \
228        --enable-cli \
229        --enable-ftd \
230        --enable-mtd \
231        --enable-ncp \
232        --enable-radio-only \
233        --enable-radio-cli \
234        --with-examples=simulation \
235        --disable-docs \
236        --disable-tests
237    make -j"${OT_BUILD_JOBS}"
238    cd ..
239
240    # Multi radio link - 15.4 and TREL.
241    options=(
242        "-DOPENTHREAD_CONFIG_NCP_HDLC_ENABLE=1"
243        "-DOPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE=1"
244        "-DOPENTHREAD_CONFIG_DIAG_ENABLE=1"
245        "-DOPENTHREAD_CONFIG_LINK_RAW_ENABLE=1"
246        "-DOPENTHREAD_CONFIG_LOG_LEVEL_DYNAMIC_ENABLE=1"
247        "-DOPENTHREAD_CONFIG_LOG_LEVEL=OT_LOG_LEVEL_DEBG"
248        "-DOPENTHREAD_CONFIG_MAC_FILTER_ENABLE=1"
249        "-DOPENTHREAD_CONFIG_RADIO_LINK_IEEE_802_15_4_ENABLE=1"
250        "-DOPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE=1"
251    )
252    export CPPFLAGS="${options[*]}"
253
254    reset_source
255    mkdir build && cd build
256    ../configure \
257        --enable-cli \
258        --enable-ftd \
259        --enable-mtd \
260        --enable-ncp \
261        --enable-radio-only \
262        --enable-radio-cli \
263        --with-examples=simulation \
264        --disable-docs \
265        --disable-tests
266    make -j"${OT_BUILD_JOBS}"
267    cd ..
268}
269
270main()
271{
272    ./bootstrap
273
274    build_all_features
275    build_nest_common
276    build_multi_radio_links
277}
278
279main "$@"
280