-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
151 lines (119 loc) · 4.59 KB
/
CMakeLists.txt
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
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
SET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
cmake_minimum_required(VERSION 3.13)
MESSAGE(STATUS "==========================================")
MESSAGE(STATUS "Starting swindle_bootloader_ch32v3x (ch32)")
MESSAGE(STATUS "==========================================")
OPTION(DEBUG_BUILD "Enable debugability" OFF)
OPTION(VERBOSE_BUILD "Enable verbose" OFF)
#SET(DEBUG_BUILD ON CACHE Internal "")
#SET(VERBOSE_BUILD ON CACHE Internal "")
SET(MINI ${CMAKE_SOURCE_DIR}/lnArduino_mini CACHE INTERNAL "")
SET(AF_FOLDER ${CMAKE_SOURCE_DIR}/lnArduino CACHE INTERNAL "")
SET(MCU ${CMAKE_SOURCE_DIR}/lnArduino/mcus/riscv_ch32v3x CACHE INTERNAL "")
include(./build_default.cmake)
MACRO(POSTPROCESS target)
add_custom_command(TARGET ${target}
POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${target}> $<TARGET_FILE:${target}>.bin
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Generating bin file"
)
add_custom_command(TARGET ${target}
POST_BUILD
COMMAND ${CMAKE_SIZE} --format=berkeley $<TARGET_FILE:${target}>
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Memory summary"
)
ENDMACRO(POSTPROCESS target)
SET(LN_ENABLE_USBD True CACHE INTERNAL "")
SET(LN_ENABLE_I2C FALSE CACHE INTERNAL "")
SET(LN_ENABLE_SPI FALSE CACHE INTERNAL "")
include(./mcuSelect.cmake)
ADD_DEFINITIONS(-DconfigTOTAL_HEAP_SIZE=16000 -DUSE_CH32v3x_HW_IRQ_STACK=1 -DARCH_FPU=1 -DLN_MCU_SPEED=${LN_MCU_SPEED} -DPRINTF_DISABLE_SUPPORT_FLOAT -isystem ${CMAKE_SOURCE_DIR}/override)
IF(DEBUG_BUILD)
ADD_DEFINITIONS("-DLN_ID_PRODUCT=0x6060")
ADD_DEFINITIONS("-O0 -g3 ")
SET(TAG "_DEBUG" CACHE INTERNAL "")
ELSE()
ADD_DEFINITIONS("-DLN_ID_PRODUCT=0x6031")
ADD_DEFINITIONS("-Oz")
ENDIF()
IF(VERBOSE_BUILD)
ADD_DEFINITIONS("-DVERBOSE_BUILD")
SET(EXTRA src/lnDebug_mini.cpp lnArduino/embedded_printf/printf.c )
ELSE()
SET(EXTRA src/lnDebug_empty.cpp )
ENDIF()
include_directories(${MINI}/override)
# Update paths
IF(USE_CLANG)
SET(xCMAKE_TOOLCHAIN_FILE ${MCU}/toolchain_clang.cmake)
configure_file( "${MINI}/clang_ram_offset_by_8.lld.in" "${CMAKE_BINARY_DIR}/linker_script.ld" @ONLY)
ELSE(USE_CLANG) # This is not really supported
SET(xCMAKE_TOOLCHAIN_FILE ${MCU}/toolchain.cmake)
configure_file( "${MINI}/ld_ram_offset_by_8.lds.in" "${CMAKE_BINARY_DIR}/linker_script.ld" @ONLY)
ENDIF(USE_CLANG)
include(${xCMAKE_TOOLCHAIN_FILE})
PROJECT(swindle_bootloader_ch32v3x NONE) # the NONE is very important !
enable_language(C CXX ASM) # this is important too!
#
include_directories(${CMAKE_SOURCE_DIR}/override)
include_directories( lnArduino/include)
include_directories( lnArduino/)
include_directories( lnArduino/arduinoLayer/include)
include_directories( lnArduino/private_include )
include_directories( ${MCU}/include )
include_directories( ${MCU}/private_include )
include_directories( ${MINI} )
include_directories( ${MINI}/include )
include_directories( ${CMAKE_SOURCE_DIR})
include_directories( ${CMAKE_SOURCE_DIR}/include)
ADD_SUBDIRECTORY( ${MINI} )
SET(BL_SRCS
src/main.cpp
src/hash_check.cpp
src/xxhash.c
src/rebooted.cpp
src/dfu.cpp
src/usb_setup.cpp
src/driver_uart.cpp
src/driver_timer.cpp
src/driver_interrupt.cpp
src/stubs_lowlevel.cpp
${MCU}/start.S
CACHE INTERNAL ""
)
include(./tiny.cmake)
target_link_libraries(tinyUsb miniArduino)
ADD_EXECUTABLE(swindle_bootloader_ch32v3x ${BL_SRCS} ${EXTRA})
TARGET_LINK_LIBRARIES(swindle_bootloader_ch32v3x tinyUsb )
TARGET_LINK_LIBRARIES(swindle_bootloader_ch32v3x miniArduino)
TARGET_LINK_OPTIONS(swindle_bootloader_ch32v3x PRIVATE "-T${CMAKE_BINARY_DIR}/linker_script.ld" )
#--
#
#
#
#
MESSAGE(STATUS "=======")
MESSAGE(STATUS "Summary")
MESSAGE(STATUS "=======")
math(EXPR MCU_SPEED_M "${LN_MCU_SPEED}/1000000")
MESSAGE(STATUS "Built for ${LN_ARCH}/${LN_MCU} with ${LN_MCU_FLASH_SIZE} flash / ${LN_MCU_RAM_SIZE} ram")
MESSAGE(STATUS " MCU running at ${MCU_SPEED_M} Mhz")
IF(USE_CLANG)
SET(COMPILER "CLANG" CACHE INTERNAL "")
MESSAGE(STATUS " Compiler : CLANG")
ELSE()
SET(COMPILER "GCC" CACHE INTERNAL "")
MESSAGE(STATUS " Compiler : GCC")
ENDIF()
IF(DEBUG_BUILD)
MESSAGE(STATUS " DEBUG BUILD")
ENDIF()
IF(VERBOSE_BUILD)
MESSAGE(STATUS " VERBOSE BUILD")
ENDIF()
set_target_properties(swindle_bootloader_ch32v3x PROPERTIES OUTPUT_NAME swindle_bootloader_ch32v3x_${COMPILER}${TAG} )
POSTPROCESS( swindle_bootloader_ch32v3x )
#