aboutsummaryrefslogtreecommitdiff
path: root/nrf51/utils.cmake
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2016-09-04 22:12:32 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2016-09-04 22:12:32 +0200
commitd807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b (patch)
tree6e913d0effc92483b0f4110b7003e81aea425bad /nrf51/utils.cmake
downloadmcu.cmake-d807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b.tar.gz
mcu.cmake-d807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b.tar.bz2
mcu.cmake-d807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b.tar.xz
mcu.cmake-d807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b.zip
o Initial import of mcu.cmake containing old Intel Quark D2000 cmake code and new NRF51 code.
The Intel code is not useful and the NRF code needs to be updated to support NRF52 chips.
Diffstat (limited to 'nrf51/utils.cmake')
-rw-r--r--nrf51/utils.cmake74
1 files changed, 74 insertions, 0 deletions
diff --git a/nrf51/utils.cmake b/nrf51/utils.cmake
new file mode 100644
index 0000000..ec92b78
--- /dev/null
+++ b/nrf51/utils.cmake
@@ -0,0 +1,74 @@
+function(mcu_add_executable TARGET)
+ target_sources(${TARGET} PUBLIC
+ "${MCU_NRF51_SDK_PATH}/components/toolchain/system_nrf51.c"
+ "${MCU_NRF51_SDK_PATH}/components/toolchain/gcc/gcc_startup_nrf51.S")
+ target_include_directories(${TARGET} PUBLIC
+ ${MCU_NRF51_SDK_PATH}/components/device
+ ${MCU_NRF51_SDK_PATH}/components/toolchain
+ ${MCU_NRF51_SDK_PATH}/components/toolchain/gcc)
+
+ target_compile_definitions(${TARGET} PUBLIC NRF51)
+
+ target_compile_options(${TARGET} PUBLIC "-mcpu=cortex-m0" "-mthumb" "-mabi=aapcs" "--std=gnu99" "-Wall" "-mfloat-abi=soft")
+
+ target_include_directories(${TARGET} PUBLIC
+ ${MCU_NRF51_SDK_PATH}/components/toolchain/cmsis/include)
+
+ target_link_libraries(${TARGET} PUBLIC "-L${MCU_NRF51_SDK_PATH}/components/toolchain/gcc")
+ target_link_libraries(${TARGET} PUBLIC "-T${MCU_NRF51_SDK_PATH}/components/toolchain/gcc/nrf51_xxac.ld")
+endfunction()
+
+function(mcu_nrf51_add_softdevice TARGET SOFTDEVICE)
+
+ if (SOFTDEVICE STREQUAL s130)
+ string(TOUPPER D_SOFTDEVICE ${SOFTDEVICE})
+ target_include_directories(${TARGET} PUBLIC ${MCU_NRF51_SDK_PATH}/components/softdevice/${SOFTDEVICE}/headers)
+ else ()
+ message(FATAL_ERROR "Unsupported softdevice: ${SOFTDEVICE}")
+ endif ()
+
+ target_compile_definitions(${TARGET} PUBLIC ${D_SOFTDEVICE})
+ target_compile_definitions(${TARGET} PUBLIC SOFTDEVICE_PRESENT)
+endfunction()
+
+# Toolchain files are executed many times when detecting c/c++ compilers, but it will only read the cache on the first
+# exeuction so the paths has to be saved to the environment as it is shared between executions.
+function(mcu_nrf51_detect_sdk)
+ if (MCU_NRF51_SDK_PATH)
+ # message("NRF51 SDK already found: ${MCU_NRF51_SDK_PATH}")
+ return()
+ endif ()
+
+ set(MCU_NRF51_SDK_PATH "$ENV{_MCU_NRF51_SDK_PATH}")
+
+ if (MCU_NRF51_SDK_PATH)
+ # message("NRF51 SDK already found from ENV: ${MCU_NRF51_SDK_PATH}")
+ return()
+ endif ()
+
+ message("Detecting NRF51 SDK")
+
+ if (NOT MCU_NRF51_SDK)
+ message(FATAL_ERROR "MCU_NRF51_SDK parameter cannot be empty.")
+ endif ()
+
+ # message("MCU_NRF51_SDK=${MCU_NRF51_SDK}")
+ get_filename_component(MCU_NRF51_SDK_PATH "${MCU_NRF51_SDK}" ABSOLUTE)
+ # message("MCU_NRF51_SDK_PATH=${MCU_NRF51_SDK_PATH}")
+
+ set(ENV{_MCU_NRF51_SDK_PATH} "${MCU_NRF51_SDK_PATH}")
+
+ set(NOTES ${MCU_NRF51_SDK_PATH}/documentation/release_notes.txt)
+
+ if (NOT EXISTS ${NOTES})
+ message(FATAL_ERROR "Could not find 'documentation/release_notes.txt' under NRF SDK path: ${NOTES}")
+ endif ()
+
+ file(READ ${NOTES} NOTES LIMIT 100)
+
+ # message("NOTES: ${NOTES}")
+ message("MCU_NRF51_SDK_VERSION: ${MCU_NRF51_VERSION}")
+
+ # string(SUBSTRING <string> <begin> <length> <output variable>)
+ set(MCU_NRF51_SDK_PATH "${MCU_NRF51_SDK_PATH}" CACHE PATH "" FORCE)
+endfunction()