From f495c712401851076d7b43c966cbb6eb3595b734 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Mon, 13 Jun 2022 12:53:19 +0200 Subject: [PATCH] chipset/cc256x: download only init script required for port (cmake) --- chipset/cc256x/cc256x.cmake | 193 ++++++++++++++++++++--------------- port/posix-h4/CMakeLists.txt | 16 ++- 2 files changed, 116 insertions(+), 93 deletions(-) diff --git a/chipset/cc256x/cc256x.cmake b/chipset/cc256x/cc256x.cmake index 837f6c3e5..592e431df 100644 --- a/chipset/cc256x/cc256x.cmake +++ b/chipset/cc256x/cc256x.cmake @@ -9,94 +9,119 @@ set(BLUEKITCHEN_URL https://bluekitchen-gmbh.com/files/ti/service-packs) set(CONVERSION_SCRIPT ${BTSTACK_ROOT}/chipset/cc256x/convert_bts_init_scripts.py) -set (BK_FILES - CC2560_BT_SP_BTS.zip - CC2560A_BT_SP_BTS.zip - CC2564_BT_BLE_SP_BTS.zip - bluetooth_init_cc2560B_1.2_BT_Spec_4.1.bts - bluetooth_init_cc2564B_1.2_BT_Spec_4.1.bts - BLE_init_cc2564B_1.2.bts - cc256xb_bt_sp_v1.6.zip - cc256xb_bt_sp_v1.8.zip - cc256xc_bt_sp_v1.0.zip - cc256xc_bt_sp_v1.1.zip - cc256xc_bt_sp_v1.2.zip - cc256xc_bt_sp_v1.3.zip - cc256xc_bt_sp_v1.4.zip - cc256xc_bt_sp_v1.5.zip - TIInit_6.7.16_bt_spec_4.1.bts - TIInit_6.7.16_ble_add-on.bts - TIInit_11.8.32_4.2.bts - TIInit_11.8.32_4.6.bts - TIInit_11.8.32_4.7.bts - TIInit_12.10.28.bts - TIInit_12.8.32.bts -) +# +# Service Pack / Init Script / .bts Conversion function +# +# only download and unzip if requested by main target via CC256X_INIT_SCRIPT +# +function(cc256x_init_script output_file archive main_script optional_script) + if (DEFINED CC256X_INIT_SCRIPT) + if ("${CC256X_INIT_SCRIPT}" STREQUAL ${output_file}) -# Conversion function -function(cc256x_init_script output_file main_script optional_script) - message("CC256x: ${output_file} <- ${main_script} ${optional_script}") - add_custom_command( - OUTPUT ${output_file} - DEPENDS ${main_script} ${optional_script} - COMMAND ${CONVERSION_SCRIPT} - ARGS ${main_script} ${optional_script} ${output_file} - ) + # Download init scripts + message("CC256x: Download ${archive}") + file(DOWNLOAD ${BLUEKITCHEN_URL}/${archive} ${archive}) + + # unpack zip + if (${archive} MATCHES "zip$") + message("CC256x: Extract ${archive}") + file(ARCHIVE_EXTRACT INPUT ${archive}) + endif() + + # add custom command to convert bts file(s) into C array + message("CC256x: ${output_file} <- ${main_script} ${optional_script}") + add_custom_command( + OUTPUT ${output_file} + DEPENDS ${main_script} ${optional_script} + COMMAND ${CONVERSION_SCRIPT} + ARGS ${main_script} ${optional_script} ${output_file} + ) + + # Add CC256x chipset support + include_directories(${BTSTACK_ROOT}/chipset/cc256x) + target_sources(btstack PRIVATE ${BTSTACK_ROOT}/chipset/cc256x/btstack_chipset_cc256x.c) + + # add init script to target + target_sources(btstack PRIVATE ${CC256X_INIT_SCRIPT}) + + endif() + endif() endfunction() -# ZIP and bts from BlueKitchen mirror -foreach(FILE ${BK_FILES}) - message("CC256x: Download ${FILE}") - file(DOWNLOAD ${BLUEKITCHEN_URL}/${FILE} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}) -endforeach() - -# Extract archives -foreach(FILE ${BK_FILES}) - # filter for .zip - if (${FILE} MATCHES "zip$") - message("CC256x: Extract ${FILE}") - file(ARCHIVE_EXTRACT INPUT ${FILE}) - endif() -endforeach() - -# Define all init script # -# output_file main_bts add_on +# output_file archives main_bts add_on # -cc256x_init_script(bluetooth_init_cc2560_2.44.c CC2560_BT_SP_BTS/bluetooth_init_cc2560_2.44.bts "") -cc256x_init_script(bluetooth_init_cc2560A_2.14.c CC2560A_BT_SP_BTS/bluetooth_init_cc2560A_2.14.bts "") -cc256x_init_script(bluetooth_init_cc2564_2.14.c CC2564_BT_BLE_SP_BTS/bluetooth_init_cc2564_2.14.bts "") -cc256x_init_script(bluetooth_init_cc2560B_1.2_BT_Spec_4.1.c bluetooth_init_cc2560B_1.2_BT_Spec_4.1.bts "") -cc256x_init_script(bluetooth_init_cc2564B_1.2_BT_Spec_4.1.c bluetooth_init_cc2564B_1.2_BT_Spec_4.1.bts BLE_init_cc2564B_1.2.bts) -cc256x_init_script(bluetooth_init_cc2560B_1.4_BT_Spec_4.1.c TIInit_6.7.16_bt_spec_4.1.bts "") -cc256x_init_script(bluetooth_init_cc2564B_1.4_BT_Spec_4.1.c TIInit_6.7.16_bt_spec_4.1.bts TIInit_6.7.16_ble_add-on.bts) -cc256x_init_script(bluetooth_init_cc2560B_1.5_BT_Spec_4.1.c cc256x_bt_sp_v1.5/initscripts-TIInit_6.7.16_bt_spec_4.1.bts "") -cc256x_init_script(bluetooth_init_cc2564B_1.5_BT_Spec_4.1.c cc256x_bt_sp_v1.5/initscripts-TIInit_6.7.16_bt_spec_4.1.bts cc256x_bt_sp_v1.5/initscripts-TIInit_6.7.16_ble_add-on.bts) -cc256x_init_script(bluetooth_init_cc2560B_1.6_BT_Spec_4.1.c cc256xb_bt_sp_v1.6/initscripts-TIInit_6.7.16_bt_spec_4.1.bts "") -cc256x_init_script(bluetooth_init_cc2564B_1.6_BT_Spec_4.1.c cc256xb_bt_sp_v1.6/initscripts-TIInit_6.7.16_bt_spec_4.1.bts cc256xb_bt_sp_v1.6/initscripts-TIInit_6.7.16_ble_add-on.bts) -cc256x_init_script(bluetooth_init_cc2560B_1.8_BT_Spec_4.1.c cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_bt_spec_4.1.bts "") -cc256x_init_script(bluetooth_init_cc2560B_avpr_1.8_BT_Spec_4.1.c cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_bt_spec_4.1.bts cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_avpr_add-on.bts) -cc256x_init_script(bluetooth_init_cc2564B_1.8_BT_Spec_4.1.c cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_bt_spec_4.1.bts cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_ble_add-on.bts) -cc256x_init_script(bluetooth_init_cc2560C_1.0.c CC256XC_BT_SP/v1.0/initscripts-TIInit_6.12.26.bts "") -cc256x_init_script(bluetooth_init_cc2564C_1.0.c CC256XC_BT_SP/v1.0/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.0/initscripts-TIInit_6.12.26_ble_add-on.bts) -cc256x_init_script(bluetooth_init_cc2560C_1.1.c CC256XC_BT_SP/v1.1/initscripts-TIInit_6.12.26.bts "") -cc256x_init_script(bluetooth_init_cc2564C_1.1.c CC256XC_BT_SP/v1.1/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.1/initscripts-TIInit_6.12.26_ble_add-on.bts) -cc256x_init_script(bluetooth_init_cc2560C_1.2.c CC256XC_BT_SP/v1.2/initscripts-TIInit_6.12.26.bts "") -cc256x_init_script(bluetooth_init_cc2564C_1.2.c CC256XC_BT_SP/v1.2/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.2/initscripts-TIInit_6.12.26_ble_add-on.bts) -cc256x_init_script(bluetooth_init_cc2560C_1.3.c CC256XC_BT_SP/v1.3/initscripts-TIInit_6.12.26.bts "") -cc256x_init_script(bluetooth_init_cc2564C_1.3.c CC256XC_BT_SP/v1.3/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.3/initscripts-TIInit_6.12.26_ble_add-on.bts) -cc256x_init_script(bluetooth_init_cc2560C_1.4.c CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26.bts "") -cc256x_init_script(bluetooth_init_cc2560C_avpr_1.4.c CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26_avpr_add-on.bts) -cc256x_init_script(bluetooth_init_cc2564C_1.4.c CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26_ble_add-on.bts) -cc256x_init_script(bluetooth_init_cc2560C_1.5.c CC256XC_v1.5/v1.5/initscripts-TIInit_6.12.26.bts "") -cc256x_init_script(bluetooth_init_cc2560C_avpr_1.5.c CC256XC_v1.5/v1.5/initscripts-TIInit_6.12.26.bts CC256XC_v1.5/v1.5i/nitscripts-TIInit_6.12.26_avpr_add-on.bts) -cc256x_init_script(bluetooth_init_cc2564C_1.5.c CC256XC_v1.5/v1.5/initscripts-TIInit_6.12.26.bts CC256XC_v1.5/v1.5/initscripts-TIInit_6.12.26_ble_add-on.bts) -cc256x_init_script(TIInit_11.8.32_4.2.c TIInit_11.8.32_4.2.bts "") -cc256x_init_script(TIInit_11.8.32_4.6.c TIInit_11.8.32_4.6.bts "") -cc256x_init_script(TIInit_11.8.32_4.7.c TIInit_11.8.32_4.7.bts "") -cc256x_init_script(TIInit_12.10.28.c TIInit_12.10.28.bts "") -cc256x_init_script(TIInit_12.8.32.c TIInit_12.8.32.bts "") + +# First generation CC2560 - AKA TIInit_6.2.31.bts +# - v2.44 - file part of .zip archive +cc256x_init_script(bluetooth_init_cc2560_2.44.c CC2560_BT_SP_BTS.zip CC2560_BT_SP_BTS/bluetooth_init_cc2560_2.44.bts "") + +# Second generation CC2560A and CC2564 - AKA TIInit_6.6.15.bts +# - v2.14 - files part of .zip archive +cc256x_init_script(bluetooth_init_cc2560A_2.14.c CC2560A_BT_SP_BTS.zip CC2560A_BT_SP_BTS/bluetooth_init_cc2560A_2.14.bts "") +cc256x_init_script(bluetooth_init_cc2564_2.14.c CC2564_BT_BLE_SP_BTS.zip CC2564_BT_BLE_SP_BTS/bluetooth_init_cc2564_2.14.bts "") + +# Third generation CC256xB - AKA TIInit_6.7.16.bts +# - v1.2 - versioned files TI Git Repo +cc256x_init_script(bluetooth_init_cc2560B_1.2_BT_Spec_4.1.c cc256xb_bt_sp_v1.2.zip bluetooth_init_cc2560B_1.2_BT_Spec_4.1.bts "") +cc256x_init_script(bluetooth_init_cc2564B_1.2_BT_Spec_4.1.c cc256xb_bt_sp_v1.2.zip bluetooth_init_cc2564B_1.2_BT_Spec_4.1.bts BLE_init_cc2564B_1.2.bts) + +# - v1.3 - not available, please use v1.8 or newer + +# - v1.4 - versioned files TI Git Repo +cc256x_init_script(bluetooth_init_cc2560B_1.4_BT_Spec_4.1.c cc256xb_bt_sp_v1.4.zip TIInit_6.7.16_bt_spec_4.1.bts "") +cc256x_init_script(bluetooth_init_cc2564B_1.4_BT_Spec_4.1.c cc256xb_bt_sp_v1.4.zip TIInit_6.7.16_bt_spec_4.1.bts TIInit_6.7.16_ble_add-on.bts) + +# - v1.5 - unversioned files from BlueKitchen website, original: http://www.ti.com/tool/cc256xb-bt-sp +cc256x_init_script(bluetooth_init_cc2560B_1.5_BT_Spec_4.1.c cc256xb_bt_sp_v1.5.zip cc256x_bt_sp_v1.5/initscripts-TIInit_6.7.16_bt_spec_4.1.bts "") +cc256x_init_script(bluetooth_init_cc2564B_1.5_BT_Spec_4.1.c cc256xb_bt_sp_v1.5.zip cc256x_bt_sp_v1.5/initscripts-TIInit_6.7.16_bt_spec_4.1.bts cc256x_bt_sp_v1.5/initscripts-TIInit_6.7.16_ble_add-on.bts) + +# - v1.6 - unversioned files from BlueKitchen website, original: http://www.ti.com/tool/cc256xb-bt-sp +cc256x_init_script(bluetooth_init_cc2560B_1.6_BT_Spec_4.1.c cc256xb_bt_sp_v1.6.zip cc256xb_bt_sp_v1.6/initscripts-TIInit_6.7.16_bt_spec_4.1.bts "") +cc256x_init_script(bluetooth_init_cc2564B_1.6_BT_Spec_4.1.c cc256xb_bt_sp_v1.6.zip cc256xb_bt_sp_v1.6/initscripts-TIInit_6.7.16_bt_spec_4.1.bts cc256xb_bt_sp_v1.6/initscripts-TIInit_6.7.16_ble_add-on.bts) +cc256x_init_script(bluetooth_init_cc2560B_1.8_BT_Spec_4.1.c cc256xb_bt_sp_v1.6.zip cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_bt_spec_4.1.bts "") + +# - v1.7 - not available, please use v1.8 or newer + +# - v1.8 - unversioned files from BlueKitchen website, original: http://www.ti.com/tool/cc256xb-bt-sp +cc256x_init_script(bluetooth_init_cc2560B_avpr_1.8_BT_Spec_4.1.c cc256xb_bt_sp_v1.8.zip cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_bt_spec_4.1.bts cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_avpr_add-on.bts) +cc256x_init_script(bluetooth_init_cc2564B_1.8_BT_Spec_4.1.c cc256xb_bt_sp_v1.8.zip cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_bt_spec_4.1.bts cc256xb_bt_sp_v1.8/initscripts-TIInit_6.7.16_ble_add-on.bts) + +# Fourth generation CC256xC - TIInit_6.12.26.bts + +# - v1.0 - unversioned files from BlueKitchen website, original: http://www.ti.com/tool/cc256xc-bt-sp +cc256x_init_script(bluetooth_init_cc2560C_1.0.c cc256xc_bt_sp_v1.0.zip CC256XC_BT_SP/v1.0/initscripts-TIInit_6.12.26.bts "") +cc256x_init_script(bluetooth_init_cc2564C_1.0.c cc256xc_bt_sp_v1.0.zip CC256XC_BT_SP/v1.0/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.0/initscripts-TIInit_6.12.26_ble_add-on.bts) + +# - v1.1 - unversioned files from BlueKitchen website, original: http://www.ti.com/tool/cc256xc-bt-sp +cc256x_init_script(bluetooth_init_cc2560C_1.1.c cc256xc_bt_sp_v1.1.zip CC256XC_BT_SP/v1.1/initscripts-TIInit_6.12.26.bts "") +cc256x_init_script(bluetooth_init_cc2564C_1.1.c cc256xc_bt_sp_v1.1.zip CC256XC_BT_SP/v1.1/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.1/initscripts-TIInit_6.12.26_ble_add-on.bts) + +# - v1.2 - unversioned files from BlueKitchen website, original: http://www.ti.com/tool/cc256xc-bt-sp +cc256x_init_script(bluetooth_init_cc2560C_1.2.c cc256xc_bt_sp_v1.2.zip CC256XC_BT_SP/v1.2/initscripts-TIInit_6.12.26.bts "") +cc256x_init_script(bluetooth_init_cc2564C_1.2.c cc256xc_bt_sp_v1.2.zip CC256XC_BT_SP/v1.2/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.2/initscripts-TIInit_6.12.26_ble_add-on.bts) + +# - v1.3 - unversioned files from BlueKitchen website, original: http://www.ti.com/tool/cc256xc-bt-sp +cc256x_init_script(bluetooth_init_cc2560C_1.3.c cc256xc_bt_sp_v1.3.zip CC256XC_BT_SP/v1.3/initscripts-TIInit_6.12.26.bts "") +cc256x_init_script(bluetooth_init_cc2564C_1.3.c cc256xc_bt_sp_v1.3.zip CC256XC_BT_SP/v1.3/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.3/initscripts-TIInit_6.12.26_ble_add-on.bts) + +# - v1.4 - unversioned files from BlueKitchen website, original: http://www.ti.com/tool/cc256xc-bt-sp +cc256x_init_script(bluetooth_init_cc2560C_1.4.c cc256xc_bt_sp_v1.4.zip CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26.bts "") +cc256x_init_script(bluetooth_init_cc2560C_avpr_1.4.c cc256xc_bt_sp_v1.4.zip CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26_avpr_add-on.bts) +cc256x_init_script(bluetooth_init_cc2564C_1.4.c cc256xc_bt_sp_v1.4.zip CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26.bts CC256XC_BT_SP/v1.4/initscripts-TIInit_6.12.26_ble_add-on.bts) + +# - v1.5 - unversioned files from BlueKitchen website, original: http://www.ti.com/tool/cc256xc-bt-sp +cc256x_init_script(bluetooth_init_cc2560C_1.5.c cc256xc_bt_sp_v1.5.zip CC256XC_v1.5/v1.5/initscripts-TIInit_6.12.26.bts "") +cc256x_init_script(bluetooth_init_cc2560C_avpr_1.5.c cc256xc_bt_sp_v1.5.zip CC256XC_v1.5/v1.5/initscripts-TIInit_6.12.26.bts CC256XC_v1.5/v1.5i/nitscripts-TIInit_6.12.26_avpr_add-on.bts) +cc256x_init_script(bluetooth_init_cc2564C_1.5.c cc256xc_bt_sp_v1.5.zip CC256XC_v1.5/v1.5/initscripts-TIInit_6.12.26.bts CC256XC_v1.5/v1.5/initscripts-TIInit_6.12.26_ble_add-on.bts) + +# Various scripts for WL chipsets from http://www.ti.com/tool/wl18xx-bt-sp +cc256x_init_script(TIInit_11.8.32_4.2.c TIInit_11.8.32_4.2.bts TIInit_11.8.32_4.2.bts "") +cc256x_init_script(TIInit_11.8.32_4.6.c TIInit_11.8.32_4.6.bts TIInit_11.8.32_4.6.bts "") +cc256x_init_script(TIInit_11.8.32_4.7.c TIInit_11.8.32_4.7.bts TIInit_11.8.32_4.7.bts "") +cc256x_init_script(TIInit_12.10.28.c TIInit_12.10.28.bts TIInit_12.10.28.bts "") +cc256x_init_script(TIInit_12.8.32.c TIInit_12.8.32.bts TIInit_12.8.32.bts "") # ANT Service Pack required -# cc256x_init_script(bluetooth_init_cc2567_2.4.c CC2567_BT_ANT_Service_Pack_2.4.bts "") -# cc256x_init_script(bluetooth_init_cc2567_2.8.c CC256x_BT_Service_Pack_2.8_ANT_1.16.bts "") +# cc256x_init_script(bluetooth_init_cc2567_2.4.c "" CC2567_BT_ANT_Service_Pack_2.4.bts "") +# cc256x_init_script(bluetooth_init_cc2567_2.8.c "" CC256x_BT_Service_Pack_2.8_ANT_1.16.bts "") diff --git a/port/posix-h4/CMakeLists.txt b/port/posix-h4/CMakeLists.txt index 2efa41fde..f6d1c0d88 100644 --- a/port/posix-h4/CMakeLists.txt +++ b/port/posix-h4/CMakeLists.txt @@ -4,12 +4,6 @@ project(BTstack-posix-h4) SET(BTSTACK_ROOT ${CMAKE_SOURCE_DIR}/../..) -# CC256x Init Scripts -include(${BTSTACK_ROOT}/chipset/cc256x/cc256x.cmake) - -# BCM Init Scripts -include(${BTSTACK_ROOT}/chipset/bcm/bcm.cmake) - # extra compiler warnings if ("${CMAKE_C_COMPILER_ID}" MATCHES ".*Clang.*") # using Clang @@ -44,7 +38,6 @@ include_directories(${BTSTACK_ROOT}/3rd-party/yxml) include_directories(${BTSTACK_ROOT}/3rd-party/tinydir) include_directories(${BTSTACK_ROOT}/src) include_directories(${BTSTACK_ROOT}/chipset/bcm) -include_directories(${BTSTACK_ROOT}/chipset/cc256x) include_directories(${BTSTACK_ROOT}/chipset/csr) include_directories(${BTSTACK_ROOT}/chipset/cc256x) include_directories(${BTSTACK_ROOT}/chipset/em9301) @@ -71,7 +64,6 @@ file(GLOB SOURCES_YXML "${BTSTACK_ROOT}/3rd-party/yxml/yxml.c") file(GLOB SOURCES_POSIX "${BTSTACK_ROOT}/platform/posix/*.c") file(GLOB SOURCES_BCM "${BTSTACK_ROOT}/chipset/bcm/*.c") file(GLOB SOURCES_CSR "${BTSTACK_ROOT}/chipset/csr/*.c") -file(GLOB SOURCES_CC256X "${BTSTACK_ROOT}/chipset/cc256x/*.c") file(GLOB SOURCES_EM9301 "${BTSTACK_ROOT}/chipset/em9301/*.c") file(GLOB SOURCES_STLC2500D "${BTSTACK_ROOT}/chipset/stlc2500d/*.c") file(GLOB SOURCES_TC2566X "${BTSTACK_ROOT}/chipset/tc3566x/*.c") @@ -147,7 +139,6 @@ set(SOURCES ${SOURCES_REALTEK} ${SOURCES_RIJNDAEL} ${SOURCES_SRC} - ${SOURCES_CC256X} ${SOURCES_CSR} ${SOURCES_STLC2500D} ${SOURCES_TC2566X} @@ -161,6 +152,13 @@ list(SORT SOURCES) # create static lib add_library(btstack STATIC ${SOURCES}) +# Add CC256x Support and specify init script +set (CC256X_INIT_SCRIPT bluetooth_init_cc2564C_1.5.c) +include(${BTSTACK_ROOT}/chipset/cc256x/cc256x.cmake) + +# Add BCM Support and download PatchRAM files +include(${BTSTACK_ROOT}/chipset/bcm/bcm.cmake) + # get list of examples, skipping mesh_node_demo include(../../example/CMakeLists.txt) set (EXAMPLES ${EXAMPLES_GENERAL} ${EXAMPLES_CLASSIC_ONLY} ${EXAMPLES_LE_ONLY} ${EXAMPLES_DUAL_MODE})