-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
115 lines (103 loc) · 4.22 KB
/
Copy pathCMakeLists.txt
File metadata and controls
115 lines (103 loc) · 4.22 KB
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
cmake_minimum_required(VERSION 3.15)
include(proj.conf)
# FORCE_FS=1 env var → remove CONFIG_USB_HS so SDK sets FORCE_FS bit
if(DEFINED ENV{FORCE_FS})
unset(CONFIG_USB_HS)
endif()
find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE})
# Incoming Bluetooth HCI/L2CAP reports must preempt audio encoding.
sdk_add_compile_definitions(-DCONFIG_BT_RX_PRIO=5)
sdk_set_main_file(src/main.c)
target_sources(app PRIVATE
src/bt_hid_host.c
src/ds5_protocol.c
src/usb_gamepad.c
src/ds5_usb_audio.c
src/audio.c
src/usb_wake.c
src/led_status.c
src/state_mgr.c
src/config.c
src/dse.c
src/remap.c
)
sdk_add_include_directories(src)
sdk_add_include_directories(${BL_SDK_BASE}/components/wireless/bluetooth/blestack/src/include)
sdk_add_include_directories(${BL_SDK_BASE}/components/wireless/bluetooth/btprofile/include)
sdk_add_include_directories(${BL_SDK_BASE}/components/utils/partition)
# Opus codec (fixed-point, encoder and decoder)
include(lib/opus.cmake)
sdk_generate_library(opuscodec)
sdk_library_add_sources(${OPUS_SOURCES})
target_compile_definitions(libopuscodec PRIVATE HAVE_CONFIG_H)
target_compile_options(libopuscodec PRIVATE
-include${CMAKE_CURRENT_LIST_DIR}/lib/opus_config.h
)
set_source_files_properties(${OPUS_SOURCES} PROPERTIES
COMPILE_OPTIONS "-O3;-fbuiltin;-fno-lto;-fjump-tables"
)
set_source_files_properties(src/audio.c PROPERTIES
COMPILE_OPTIONS "-O3"
)
set(OPUS_INCLUDE_DIRS
${CMAKE_CURRENT_LIST_DIR}/lib/opus/include
${CMAKE_CURRENT_LIST_DIR}/lib/opus/celt
${CMAKE_CURRENT_LIST_DIR}/lib/opus/silk
${CMAKE_CURRENT_LIST_DIR}/lib/opus/silk/fixed
${CMAKE_CURRENT_LIST_DIR}/lib/opus
)
target_include_directories(libopuscodec PRIVATE ${OPUS_INCLUDE_DIRS})
target_include_directories(app PRIVATE ${OPUS_INCLUDE_DIRS})
# Place all Opus code+rodata into SRAM/TCM via linker script injection
get_property(OPUS_BASE_LINKER_SCRIPT GLOBAL PROPERTY LINKER_SCRIPT_IN)
if(NOT EXISTS "${OPUS_BASE_LINKER_SCRIPT}")
message(FATAL_ERROR "Cannot locate the board linker template: ${OPUS_BASE_LINKER_SCRIPT}")
endif()
file(READ "${OPUS_BASE_LINKER_SCRIPT}" OPUS_LINKER_CONTENT)
set(OPUS_TCM_TEXT_ANCHOR " *(.tcm_code*)")
string(FIND "${OPUS_LINKER_CONTENT}" "${OPUS_TCM_TEXT_ANCHOR}" OPUS_TCM_TEXT_POS)
if(OPUS_TCM_TEXT_POS EQUAL -1)
message(FATAL_ERROR "Cannot locate tcm_text in ${OPUS_BASE_LINKER_SCRIPT}")
endif()
string(REPLACE
"${OPUS_TCM_TEXT_ANCHOR}"
"${OPUS_TCM_TEXT_ANCHOR}\n\n /* Run the complete Opus codec from SRAM/TCM. */\n *libopuscodec.a:*.o*(.text*)"
OPUS_LINKER_CONTENT
"${OPUS_LINKER_CONTENT}"
)
set(OPUS_TCM_RODATA_ANCHOR " *(.tcm_const*)")
string(FIND "${OPUS_LINKER_CONTENT}" "${OPUS_TCM_RODATA_ANCHOR}" OPUS_TCM_RODATA_POS)
if(OPUS_TCM_RODATA_POS EQUAL -1)
message(FATAL_ERROR "Cannot locate tcm_rodata in ${OPUS_BASE_LINKER_SCRIPT}")
endif()
string(REPLACE
"${OPUS_TCM_RODATA_ANCHOR}"
"${OPUS_TCM_RODATA_ANCHOR}\n\n /* Keep hot FFT, MDCT, PVQ and entropy tables off XIP flash. */\n *libopuscodec.a:*.o*(.rodata*)\n *libopuscodec.a:*.o*(.srodata*)"
OPUS_LINKER_CONTENT
"${OPUS_LINKER_CONTENT}"
)
set(OPUS_RAM_LINKER_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/generated/opus_all_ram.ld.in")
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated")
file(WRITE "${OPUS_RAM_LINKER_SCRIPT}" "${OPUS_LINKER_CONTENT}")
sdk_set_linker_script_macro("${OPUS_RAM_LINKER_SCRIPT}")
# Board selection via env vars (mutually exclusive)
if(DEFINED ENV{BOARD_LCTECH_616})
target_compile_definitions(app PRIVATE BOARD_LCTECH_616=1)
message(STATUS "Target board: LCTech BL616")
elseif(DEFINED ENV{BOARD_M0S_DOCK})
target_compile_definitions(app PRIVATE BOARD_M0S_DOCK=1)
message(STATUS "Target board: Sipeed M0S Dock (BL616)")
else()
message(STATUS "Target board: Ai-M61-32S-Kit (BL618)")
endif()
target_compile_definitions(app PRIVATE HAVE_CONFIG_H)
if(DEFINED ENV{FORCE_FS})
target_compile_definitions(app PRIVATE FORCE_FS_MODE=1)
message(STATUS "USB mode: Full-Speed (compatibility variant)")
else()
message(STATUS "USB mode: High-Speed (default)")
endif()
target_compile_options(app PRIVATE
$<$<COMPILE_LANGUAGE:C>:-include${CMAKE_CURRENT_LIST_DIR}/lib/opus_config.h>
)
project(ds5dongle_bl618)