diff options
author | JF <jf@codingfield.com> | 2019-11-17 20:47:04 +0100 |
---|---|---|
committer | JF <jf@codingfield.com> | 2019-11-17 20:47:04 +0100 |
commit | 2ea27e0cdac91cd4743d9f12496bb3f911d9efa9 (patch) | |
tree | ae6488be1be14c2b83aff6e69a6e622088fb093a /cmake-nRF5x |
Initial commit
Diffstat (limited to 'cmake-nRF5x')
-rwxr-xr-x | cmake-nRF5x/.gitignore | 2 | ||||
-rwxr-xr-x | cmake-nRF5x/CMake_nRF5x.cmake | 580 | ||||
-rw-r--r-- | cmake-nRF5x/LICENSE | 21 | ||||
-rw-r--r-- | cmake-nRF5x/arm-gcc-toolchain.cmake | 52 | ||||
-rw-r--r-- | cmake-nRF5x/example/CMakeLists.txt | 18 | ||||
-rw-r--r-- | cmake-nRF5x/example/README.md | 3 | ||||
-rw-r--r-- | cmake-nRF5x/example/src/CMakeLists.txt | 39 | ||||
-rwxr-xr-x | cmake-nRF5x/readme.md | 152 | ||||
-rwxr-xr-x | cmake-nRF5x/runJLinkExe-nrf51 | 3 | ||||
-rwxr-xr-x | cmake-nRF5x/runJLinkExe-nrf52 | 3 | ||||
-rwxr-xr-x | cmake-nRF5x/runJLinkGDBServer-nrf51 | 3 | ||||
-rwxr-xr-x | cmake-nRF5x/runJLinkGDBServer-nrf52 | 3 | ||||
-rwxr-xr-x | cmake-nRF5x/runJLinkRTTClient | 3 |
13 files changed, 882 insertions, 0 deletions
diff --git a/cmake-nRF5x/.gitignore b/cmake-nRF5x/.gitignore new file mode 100755 index 00000000..8e24b659 --- /dev/null +++ b/cmake-nRF5x/.gitignore @@ -0,0 +1,2 @@ +.idea +cmake-build-debug diff --git a/cmake-nRF5x/CMake_nRF5x.cmake b/cmake-nRF5x/CMake_nRF5x.cmake new file mode 100755 index 00000000..9f81b9b0 --- /dev/null +++ b/cmake-nRF5x/CMake_nRF5x.cmake @@ -0,0 +1,580 @@ +cmake_minimum_required(VERSION 3.6) + +# check if all the necessary tools paths have been provided. +if (NOT NRF5_SDK_PATH) + message(FATAL_ERROR "The path to the nRF5 SDK (NRF5_SDK_PATH) must be set.") +endif () + +if (NOT NRFJPROG) + message(FATAL_ERROR "The path to the nrfjprog utility (NRFJPROG) must be set.") +endif () + +# convert toolchain path to bin path +if(DEFINED ARM_NONE_EABI_TOOLCHAIN_PATH) + set(ARM_NONE_EABI_TOOLCHAIN_BIN_PATH ${ARM_NONE_EABI_TOOLCHAIN_PATH}/bin) +endif() + +# check if the nRF target has been set +if (NRF_TARGET MATCHES "nrf51") + +elseif (NRF_TARGET MATCHES "nrf52") + +elseif (NOT NRF_TARGET) + message(FATAL_ERROR "nRF target must be defined") +else () + message(FATAL_ERROR "Only nRF51 and rRF52 boards are supported right now") +endif () + +# must be set in file (not macro) scope (in macro would point to parent CMake directory) +set(DIR_OF_nRF5x_CMAKE ${CMAKE_CURRENT_LIST_DIR}) + +macro(nRF5x_toolchainSetup) + include(${DIR_OF_nRF5x_CMAKE}/arm-gcc-toolchain.cmake) +endmacro() + +macro(nRF5x_setup) + if(NOT DEFINED ARM_GCC_TOOLCHAIN) + message(FATAL_ERROR "The toolchain must be set up before calling this macro") + endif() + # fix on macOS: prevent cmake from adding implicit parameters to Xcode + set(CMAKE_OSX_SYSROOT "/") + set(CMAKE_OSX_DEPLOYMENT_TARGET "") + + # language standard/version settings + set(CMAKE_C_STANDARD 99) + set(CMAKE_CXX_STANDARD 11) + + # CPU specyfic settings + if (NRF_TARGET MATCHES "nrf51") + # nRF51 (nRF51-DK => PCA10028) + if(NOT DEFINED NRF5_LINKER_SCRIPT) + set(NRF5_LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/gcc_nrf51.ld") + endif() + set(CPU_FLAGS "-mcpu=cortex-m0 -mfloat-abi=soft") + add_definitions(-DBOARD_PCA10028 -DNRF51 -DNRF51422) + add_definitions(-DSOFTDEVICE_PRESENT -DS130 -DNRF_SD_BLE_API_VERSION=2 -DSWI_DISABLE0 -DBLE_STACK_SUPPORT_REQD) + include_directories( + "${NRF5_SDK_PATH}/components/softdevice/s130/headers" + "${NRF5_SDK_PATH}/components/softdevice/s130/headers/nrf51" + ) + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/modules/nrfx/mdk/system_nrf51.c" + "${NRF5_SDK_PATH}/modules/nrfx/mdk/gcc_startup_nrf51.S" + ) + set(SOFTDEVICE_PATH "${NRF5_SDK_PATH}/components/softdevice/s130/hex/s130_nrf51_2.0.0_softdevice.hex") + elseif (NRF_TARGET MATCHES "nrf52") + # nRF52 (nRF52-DK => PCA10040) + + if(NOT DEFINED NRF5_LINKER_SCRIPT) + set(NRF5_LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/gcc_nrf52.ld") + endif() + set(CPU_FLAGS "-mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16") + add_definitions(-DNRF52 -DNRF52832 -DNRF52832_XXAA -DNRF52_PAN_74 -DNRF52_PAN_64 -DNRF52_PAN_12 -DNRF52_PAN_58 -DNRF52_PAN_54 -DNRF52_PAN_31 -DNRF52_PAN_51 -DNRF52_PAN_36 -DNRF52_PAN_15 -DNRF52_PAN_20 -DNRF52_PAN_55 -DBOARD_PCA10040) + add_definitions(-DSOFTDEVICE_PRESENT -DS132 -DSWI_DISABLE0 -DBLE_STACK_SUPPORT_REQD -DNRF_SD_BLE_API_VERSION=6) + add_definitions(-DFREERTOS) + add_definitions(-DDEBUG_NRF_USER) + add_definitions(-D__STARTUP_CLEAR_BSS) + add_definitions(-D__HEAP_SIZE=8192) + add_definitions(-D__STACK_SIZE=2048) + + include_directories( + "${NRF5_SDK_PATH}/components/softdevice/s132/headers" + "${NRF5_SDK_PATH}/components/softdevice/s132/headers/nrf52" + ) + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/modules/nrfx/mdk/system_nrf52.c" + "${NRF5_SDK_PATH}/modules/nrfx/mdk/gcc_startup_nrf52.S" + ) + set(SOFTDEVICE_PATH "${NRF5_SDK_PATH}/components/softdevice/s132/hex/s132_nrf52_6.1.1_softdevice.hex") + endif () + + set(COMMON_FLAGS "-MP -MD -mthumb -mabi=aapcs -Wall -g3 -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums ${CPU_FLAGS}") + + # compiler/assambler/linker flags + set(CMAKE_C_FLAGS "${COMMON_FLAGS}") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g3") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3") + set(CMAKE_CXX_FLAGS "${COMMON_FLAGS}") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g3") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") + set(CMAKE_ASM_FLAGS "-MP -MD -std=c99 -x assembler-with-cpp") + set(CMAKE_EXE_LINKER_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} ${CPU_FLAGS} -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm") + # note: we must override the default cmake linker flags so that CMAKE_C_FLAGS are not added implicitly + set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_COMPILER} <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>") + set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_C_COMPILER} <LINK_FLAGS> <OBJECTS> -lstdc++ -o <TARGET> <LINK_LIBRARIES>") + + # basic board definitions and drivers + include_directories( + "${NRF5_SDK_PATH}/components" + "${NRF5_SDK_PATH}/components/boards" + "${NRF5_SDK_PATH}/components/softdevice/common" + "${NRF5_SDK_PATH}/integration/nrfx" + "${NRF5_SDK_PATH}/integration/nrfx/legacy" + "${NRF5_SDK_PATH}/modules/nrfx" + "${NRF5_SDK_PATH}/modules/nrfx/drivers/include" + "${NRF5_SDK_PATH}/modules/nrfx/hal" + "${NRF5_SDK_PATH}/modules/nrfx/mdk" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/boards/boards.c" + "${NRF5_SDK_PATH}/integration/nrfx/legacy/nrf_drv_clock.c" + "${NRF5_SDK_PATH}/modules/nrfx/drivers/src/nrfx_clock.c" + "${NRF5_SDK_PATH}/modules/nrfx/drivers/src/nrfx_gpiote.c" + "${NRF5_SDK_PATH}/modules/nrfx/soc/nrfx_atomic.c" + ) + + # freertos SRC + list(APPEND SDK_SOURCE_FILES + ${NRF5_SDK_PATH}/external/freertos/source/croutine.c + ${NRF5_SDK_PATH}/external/freertos/source/event_groups.c + ${NRF5_SDK_PATH}/external/freertos/source/portable/MemMang/heap_1.c + ${NRF5_SDK_PATH}/external/freertos/source/list.c + ${NRF5_SDK_PATH}/external/freertos/portable/GCC/nrf52/port.c + ${NRF5_SDK_PATH}/external/freertos/portable/CMSIS/nrf52/port_cmsis.c + ${NRF5_SDK_PATH}/external/freertos/portable/CMSIS/nrf52/port_cmsis_systick.c + ${NRF5_SDK_PATH}/external/freertos/source/queue.c + ${NRF5_SDK_PATH}/external/freertos/source/stream_buffer.c + ${NRF5_SDK_PATH}/external/freertos/source/tasks.c + ${NRF5_SDK_PATH}/external/freertos/source/timers.c + ${NRF5_SDK_PATH}/components/libraries/timer/app_timer_freertos.c + ) + + # freertos include + include_directories( + ${NRF5_SDK_PATH}/external/freertos/source/include + ${NRF5_SDK_PATH}/external/freertos/portable/CMSIS/nrf52 + ${NRF5_SDK_PATH}/external/freertos/portable/GCC/nrf52 + ) + + # toolchain specific + include_directories( + "${NRF5_SDK_PATH}/components/toolchain/cmsis/include" + ) + + # libraries include + include_directories( + "${NRF5_SDK_PATH}/components/libraries/atomic" + "${NRF5_SDK_PATH}/components/libraries/atomic_fifo" + "${NRF5_SDK_PATH}/components/libraries/atomic_flags" + "${NRF5_SDK_PATH}/components/libraries/balloc" + "${NRF5_SDK_PATH}/components/libraries/bootloader/ble_dfu" + "${NRF5_SDK_PATH}/components/libraries/cli" + "${NRF5_SDK_PATH}/components/libraries/crc16" + "${NRF5_SDK_PATH}/components/libraries/crc32" + "${NRF5_SDK_PATH}/components/libraries/crypto" + "${NRF5_SDK_PATH}/components/libraries/csense" + "${NRF5_SDK_PATH}/components/libraries/csense_drv" + "${NRF5_SDK_PATH}/components/libraries/delay" + "${NRF5_SDK_PATH}/components/libraries/ecc" + "${NRF5_SDK_PATH}/components/libraries/experimental_section_vars" + "${NRF5_SDK_PATH}/components/libraries/experimental_task_manager" + "${NRF5_SDK_PATH}/components/libraries/fds" + "${NRF5_SDK_PATH}/components/libraries/fstorage" + "${NRF5_SDK_PATH}/components/libraries/gfx" + "${NRF5_SDK_PATH}/components/libraries/gpiote" + "${NRF5_SDK_PATH}/components/libraries/hardfault" + "${NRF5_SDK_PATH}/components/libraries/hci" + "${NRF5_SDK_PATH}/components/libraries/led_softblink" + "${NRF5_SDK_PATH}/components/libraries/log" + "${NRF5_SDK_PATH}/components/libraries/log/src" + "${NRF5_SDK_PATH}/components/libraries/low_power_pwm" + "${NRF5_SDK_PATH}/components/libraries/mem_manager" + "${NRF5_SDK_PATH}/components/libraries/memobj" + "${NRF5_SDK_PATH}/components/libraries/mpu" + "${NRF5_SDK_PATH}/components/libraries/mutex" + "${NRF5_SDK_PATH}/components/libraries/pwm" + "${NRF5_SDK_PATH}/components/libraries/pwr_mgmt" + "${NRF5_SDK_PATH}/components/libraries/queue" + "${NRF5_SDK_PATH}/components/libraries/ringbuf" + "${NRF5_SDK_PATH}/components/libraries/scheduler" + "${NRF5_SDK_PATH}/components/libraries/sdcard" + "${NRF5_SDK_PATH}/components/libraries/slip" + "${NRF5_SDK_PATH}/components/libraries/sortlist" + "${NRF5_SDK_PATH}/components/libraries/spi_mngr" + "${NRF5_SDK_PATH}/components/libraries/stack_guard" + "${NRF5_SDK_PATH}/components/libraries/strerror" + "${NRF5_SDK_PATH}/components/libraries/svc" + "${NRF5_SDK_PATH}/components/libraries/timer" + "${NRF5_SDK_PATH}/components/libraries/twi_mngr" + "${NRF5_SDK_PATH}/components/libraries/twi_sensor" + "${NRF5_SDK_PATH}/components/libraries/usbd" + "${NRF5_SDK_PATH}/components/libraries/usbd/class/audio" + "${NRF5_SDK_PATH}/components/libraries/usbd/class/cdc" + "${NRF5_SDK_PATH}/components/libraries/usbd/class/cdc/acm" + "${NRF5_SDK_PATH}/components/libraries/usbd/class/hid" + "${NRF5_SDK_PATH}/components/libraries/usbd/class/hid/generic" + "${NRF5_SDK_PATH}/components/libraries/usbd/class/hid/kbd" + "${NRF5_SDK_PATH}/components/libraries/usbd/class/hid/mouse" + "${NRF5_SDK_PATH}/components/libraries/usbd/class/msc" + "${NRF5_SDK_PATH}/components/libraries/util" + ) + + # librarires sources + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/atomic/nrf_atomic.c" + "${NRF5_SDK_PATH}/components/libraries/balloc/nrf_balloc.c" + "${NRF5_SDK_PATH}/components/libraries/util/nrf_assert.c" + "${NRF5_SDK_PATH}/components/libraries/util/app_error.c" + "${NRF5_SDK_PATH}/components/libraries/util/app_error_weak.c" + "${NRF5_SDK_PATH}/components/libraries/util/app_error_handler_gcc.c" + "${NRF5_SDK_PATH}/components/libraries/util/app_util_platform.c" + "${NRF5_SDK_PATH}/components/libraries/log/src/nrf_log_backend_rtt.c" + "${NRF5_SDK_PATH}/components/libraries/log/src/nrf_log_backend_serial.c" +# "${NRF5_SDK_PATH}/components/libraries/log/src/nrf_log_backend_uart.c" + "${NRF5_SDK_PATH}/components/libraries/log/src/nrf_log_default_backends.c" + "${NRF5_SDK_PATH}/components/libraries/log/src/nrf_log_frontend.c" + "${NRF5_SDK_PATH}/components/libraries/log/src/nrf_log_str_formatter.c" + "${NRF5_SDK_PATH}/components/libraries/memobj/nrf_memobj.c" + "${NRF5_SDK_PATH}/components/libraries/ringbuf/nrf_ringbuf.c" + "${NRF5_SDK_PATH}/components/libraries/strerror/nrf_strerror.c" + ) + + # Segger RTT + include_directories( + "${NRF5_SDK_PATH}/external/segger_rtt/" + ) + + #segger rtt + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c" + "${NRF5_SDK_PATH}/external/segger_rtt/SEGGER_RTT.c" + "${NRF5_SDK_PATH}/external/segger_rtt/SEGGER_RTT_printf.c" + ) + + + # Other external + include_directories( + "${NRF5_SDK_PATH}/external/fprintf/" +# "${NRF5_SDK_PATH}/external/utf_converter/" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/external/utf_converter/utf.c" + "${NRF5_SDK_PATH}/external/fprintf/nrf_fprintf.c" + "${NRF5_SDK_PATH}/external/fprintf/nrf_fprintf_format.c" + ) + + #BLE S132 + include_directories( + "${NRF5_SDK_PATH}/components/ble/common" + "${NRF5_SDK_PATH}/components/ble/ble_advertising" + "${NRF5_SDK_PATH}/components/ble/ble_services/ble_bas" + "${NRF5_SDK_PATH}/components/ble/ble_services/ble_hrs" + "${NRF5_SDK_PATH}/components/ble/ble_services/ble_dis" + "${NRF5_SDK_PATH}/components/ble/nrf_ble_gatt" + "${NRF5_SDK_PATH}/components/libraries/sensorsim" + "${NRF5_SDK_PATH}/components/ble/peer_manager" + "${NRF5_SDK_PATH}/components/ble/nrf_ble_qwr" + ) + + LIST(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}//components/ble/common/ble_srv_common.c" + "${NRF5_SDK_PATH}/components/ble/ble_advertising/ble_advertising.c" + "${NRF5_SDK_PATH}/components/ble/common/ble_advdata.c" + "${NRF5_SDK_PATH}/components/ble/ble_services/ble_bas/ble_bas.c" + "${NRF5_SDK_PATH}/components/ble/ble_services/ble_hrs/ble_hrs.c" + "${NRF5_SDK_PATH}/components/ble/ble_services/ble_dis/ble_dis.c" + "${NRF5_SDK_PATH}/components/ble/nrf_ble_gatt/nrf_ble_gatt.c" + "${NRF5_SDK_PATH}/components/libraries/sensorsim/sensorsim.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_manager.c" + "${NRF5_SDK_PATH}/components/ble/nrf_ble_qwr/nrf_ble_qwr.c" + "${NRF5_SDK_PATH}/components/ble/common/ble_conn_state.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/auth_status_tracker.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/gatt_cache_manager.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/gatts_cache_manager.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/id_manager.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_data_storage.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_database.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_id.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_manager.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_manager_handler.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/pm_buffer.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/security_dispatcher.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/security_manager.c" + "${NRF5_SDK_PATH}/components/ble/common/ble_conn_state.c" + "${NRF5_SDK_PATH}/components/ble/common/ble_conn_params.c" + "${NRF5_SDK_PATH}/components/ble/common/ble_conn_state.c" + "${NRF5_SDK_PATH}/components/libraries/atomic_flags/nrf_atflags.c" + "${NRF5_SDK_PATH}/components/libraries/fds/fds.c" + "${NRF5_SDK_PATH}/components/libraries/fstorage/nrf_fstorage.c" + "${NRF5_SDK_PATH}/components/libraries/fstorage/nrf_fstorage_sd.c" + "${NRF5_SDK_PATH}/components/libraries/atomic_fifo/nrf_atfifo.c" + "${NRF5_SDK_PATH}/components/softdevice/common/nrf_sdh.c" + "${NRF5_SDK_PATH}/components/softdevice/common/nrf_sdh_ble.c" + "${NRF5_SDK_PATH}/components/softdevice/common/nrf_sdh_freertos.c" + "${NRF5_SDK_PATH}/components/softdevice/common/nrf_sdh_soc.c" + "${NRF5_SDK_PATH}/components/libraries/experimental_section_vars/nrf_section_iter.c" + "${NRF5_SDK_PATH}/components/libraries/bsp/bsp_btn_ble.c" + "${NRF5_SDK_PATH}/components/libraries/hardfault/hardfault_implementation.c" + "${NRF5_SDK_PATH}/components/libraries/hardfault/nrf52/handler/hardfault_handler_gcc.c" + ) + + + # adds target for erasing and flashing the board with a softdevice + add_custom_target(FLASH_SOFTDEVICE ALL + COMMAND ${NRFJPROG} --program ${SOFTDEVICE_PATH} -f ${NRF_TARGET} --sectorerase + COMMAND sleep 0.5s + COMMAND ${NRFJPROG} --reset -f ${NRF_TARGET} + COMMENT "flashing SoftDevice" + ) + + add_custom_target(FLASH_ERASE ALL + COMMAND ${NRFJPROG} --eraseall -f ${NRF_TARGET} + COMMENT "erasing flashing" + ) + + if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") + set(TERMINAL "open") + elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") + set(TERMINAL "sh") + else() + set(TERMINAL "gnome-terminal") + endif() + + add_custom_target(START_JLINK ALL + COMMAND ${TERMINAL} "${DIR_OF_nRF5x_CMAKE}/runJLinkGDBServer-${NRF_TARGET}" + COMMAND ${TERMINAL} "${DIR_OF_nRF5x_CMAKE}/runJLinkExe-${NRF_TARGET}" + COMMAND sleep 2s + COMMAND ${TERMINAL} "${DIR_OF_nRF5x_CMAKE}/runJLinkRTTClient" + COMMENT "started JLink commands" + ) + +endmacro(nRF5x_setup) + +# adds a target for comiling and flashing an executable +macro(nRF5x_addExecutable EXECUTABLE_NAME SOURCE_FILES) + # executable + add_executable(${EXECUTABLE_NAME} ${SDK_SOURCE_FILES} ${SOURCE_FILES}) + set_target_properties(${EXECUTABLE_NAME} PROPERTIES SUFFIX ".out") + set_target_properties(${EXECUTABLE_NAME} PROPERTIES LINK_FLAGS "-Wl,-Map=${EXECUTABLE_NAME}.map") + + # additional POST BUILD setps to create the .bin and .hex files + add_custom_command(TARGET ${EXECUTABLE_NAME} + POST_BUILD + COMMAND ${CMAKE_SIZE_UTIL} ${EXECUTABLE_NAME}.out + COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE_NAME}.out "${EXECUTABLE_NAME}.bin" + COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_NAME}.out "${EXECUTABLE_NAME}.hex" + COMMENT "post build steps for ${EXECUTABLE_NAME}") + + # custom target for flashing the board + add_custom_target("FLASH_${EXECUTABLE_NAME}" ALL + DEPENDS ${EXECUTABLE_NAME} + COMMAND ${NRFJPROG} --program ${EXECUTABLE_NAME}.hex -f ${NRF_TARGET} --sectorerase + COMMAND sleep 0.5s + COMMAND ${NRFJPROG} --reset -f ${NRF_TARGET} + COMMENT "flashing ${EXECUTABLE_NAME}.hex" + ) + +endmacro() + +# adds app-level scheduler library +macro(nRF5x_addAppScheduler) + include_directories( + "${NRF5_SDK_PATH}/components/libraries/scheduler" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/scheduler/app_scheduler.c" + ) + +endmacro(nRF5x_addAppScheduler) + +# adds app-level FIFO libraries +macro(nRF5x_addAppFIFO) + include_directories( + "${NRF5_SDK_PATH}/components/libraries/fifo" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/fifo/app_fifo.c" + ) + +endmacro(nRF5x_addAppFIFO) + +# adds app-level Timer libraries +macro(nRF5x_addAppTimer) + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/timer/app_timer.c" + ) +endmacro(nRF5x_addAppTimer) + +# adds app-level UART libraries +macro(nRF5x_addAppUART) + include_directories( + "${NRF5_SDK_PATH}/components/libraries/uart" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/uart/app_uart_fifo.c" + ) + +endmacro(nRF5x_addAppUART) + +# adds app-level Button library +macro(nRF5x_addAppButton) + include_directories( + "${NRF5_SDK_PATH}/components/libraries/button" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/button/app_button.c" + ) + +endmacro(nRF5x_addAppButton) + +# adds app-level GPIOTE library +macro(nRF5x_addAppGpiote) + include_directories( + "${NRF5_SDK_PATH}/components/libraries/gpiote" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/gpiote/app_gpiote.c" + ) + +endmacro(nRF5x_addAppGpiote) + +# adds BSP (board support package) library +macro(nRF5x_addBSP WITH_BLE_BTN WITH_ANT_BTN WITH_NFC) + include_directories( + "${NRF5_SDK_PATH}/components/libraries/bsp" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/bsp/bsp.c" + ) + + if (${WITH_BLE_BTN}) + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/bsp/bsp_btn_ble.c" + ) + endif () + + if (${WITH_ANT_BTN}) + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/bsp/bsp_btn_ant.c" + ) + endif () + + if (${WITH_NFC}) + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/bsp/bsp_nfc.c" + ) + endif () + +endmacro(nRF5x_addBSP) + +# adds Bluetooth Low Energy GATT support library +macro(nRF5x_addBLEGATT) + include_directories( + "${NRF5_SDK_PATH}/components/ble/nrf_ble_gatt" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/ble/nrf_ble_gatt/nrf_ble_gatt.c" + ) + +endmacro(nRF5x_addBLEGATT) + +# adds Bluetooth Low Energy advertising support library +macro(nRF5x_addBLEAdvertising) + include_directories( + "${NRF5_SDK_PATH}/components/ble/ble_advertising" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/ble/ble_advertising/ble_advertising.c" + ) + +endmacro(nRF5x_addBLEAdvertising) + +# adds Bluetooth Low Energy advertising support library +macro(nRF5x_addBLEPeerManager) + include_directories( + "${NRF5_SDK_PATH}/components/ble/peer_manager" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/ble/peer_manager/auth_status_tracker.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/gatt_cache_manager.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/gatts_cache_manager.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/id_manager.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/nrf_ble_lesc.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_data_storage.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_database.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_id.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_manager.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/peer_manager_handler.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/pm_buffer.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/security_dispatcher.c" + "${NRF5_SDK_PATH}/components/ble/peer_manager/security_manager.c" + ) + +endmacro(nRF5x_addBLEPeerManager) + +# adds app-level FDS (flash data storage) library +macro(nRF5x_addAppFDS) + include_directories( + "${NRF5_SDK_PATH}/components/libraries/fds" + "${NRF5_SDK_PATH}/components/libraries/fstorage" + "${NRF5_SDK_PATH}/components/libraries/experimental_section_vars" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/libraries/fds/fds.c" + "${NRF5_SDK_PATH}/components/libraries/fstorage/nrf_fstorage.c" + "${NRF5_SDK_PATH}/components/libraries/fstorage/nrf_fstorage_sd.c" + "${NRF5_SDK_PATH}/components/libraries/fstorage/nrf_fstorage_nvmc.c" + ) + +endmacro(nRF5x_addAppFDS) + +# adds NFC library +# macro(nRF5x_addNFC) +# # NFC includes +# include_directories( +# "${NRF5_SDK_PATH}/components/nfc/ndef/conn_hand_parser" +# "${NRF5_SDK_PATH}/components/nfc/ndef/conn_hand_parser/ac_rec_parser" +# "${NRF5_SDK_PATH}/components/nfc/ndef/conn_hand_parser/ble_oob_advdata_parser" +# "${NRF5_SDK_PATH}/components/nfc/ndef/conn_hand_parser/le_oob_rec_parser" +# "${NRF5_SDK_PATH}/components/nfc/ndef/connection_handover/ac_rec" +# "${NRF5_SDK_PATH}/components/nfc/ndef/connection_handover/ble_oob_advdata" +# "${NRF5_SDK_PATH}/components/nfc/ndef/connection_handover/ble_pair_lib" +# "${NRF5_SDK_PATH}/components/nfc/ndef/connection_handover/ble_pair_msg" +# "${NRF5_SDK_PATH}/components/nfc/ndef/connection_handover/common" +# "${NRF5_SDK_PATH}/components/nfc/ndef/connection_handover/ep_oob_rec" +# "${NRF5_SDK_PATH}/components/nfc/ndef/connection_handover/hs_rec" +# "${NRF5_SDK_PATH}/components/nfc/ndef/connection_handover/le_oob_rec" +# "${NRF5_SDK_PATH}/components/nfc/ndef/generic/message" +# "${NRF5_SDK_PATH}/components/nfc/ndef/generic/record" +# "${NRF5_SDK_PATH}/components/nfc/ndef/launchapp" +# "${NRF5_SDK_PATH}/components/nfc/ndef/parser/message" +# "${NRF5_SDK_PATH}/components/nfc/ndef/parser/record" +# "${NRF5_SDK_PATH}/components/nfc/ndef/text" +# "${NRF5_SDK_PATH}/components/nfc/ndef/uri" +# "${NRF5_SDK_PATH}/components/nfc/t2t_lib" +# "${NRF5_SDK_PATH}/components/nfc/t2t_parser" +# "${NRF5_SDK_PATH}/components/nfc/t4t_lib" +# "${NRF5_SDK_PATH}/components/nfc/t4t_parser/apdu" +# "${NRF5_SDK_PATH}/components/nfc/t4t_parser/cc_file" +# "${NRF5_SDK_PATH}/components/nfc/t4t_parser/hl_detection_procedure" +# "${NRF5_SDK_PATH}/components/nfc/t4t_parser/tlv" +# ) +# +# list(APPEND SDK_SOURCE_FILES +# "${NRF5_SDK_PATH}/components/nfc" +# ) +# +# endmacro(nRF5x_addNFC) + +macro(nRF5x_addBLEService NAME) + include_directories( + "${NRF5_SDK_PATH}/components/ble/ble_services/${NAME}" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/components/ble/ble_services/${NAME}/${NAME}.c" + ) + +endmacro(nRF5x_addBLEService) diff --git a/cmake-nRF5x/LICENSE b/cmake-nRF5x/LICENSE new file mode 100644 index 00000000..7742b579 --- /dev/null +++ b/cmake-nRF5x/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Polidea + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.
\ No newline at end of file diff --git a/cmake-nRF5x/arm-gcc-toolchain.cmake b/cmake-nRF5x/arm-gcc-toolchain.cmake new file mode 100644 index 00000000..32977422 --- /dev/null +++ b/cmake-nRF5x/arm-gcc-toolchain.cmake @@ -0,0 +1,52 @@ +# check if already run. Changing the compiler var can cause reconfigure so don't want to do it again +if(DEFINED ARM_GCC_TOOLCHAIN) + return() +endif() +set(ARM_GCC_TOOLCHAIN TRUE) + +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR ARM) + +set(TOOLCHAIN_PREFIX arm-none-eabi-) + +if (NOT DEFINED ARM_NONE_EABI_TOOLCHAIN_BIN_PATH) + if(MINGW OR CYGWIN OR WIN32) + set(UTIL_SEARCH_CMD where) + elseif(UNIX OR APPLE) + set(UTIL_SEARCH_CMD which) + endif() + execute_process( + COMMAND ${UTIL_SEARCH_CMD} ${TOOLCHAIN_PREFIX}gcc + OUTPUT_VARIABLE BINUTILS_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + get_filename_component(ARM_NONE_EABI_TOOLCHAIN_BIN_PATH ${BINUTILS_PATH} DIRECTORY) +endif () + +# Without that flag CMake is not able to pass test compilation check +if (${CMAKE_VERSION} VERSION_EQUAL "3.6.0" OR ${CMAKE_VERSION} VERSION_GREATER "3.6") + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) +else() + set(CMAKE_EXE_LINKER_FLAGS_INIT "--specs=nosys.specs") +endif() + +set(TOOLCHAIN_PATH_AND_PREFIX ${ARM_NONE_EABI_TOOLCHAIN_BIN_PATH}/${TOOLCHAIN_PREFIX}) + +set(CMAKE_C_COMPILER ${TOOLCHAIN_PATH_AND_PREFIX}gcc) + +set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) + +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH_AND_PREFIX}c++) + +set(CMAKE_AR ${TOOLCHAIN_PATH_AND_PREFIX}ar) +set(CMAKE_RANLIB ${TOOLCHAIN_PATH_AND_PREFIX}ranlib) + +set(CMAKE_OBJCOPY ${TOOLCHAIN_PATH_AND_PREFIX}objcopy CACHE INTERNAL "objcopy tool") +set(CMAKE_SIZE_UTIL ${TOOLCHAIN_PATH_AND_PREFIX}size CACHE INTERNAL "size tool") + +set(CMAKE_SYSROOT ${ARM_NONE_EABI_TOOLCHAIN_BIN_PATH}) +set(CMAKE_FIND_ROOT_PATH ${ARM_NONE_EABI_TOOLCHAIN_BIN_PATH}) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
\ No newline at end of file diff --git a/cmake-nRF5x/example/CMakeLists.txt b/cmake-nRF5x/example/CMakeLists.txt new file mode 100644 index 00000000..9d002518 --- /dev/null +++ b/cmake-nRF5x/example/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.12) + +set(NRF_TARGET nrf52) + +if (NOT DEFINED ARM_NONE_EABI_TOOLCHAIN_PATH) + set(ARM_NONE_EABI_TOOLCHAIN_PATH "/usr/local/bin") +endif () + +set(NRF5_SDK_PATH "${CMAKE_CURRENT_LIST_DIR}/../../toolchains/nRF5/nRF5_SDK") +set(NRFJPROG "${CMAKE_CURRENT_LIST_DIR}/../../toolchains/nRF5/nrfjprog/nrfjprog") + +include("${CMAKE_CURRENT_LIST_DIR}/../CMake_nRF5x.cmake") + +nRF5x_toolchainSetup() + +project(ExampleProject C) + +add_subdirectory(src)
\ No newline at end of file diff --git a/cmake-nRF5x/example/README.md b/cmake-nRF5x/example/README.md new file mode 100644 index 00000000..753d63f9 --- /dev/null +++ b/cmake-nRF5x/example/README.md @@ -0,0 +1,3 @@ +# Example + +This is an example to build the blinky project. It assumes nRF5 SDK is in `../../toolchains/nRF5/nRF5_SDK`. If not, modify `CMakeLists.txt`
\ No newline at end of file diff --git a/cmake-nRF5x/example/src/CMakeLists.txt b/cmake-nRF5x/example/src/CMakeLists.txt new file mode 100644 index 00000000..63ac6056 --- /dev/null +++ b/cmake-nRF5x/example/src/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.12) + +project(BlinkyExample C ASM) + +# define some variables just for this example to determine file locations +set(NRF_PROJECT_NAME ble_app_blinky) +set(NRF_BOARD pca10040) +set(NRF_SOFTDEVICE s132) + +# define some convenience variables to point to example project directories +set(NRF_PROJECT_PATH ${NRF5_SDK_PATH}/examples/ble_peripheral/${NRF_PROJECT_NAME}) +set(NRF_PROJECT_DEVICE_PATH ${NRF_PROJECT_PATH}/${NRF_BOARD}/${NRF_SOFTDEVICE}) + +# you can specify the location of the linker script if desired instead of using a specific file name +set(NRF5_LINKER_SCRIPT ${NRF_PROJECT_DEVICE_PATH}/armgcc/${NRF_PROJECT_NAME}_gcc_${NRF_TARGET}.ld) + +nRF5x_setup() + +nRF5x_addAppScheduler() +nRF5x_addAppFIFO() +nRF5x_addAppTimer() +nRF5x_addAppUART() +nRF5x_addAppButton() +nRF5x_addBSP(TRUE FALSE FALSE) +nRF5x_addBLEGATT() + +nRF5x_addBLEService(ble_lbs) + +add_definitions(-DCONFIG_GPIO_AS_PINRESET) + +# usually you would include files in this directory here, like so: +#include_directories(.) +#list(APPEND SOURCE_FILES main.c) + +# for example projects we include the example source files +include_directories(${NRF_PROJECT_DEVICE_PATH}/config) +list(APPEND SOURCE_FILES ${NRF_PROJECT_PATH}/main.c) + +nRF5x_addExecutable(BlinkyExample "${SOURCE_FILES}")
\ No newline at end of file diff --git a/cmake-nRF5x/readme.md b/cmake-nRF5x/readme.md new file mode 100755 index 00000000..2ce76892 --- /dev/null +++ b/cmake-nRF5x/readme.md @@ -0,0 +1,152 @@ +# cmake-nRF5x + +Cmake script for projects targeting Nordic Semiconductor nRF5x series devices using the GCC toolchain from ARM. + +# Dependencies + +The script makes use of the following tools: + +- nRF5x SDK by Nordic Semiconductor - SoC specific drivers and libraries (also includes a lot of examples) +- JLink by Segger - interface software for the JLink familiy of programmers +- nrfjprog by Nordic Semiconductor - Wrapper utility around JLink +- arm-non-eabi-gcc by ARM and the GCC Team - compiler toolchain for embedded (= bare metal) ARM chips + +# Setup + +1. Download this repo (or add as submodule) to the directory `cmake-nRF5x` in your project + +1. Search the SDK `example` directory for a `sdk_config.h`, `main.c` and a linker script (normally named `<project_name>_gcc_<chip familly>.ld`) that fits your chip and project needs. + +1. Copy the `sdk_config.h` and the project `main.c` into a new directory `src`. Modify them as required for your project. + +1. Copy the linker script into the root of your project. Rename it to just `gcc_<chip familly>.ld` For example: + + ``` + gcc_nrf51.ld + gcc_nrf52.ld + ``` + +1. Create a new `CMakeLists.txt` file at the same level. Add the project standard cmake project header + + A typical file may look like this: + + ``` + cmake_minimum_required(VERSION 3.6) + + set(NRF_TARGET "nrf52") + + # optional, won't be used if passing toolchain on command line (see below) + if (NOT DEFINED ARM_NONE_EABI_TOOLCHAIN_PATH) + set(ARM_NONE_EABI_TOOLCHAIN_PATH "/usr/local/bin") + endif () + + set(NRF5_SDK_PATH "${CMAKE_SOURCE_DIR}/toolchains/nRF5/nRF5_SDK") + set(NRFJPROG "${CMAKE_SOURCE_DIR}/toolchains/nRF5/nrfjprog/nrfjprog") + + include("cmake-nRF5x/CMake_nRF5x.cmake") + + # must be called before first project call or add_subdirectory unless passing on command line + nRF5x_toolchainSetup() + + project(YourProjectName C ASM) + + nRF5x_setup() + + nRF5x_addAppScheduler() + nRF5x_addAppFIFO() + nRF5x_addAppTimer() + nRF5x_addAppUART() + nRF5x_addAppButton() + nRF5x_addBSP(TRUE FALSE FALSE) + nRF5x_addBLEGATT() + + + nRF5x_addBLEService(ble_bas) + + add_definitions(-DCONFIG_GPIO_AS_PINRESET) + + include_directories("./src") + list(APPEND SOURCE_FILES "./src/main.c") + + nRF5x_addExecutable(${PROJECT_NAME} "${SOURCE_FILES}") + ``` + + Adjust as needed for your project. + + _Note_: you can add `CXX` between `C ASM` to add c++ support + +1. Optionally add additional libraries: + + Only the most common drivers and libraries are wrapped with cmake macros. + + To include BLE services, use `nRF5x_addBLEService(<service name>)`. + + For other SDK libraries you can use `include_directories` and `list(APPEND SDK_SOURCE_FILES ...)` to add them. For example: + + ```cmake + include_directories( + "${NRF5_SDK_PATH}/<library header directory path>" + ) + + list(APPEND SDK_SOURCE_FILES + "${NRF5_SDK_PATH}/<library source file path>" + ) + ``` + + +# Build + +After setup you can use cmake as usual: + +1. Generate the actual build files (out-of-source builds are strongly recomended): + + ```commandline + cmake -H. -B"cmake-build" -G "Unix Makefiles" + ``` + You can optionally pass the toolchain to `cmake` when configuring: + ``` + -DCMAKE_TOOLCHAIN_PATH=cmake-nRF5x/arm-gcc-toolchain.cmake + ``` + but if you do so you must ensure the toolchain binaries are available in your environment PATH (i.e. work on the command line without specifying absolute path) + +2. Build your app: + + ```commandline + cmake --build "cmake-build" --target <your project name> + ``` + +# Flash + +In addition to the build target (named like your project) the script adds some support targets: + +`FLASH_SOFTDEVICE` To flash a nRF softdevice to the SoC (typically done only once for each SoC) + +```commandline +cmake --build "cmake-build" --target FLASH_SOFTDEVICE +``` + +`FLASH_<your project name>` To flash your application (this will also rebuild your App first) + +```commandline +cmake --build "cmake-build" --target FLASH_<your project name> +``` + +`FLASH_ERASE` To completely erase the SoC flash + +```commandline +cmake --build "cmake-build" --target FLASH_ERASE +``` + +# JLink Applications + +To start the gdb server and RTT terminal, build the target `START_JLINK`: + +```commandline +cmake --build "cmake-build" --target START_JLINK +``` + +# License + +MIT for the `CMake_nRF5x.cmake` file. + +Please note that the nRF5x SDK by Nordic Semiconductor is covered by it's own license and shouldn't be re-distributed. diff --git a/cmake-nRF5x/runJLinkExe-nrf51 b/cmake-nRF5x/runJLinkExe-nrf51 new file mode 100755 index 00000000..09b63ae6 --- /dev/null +++ b/cmake-nRF5x/runJLinkExe-nrf51 @@ -0,0 +1,3 @@ +#!/bin/bash + +JLinkExe -device nrf51 -if swd -speed 4000 -autoconnect 1
\ No newline at end of file diff --git a/cmake-nRF5x/runJLinkExe-nrf52 b/cmake-nRF5x/runJLinkExe-nrf52 new file mode 100755 index 00000000..009a9f10 --- /dev/null +++ b/cmake-nRF5x/runJLinkExe-nrf52 @@ -0,0 +1,3 @@ +#!/bin/bash + +JLinkExe -device nrf52 -if swd -speed 4000 -autoconnect 1
\ No newline at end of file diff --git a/cmake-nRF5x/runJLinkGDBServer-nrf51 b/cmake-nRF5x/runJLinkGDBServer-nrf51 new file mode 100755 index 00000000..d4631c30 --- /dev/null +++ b/cmake-nRF5x/runJLinkGDBServer-nrf51 @@ -0,0 +1,3 @@ +#!/bin/bash + +JLinkGDBServer -device nrf51 -strict -timeout 0 -nogui -if swd -speed 1000 -endian little
\ No newline at end of file diff --git a/cmake-nRF5x/runJLinkGDBServer-nrf52 b/cmake-nRF5x/runJLinkGDBServer-nrf52 new file mode 100755 index 00000000..a0a782bf --- /dev/null +++ b/cmake-nRF5x/runJLinkGDBServer-nrf52 @@ -0,0 +1,3 @@ +#!/bin/bash + +JLinkGDBServer -device nrf52 -strict -timeout 0 -nogui -if swd -speed 1000 -endian little
\ No newline at end of file diff --git a/cmake-nRF5x/runJLinkRTTClient b/cmake-nRF5x/runJLinkRTTClient new file mode 100755 index 00000000..7cdfc619 --- /dev/null +++ b/cmake-nRF5x/runJLinkRTTClient @@ -0,0 +1,3 @@ +#!/bin/bash + +JLinkRTTClient
\ No newline at end of file |