2022-05-20 21:19:28 +08:00
|
|
|
cmake_minimum_required(VERSION 3.18)
|
|
|
|
|
2022-08-20 22:40:38 +08:00
|
|
|
option(ENABLE_DEBUG_OUTPUT "Print debug messages" OFF)
|
2022-05-20 21:19:28 +08:00
|
|
|
|
2022-05-22 22:29:42 +08:00
|
|
|
project(canokey-nrf52 C ASM)
|
|
|
|
set(TARGET canokey)
|
2022-05-20 21:19:28 +08:00
|
|
|
|
2022-08-19 21:39:51 +08:00
|
|
|
# board selection, see config/board_selection.h for avaliable boards
|
|
|
|
set(CANOKEY_BOARD OPT_BOARD_NRF52840_DONGLE)
|
|
|
|
# set(CANOKEY_BOARD OPT_BOARD_MAKERDIARY_M2_DOCK)
|
2022-07-28 09:47:44 +08:00
|
|
|
|
2022-05-20 21:19:28 +08:00
|
|
|
set(BASE_DIR ${CMAKE_CURRENT_LIST_DIR}/)
|
2022-07-28 09:47:44 +08:00
|
|
|
set(NRF5_SDK_DIR ${BASE_DIR}/nrf_sdk/nRF5_SDK_17.1.0_ddde560)
|
2022-05-20 21:19:28 +08:00
|
|
|
|
|
|
|
set(LINKER_SCRIPT "${BASE_DIR}/nrf52840.ld")
|
|
|
|
|
2022-05-22 22:38:23 +08:00
|
|
|
add_definitions(-DNRF52840_XXAA)
|
2022-08-19 21:30:39 +08:00
|
|
|
add_definitions(-DMBR_PRESENT)
|
2022-07-28 09:47:44 +08:00
|
|
|
add_definitions(-DCFG_BOARD=${CANOKEY_BOARD})
|
2022-05-26 12:55:37 +08:00
|
|
|
add_definitions(-DCFG_TUSB_MCU=OPT_MCU_NRF5X)
|
2022-05-22 22:38:23 +08:00
|
|
|
add_definitions(-DMBEDTLS_CONFIG_FILE="${BASE_DIR}/config/mbedtls_config.h")
|
2022-05-20 21:19:28 +08:00
|
|
|
|
2022-07-28 09:47:44 +08:00
|
|
|
# nrf5 sdk configs
|
2022-07-25 22:54:34 +08:00
|
|
|
add_definitions(-DCUSTOM_BOARD_INC=board_selection)
|
|
|
|
add_definitions(-DBSP_DEFINES_ONLY)
|
|
|
|
add_definitions(-DCONFIG_GPIO_AS_PINRESET)
|
|
|
|
add_definitions(-DFLOAT_ABI_HARD)
|
|
|
|
|
2022-05-22 22:29:42 +08:00
|
|
|
set(CMAKE_C_STANDARD 11)
|
2022-07-25 22:54:34 +08:00
|
|
|
set(COMMON_COMPILE_FLAGS "-mcpu=cortex-m4 -mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16")
|
2022-08-20 22:40:38 +08:00
|
|
|
set(EXTRA_COMPILE_FLAGS "-ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -fshort-enums")
|
2022-05-20 21:19:28 +08:00
|
|
|
|
|
|
|
set(WARNING_FLAGS "-Wall")
|
|
|
|
|
2022-08-09 10:00:01 +08:00
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_COMPILE_FLAGS} ${WARNING_FLAGS} ${EXTRA_COMPILE_FLAGS} ${DEFINITIONS}")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILE_FLAGS} ${WARNING_FLAGS} ${EXTRA_COMPILE_FLAGS} ${DEFINITIONS}")
|
2022-05-20 21:19:28 +08:00
|
|
|
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${COMMON_COMPILE_FLAGS}")
|
|
|
|
|
2022-08-20 22:40:38 +08:00
|
|
|
set(CMAKE_C_FLAGS_DEBUG "-g3 -Og")
|
|
|
|
set(CMAKE_C_FLAGS_RELEASE "-Os")
|
|
|
|
|
2022-08-09 10:00:01 +08:00
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${NRF5_SDK_DIR}/modules/nrfx/mdk -T ${LINKER_SCRIPT} -Wl,--gc-sections -Wl,-Map=${TARGET}.map --specs=nano.specs")
|
2022-05-20 21:19:28 +08:00
|
|
|
|
2022-05-22 22:29:42 +08:00
|
|
|
# Enable export of compile_commands.json
|
2022-05-20 21:19:28 +08:00
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
|
2022-07-28 09:47:44 +08:00
|
|
|
include(${BASE_DIR}/nrf_sdk/nRF5_SDK.cmake)
|
2022-05-21 22:10:34 +08:00
|
|
|
|
2022-05-30 21:19:16 +08:00
|
|
|
file(GLOB SRCS
|
2022-07-25 15:57:23 +08:00
|
|
|
"${BASE_DIR}/src/*.c"
|
2022-05-30 21:19:16 +08:00
|
|
|
)
|
|
|
|
|
2022-05-20 21:19:28 +08:00
|
|
|
set(SOURCES
|
2022-07-25 22:54:34 +08:00
|
|
|
${NRF5_SDK_SOURCES}
|
|
|
|
${SRCS}
|
2022-05-20 21:19:28 +08:00
|
|
|
)
|
|
|
|
|
2022-07-25 22:54:34 +08:00
|
|
|
add_executable(${TARGET} ${SOURCES})
|
2022-05-20 21:19:28 +08:00
|
|
|
|
2022-05-22 22:29:42 +08:00
|
|
|
# Include dirs
|
2022-07-25 22:54:34 +08:00
|
|
|
target_include_directories(${TARGET} PRIVATE ${NRF5_SDK_INCLUDES})
|
|
|
|
target_include_directories(${TARGET} PRIVATE ${BASE_DIR}/include)
|
|
|
|
target_include_directories(${TARGET} PRIVATE ${BASE_DIR}/config)
|
2022-05-22 22:29:42 +08:00
|
|
|
|
2022-08-09 10:00:01 +08:00
|
|
|
# nrf sdk binary libraries
|
|
|
|
target_link_libraries(${TARGET} PRIVATE ${NRF5_SDK_LIBRARIES})
|
|
|
|
|
2022-05-26 12:55:37 +08:00
|
|
|
# TinyUSB DCD configure
|
|
|
|
set(DCD_INCLUDE_DIRS
|
2022-07-25 22:54:34 +08:00
|
|
|
${NRF5_SDK_INCLUDES}
|
|
|
|
${BASE_DIR}/config
|
2022-05-26 12:55:37 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
set(TINYUSB_MCU "OPT_MCU_NRF5X" CACHE STRING "TinyUSB MCU name")
|
|
|
|
set(TINYUSB_DCD_INCLUDES ${DCD_INCLUDE_DIRS} CACHE STRING "TinyUSB DCD include paths")
|
|
|
|
|
|
|
|
# CanoKey Core
|
|
|
|
add_subdirectory(canokey-core)
|
2022-05-26 17:42:29 +08:00
|
|
|
target_link_libraries(${TARGET} PRIVATE
|
|
|
|
-Wl,--whole-archive
|
|
|
|
canokey-core
|
|
|
|
-Wl,--no-whole-archive
|
|
|
|
)
|
|
|
|
target_link_libraries(${TARGET} PRIVATE c m nosys)
|
2022-05-26 12:55:37 +08:00
|
|
|
|
2022-05-22 22:29:42 +08:00
|
|
|
# Generate Git version header
|
|
|
|
add_dependencies(${TARGET} gitrev)
|
|
|
|
set(gitrev_in include/git-rev.h.in)
|
|
|
|
set(gitrev include/git-rev.h)
|
|
|
|
add_custom_target(gitrev
|
|
|
|
${CMAKE_COMMAND} -E remove -f ${CMAKE_CURRENT_SOURCE_DIR}/${gitrev}
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${gitrev_in} ${CMAKE_CURRENT_SOURCE_DIR}/${gitrev}
|
|
|
|
COMMAND git describe --always --tags --long --abbrev=8 --dirty >> ${CMAKE_CURRENT_SOURCE_DIR}/${gitrev}
|
2022-05-20 21:19:28 +08:00
|
|
|
)
|
|
|
|
|
2022-05-22 22:29:42 +08:00
|
|
|
# Create a binary from the elf
|
|
|
|
add_custom_target(${TARGET}.bin
|
|
|
|
DEPENDS ${TARGET}
|
|
|
|
COMMAND "${CROSS_COMPILE}objcopy" -O binary -S ${TARGET} ${TARGET}.bin
|
2022-05-20 21:19:28 +08:00
|
|
|
)
|
|
|
|
|
2022-05-22 22:29:42 +08:00
|
|
|
add_custom_target(${TARGET}.hex
|
|
|
|
DEPENDS ${TARGET}
|
|
|
|
COMMAND "${CROSS_COMPILE}objcopy" -O ihex -S ${TARGET} ${TARGET}.hex
|
2022-05-20 21:19:28 +08:00
|
|
|
)
|
|
|
|
|
2022-05-22 22:29:42 +08:00
|
|
|
# Print size of the elf
|
|
|
|
add_custom_command(TARGET ${TARGET} POST_BUILD
|
|
|
|
COMMAND ${CROSS_COMPILE}size ${TARGET}
|
2022-05-20 21:19:28 +08:00
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
|
|
)
|
|
|
|
|
2022-08-19 21:30:39 +08:00
|
|
|
# Generate UF2 package for Adafruit bootloader
|
|
|
|
add_custom_target(${TARGET}_flash.uf2
|
2022-08-14 13:59:53 +08:00
|
|
|
DEPENDS ${TARGET}.hex
|
2022-08-19 21:30:39 +08:00
|
|
|
COMMAND python ${BASE_DIR}/utils/uf2/utils/uf2conv.py --convert --family 0xADA52840 -o ${TARGET}_flash.uf2 ${TARGET}.hex
|
2022-08-14 13:59:53 +08:00
|
|
|
)
|
|
|
|
|
2022-08-09 10:00:01 +08:00
|
|
|
# NRF sdk config tool
|
|
|
|
set(NRF5_SDK_CONFIG_FILE ${BASE_DIR}/config/sdk_config.h)
|
|
|
|
set(CMSIS_CONFIG_TOOL ${NRF5_SDK_DIR}/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar)
|
|
|
|
|
|
|
|
add_custom_target(sdk_config
|
|
|
|
COMMAND java -jar ${CMSIS_CONFIG_TOOL} ${NRF5_SDK_CONFIG_FILE}
|
|
|
|
)
|
|
|
|
|
2022-05-22 22:29:42 +08:00
|
|
|
# auto-ignore build directory
|
2022-05-20 21:19:28 +08:00
|
|
|
if(NOT EXISTS ${PROJECT_BINARY_DIR}/.gitignore)
|
|
|
|
file(WRITE ${PROJECT_BINARY_DIR}/.gitignore "*")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# vim: set ts=4 sw=4 sts=4 et smarttab :
|