summaryrefslogtreecommitdiff
path: root/cmake-nRF5x
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2019-11-17 20:47:04 +0100
committerJF <jf@codingfield.com>2019-11-17 20:47:04 +0100
commit2ea27e0cdac91cd4743d9f12496bb3f911d9efa9 (patch)
treeae6488be1be14c2b83aff6e69a6e622088fb093a /cmake-nRF5x
Initial commit
Diffstat (limited to 'cmake-nRF5x')
-rwxr-xr-xcmake-nRF5x/.gitignore2
-rwxr-xr-xcmake-nRF5x/CMake_nRF5x.cmake580
-rw-r--r--cmake-nRF5x/LICENSE21
-rw-r--r--cmake-nRF5x/arm-gcc-toolchain.cmake52
-rw-r--r--cmake-nRF5x/example/CMakeLists.txt18
-rw-r--r--cmake-nRF5x/example/README.md3
-rw-r--r--cmake-nRF5x/example/src/CMakeLists.txt39
-rwxr-xr-xcmake-nRF5x/readme.md152
-rwxr-xr-xcmake-nRF5x/runJLinkExe-nrf513
-rwxr-xr-xcmake-nRF5x/runJLinkExe-nrf523
-rwxr-xr-xcmake-nRF5x/runJLinkGDBServer-nrf513
-rwxr-xr-xcmake-nRF5x/runJLinkGDBServer-nrf523
-rwxr-xr-xcmake-nRF5x/runJLinkRTTClient3
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