From d842e7b6ff03298d9eecfc559894142a719b93af Mon Sep 17 00:00:00 2001 From: nvelozsavino Date: Mon, 16 Oct 2017 17:04:53 +0200 Subject: [PATCH 1/9] Enable full compilation and linking --- nrf5-sdk-to-clion.sh | 100 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 93 insertions(+), 7 deletions(-) diff --git a/nrf5-sdk-to-clion.sh b/nrf5-sdk-to-clion.sh index 790afc5..9b4cba5 100644 --- a/nrf5-sdk-to-clion.sh +++ b/nrf5-sdk-to-clion.sh @@ -18,25 +18,111 @@ set -e tmp_makefile="/tmp/CMakeLists-generator.mk" + + + \cat << 'EOF' > ${tmp_makefile} +LINKERSCRIPT:=`cat Makefile | sed -n 's/.*LINKER_SCRIPT\s\+:=\s\+\(.*\.ld\).*/\1/p'` +LINKER_SCRIPT:="$$$ \{CMAKE_SOURCE_DIR\}/"$(LINKERSCRIPT) include Makefile +OPT += -std=c99 +TEMPLATE_PATH:="$$$ \{CMAKE_SOURCE_DIR\}/"$(TEMPLATE_PATH) + generate: - $(foreach var, PROJECT_NAME SDK_ROOT PROJ_DIR SRC_FILES INC_FOLDERS CFLAGS CXXFLAGS, \ + @echo 'cmake_minimum_required(VERSION 3.4.0)' + + @echo 'FUNCTION(SET_COMPILER_OPTIONS TARGET)' + @echo ' target_compile_options($$$ {TARGET} PRIVATE' + @echo ' $$$ <$$$ :$$$ {CFLAGS}>' + @echo ' $$$ <$$$ :$$$ {CXXFLAGS}>' + @echo ' $$$ <$$$ :$$$ {ASMFLAGS}>' + @echo ' )' + @echo 'ENDFUNCTION()' + + @echo '' + @echo '' + + @echo 'FUNCTION(PRINT_SIZE_OF_TARGETS TARGET)' + @echo ' SET(FILENAME "$$$ {CMAKE_BINARY_DIR}/$$$ {TARGET}")' + @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_SIZE} $$$ {FILENAME})' + @echo 'ENDFUNCTION()' + + @echo '' + @echo '' + + + @echo 'SET(CMAKE_SYSTEM_NAME Generic)' + @echo 'SET(CMAKE_SYSTEM_PROCESSOR arm)' + @echo 'INCLUDE(CMakeForceCompiler)' + + @echo '' + @echo '' + + @echo 'SET(TOOLCHAIN_PREFIX "/usr")' + @echo 'SET(TARGET_TRIPLET "arm-none-eabi")' + @echo 'SET(TOOLCHAIN_BIN_DIR $$$ {TOOLCHAIN_PREFIX}/bin)' + @echo 'SET(TOOLCHAIN_INC_DIR $$$ {TOOLCHAIN_PREFIX}/$$$ {TARGET_TRIPLET}/include)' + @echo 'SET(TOOLCHAIN_LIB_DIR $$$ {TOOLCHAIN_PREFIX}/$$$ {TARGET_TRIPLET}/lib)' + @echo 'SET(CMAKE_SIZE $$$ {TOOLCHAIN_BIN_DIR}/$$$ {TARGET_TRIPLET}-size$$$ {TOOL_EXECUTABLE_SUFFIX} CACHE INTERNAL "size tool")' + + @echo '' + @echo '' + @echo '' + @echo '' + + + $(foreach var, PROJECT_NAME SDK_ROOT PROJ_DIR SRC_FILES INC_FOLDERS CFLAGS CXXFLAGS ASMFLAGS LDFLAGS LIB_FILES, \ echo "set($(var) $($(var)))" ; \ - echo ; \ ) + @echo '' + @echo '' + + + + @echo 'string(REPLACE ";" " " LDFLAGS "$$$ {LDFLAGS}")' + + @echo '' + @echo '' + + @echo 'set(CMAKE_C_FLAGS "" CACHE INTERNAL "c compiler flags")' + @echo 'set(CMAKE_CXX_FLAGS "" CACHE INTERNAL "c++ compiler flags")' + @echo 'set(CMAKE_ASM_FLAGS "" CACHE INTERNAL "asm compiler flags")' + @echo 'set(CMAKE_EXE_LINKER_FLAGS $$$ {LDFLAGS} CACHE INTERNAL "executable linker flags")' + + @echo '' + @echo '' + + @echo 'CMAKE_FORCE_C_COMPILER($$$ {TOOLCHAIN_BIN_DIR}/$$$ {TARGET_TRIPLET}-gcc$$$ {TOOL_EXECUTABLE_SUFFIX} GNU)' + @echo 'CMAKE_FORCE_CXX_COMPILER($$$ {TOOLCHAIN_BIN_DIR}/$$$ {TARGET_TRIPLET}-g++$$$ {TOOL_EXECUTABLE_SUFFIX} GNU)' + @echo 'SET(CMAKE_ASM_COMPILER $$$ {TOOLCHAIN_BIN_DIR}/$$$ {TARGET_TRIPLET}-gcc$$$ {TOOL_EXECUTABLE_SUFFIX})' + + @echo '' + @echo '' + + @echo '' + @echo '' + + - @echo 'cmake_minimum_required(VERSION 2.4.0)' @echo 'project($$$ {PROJECT_NAME})' + @echo 'enable_language(ASM)' + + @echo '' + @echo '' - @echo 'list(APPEND CFLAGS "-undef" "-D__GNUC__")' - @echo 'list(FILTER CFLAGS EXCLUDE REGEX mcpu)' - @echo 'string(REPLACE ";" " " CFLAGS "$$$ {CFLAGS}")' - @echo 'set(CMAKE_C_FLAGS $$$ {CFLAGS})' + @echo 'set(LIBS $$$ {LIB_FILES})' @echo 'include_directories($$$ {INC_FOLDERS})' @echo 'add_executable($$$ {PROJECT_NAME} $$$ {SRC_FILES})' + @echo 'target_link_libraries($$$ {PROJECT_NAME} PUBLIC $$$ {LIBS})' + + @echo '' + @echo '' + + + @echo 'SET_COMPILER_OPTIONS($$$ {PROJECT_NAME})' + @echo 'PRINT_SIZE_OF_TARGETS($$$ {PROJECT_NAME})' EOF \echo "cmake_minimum_required(VERSION 2.8.9)" > CMakeLists.txt From 41ffd533558384cff5aebca5fd6ea038ed45dbdf Mon Sep 17 00:00:00 2001 From: Nicolas Veloz Savino Date: Thu, 9 Nov 2017 11:29:22 +0100 Subject: [PATCH 2/9] Added nrf5-make2cmake file --- README.md | 23 +++--- nrf5-make2cmake.sh | 172 +++++++++++++++++++++++++++++++++++++++++++ nrf5-sdk-to-clion.sh | 141 +---------------------------------- 3 files changed, 188 insertions(+), 148 deletions(-) create mode 100755 nrf5-make2cmake.sh diff --git a/README.md b/README.md index 1c18386..e9eb181 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,19 @@ Hey there embedded developers, you deserve a modern IDE! Running this script from the root directory of your [nRF5-SDK](https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF5-SDK) will create CMakelists.txt files for all of the example projects in the SDK. -_Disclaimer: This will not let you build or flash your project from CLion but you will be able to navigate through your project and the SDK libraries._ +## How to convert all examples on the SDK to CLion +_Tested on Ubuntu 16.04 +1. Clone the repository or download the scripts nrf5-sdk-to-clion.sh and nrf5-make2cmake.sh +2. (optional) Add the path where the scripts are located to the PATH enviroment variable PATH +4. (optional) Create a backup for your current nrf5-SDK directory +5. `nrf5-sdk-to-clion.sh ` +6. Open _"CMakeLists.txt"_ for the desired project +7. From CLion, go to File-->Open and choose the root directory of the nRF5-SDK. +The last stage is needed since adding all of the example projects to the CMakeLists.txt file would overload CLion. + +## How to convert any Makefile (with nRF5-SDK structure) to CMake +_Tested on Ubuntu 16.04 +`nrf5-make2cmake.sh ` this will create a CMakeLists.txt on the same folder of the Makefile + -## How to use it -_Tested on Ubuntu 16.04 and macOS_ -1. (optional) Create a backup for your current nrf5-SDK directory -2. cd into the root of the nrf5-SDK directory -3. `curl -s https://raw.githubusercontent.com/Jumperr-labs/nrf5-sdk-clion/master/nrf5-sdk-to-clion.sh | bash` -4. Open _"./CMakeLists.txt"_ and uncomment the desired project's path (you can uncomment multiple projects) -5. From CLion, go to File-->Open and choose the root directory of the nRF5-SDK. -The last stage is needed since adding all of the example projects to the CMakeLists.txt file would overload CLion. diff --git a/nrf5-make2cmake.sh b/nrf5-make2cmake.sh new file mode 100755 index 0000000..d1241cc --- /dev/null +++ b/nrf5-make2cmake.sh @@ -0,0 +1,172 @@ +#!/usr/bin/env bash + +#Copyright 2017 Jumper Labs Ltd. + +#Licensed under the Apache License, Version 2.0 (the "License"); +#you may not use this file except in compliance with the License. +#You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +#Unless required by applicable law or agreed to in writing, software +#distributed under the License is distributed on an "AS IS" BASIS, +#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#See the License for the specific language governing permissions and +#limitations under the License. + +set -e + +tmp_makefile="CMakeLists-generator.mk" + +\cat << 'EOF' > ${tmp_makefile} +LINKERSCRIPT:=`cat Makefile | sed -n 's/.*LINKER_SCRIPT\s\+:=\s\+\(.*\.ld\).*/\1/p'` +LINKER_SCRIPT:="$$$ \{CMAKE_SOURCE_DIR\}/"$(LINKERSCRIPT) +include Makefile +OPT += -std=c99 + +TEMPLATE_PATH:="$$$ \{CMAKE_SOURCE_DIR\}/"$(TEMPLATE_PATH) + + +generate: + @echo 'cmake_minimum_required(VERSION 3.4.0)' + + @echo 'FUNCTION(SET_COMPILER_OPTIONS TARGET)' + @echo ' target_compile_options($$$ {TARGET} PRIVATE' + @echo ' $$$ <$$$ :$$$ {CFLAGS}>' + @echo ' $$$ <$$$ :$$$ {CXXFLAGS}>' + @echo ' $$$ <$$$ :$$$ {ASMFLAGS}>' + @echo ' )' + @echo 'ENDFUNCTION()' + + @echo '' + @echo '' + + @echo 'FUNCTION(PRINT_SIZE_OF_TARGETS TARGET)' + @echo ' SET(FILENAME "$$$ {CMAKE_BINARY_DIR}/$$$ {TARGET}")' + @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_SIZE} $$$ {FILENAME})' + @echo 'ENDFUNCTION()' + + @echo '' + @echo '' + + @echo 'FUNCTION(ADD_HEX_BIN_TARGETS TARGET)' + @echo ' SET(FILENAME "$$$ {CMAKE_BINARY_DIR}/$$$ {TARGET}")' + @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_OBJCOPY} -Oihex $$$ {FILENAME} $$$ {FILENAME}.hex)' + @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_OBJCOPY} -Obinary $$$ {FILENAME} $$$ {FILENAME}.bin)' + @echo 'ENDFUNCTION()' + + @echo '' + @echo '' + + + @echo 'SET(CMAKE_SYSTEM_NAME Generic)' + @echo 'SET(CMAKE_SYSTEM_PROCESSOR arm)' + @echo 'INCLUDE(CMakeForceCompiler)' + + @echo '$(GNU_INSTALL_ROOT2)' + @echo '' + + @echo '' + @echo '' + @echo '' + @echo '' + + + $(foreach var, PROJECT_NAME SDK_ROOT PROJ_DIR OUTPUT_DIRECTORY LDFLAGS, \ + echo "set($(var) $($(var)))" ; \ + ) + @echo '' + @echo '' + + $(foreach var, CFLAGS CXXFLAGS ASMFLAGS LIB_FILES , \ + echo "set($(var)" ; \ + echo " $($(var))" | sed -e 's/\s\+/\n\t/g'; \ + echo ")" ; \ + ) + + @echo 'set(SRC_FILES ' + @echo ' $(SRC_FILES)' | sed -e 's/\s\+/\n\t/g' + @echo ')' + @echo '' + @echo '' + + @echo 'set(INC_FOLDERS' + @echo ' $(INC_FOLDERS)' | sed -e 's/\s\+/\n\t/g' + @echo ')' + @echo '' + @echo '' + + + + @echo 'foreach(LIB $$$ {LIB_FILES})' + @echo 'find_file(LIB_FILE_$$$ {LIB} $$$ {LIB} $$$ {CMAKE_SOURCE_DIR})' + @echo ' if (NOT LIB_FILE_$$$ {LIB})' + @echo ' list(APPEND LIBS $$$ {LIB})' + @echo ' else ()' + @echo ' list(APPEND LIB_FILES_CLEAN $$$ {LIB_FILE_$$$ {LIB}})' + @echo ' endif()' + @echo 'endforeach()' + + @echo '' + @echo '' + + + @echo 'string(REPLACE ";" " " LDFLAGS "$$$ {LDFLAGS}")' + + @echo '' + @echo '' + + @echo 'set(CMAKE_C_FLAGS "" CACHE INTERNAL "c compiler flags")' + @echo 'set(CMAKE_CXX_FLAGS "" CACHE INTERNAL "c++ compiler flags")' + @echo 'set(CMAKE_ASM_FLAGS "" CACHE INTERNAL "asm compiler flags")' + @echo 'set(CMAKE_EXE_LINKER_FLAGS $$$ {LDFLAGS} CACHE INTERNAL "executable linker flags")' + + @echo '' + @echo '' + + @echo 'set(CMAKE_C_COMPILER $(CC))' + @echo 'set(CMAKE_CXX_COMPILER $(CXX))' + @echo 'set(CMAKE_ASM_COMPILER $(AS))' + @echo 'set(CMAKE_SIZE $(SIZE))' + @echo '' + @echo '' + + @echo '' + @echo '' + + + + @echo 'project($$$ {PROJECT_NAME})' + @echo 'enable_language(ASM)' + + @echo '' + @echo '' + + @echo 'set(LIBS $$$ {LIB_FILES})' + + @echo 'include_directories($$$ {INC_FOLDERS})' + @echo 'add_executable($$$ {PROJECT_NAME} $$$ {SRC_FILES})' + @echo 'target_link_libraries($$$ {PROJECT_NAME} PUBLIC $$$ {LIB_FILES_CLEAN})' + + @echo '' + @echo '' + + + @echo 'SET_COMPILER_OPTIONS($$$ {PROJECT_NAME})' + @echo 'PRINT_SIZE_OF_TARGETS($$$ {PROJECT_NAME})' + @echo 'ADD_HEX_BIN_TARGETS($$$ {PROJECT_NAME})' +EOF + + + +makefile=$1 + dir=`\dirname ${makefile}` + \echo "Creating CMakeLists.txt for ${makefile}" + \pushd ${dir} > /dev/null + \make -s -f ${tmp_makefile} generate > CMakeLists.txt + \popd > /dev/null +\rm ${tmp_makefile} + +echo '************************************' +echo 'Enjoy using CLION with the NRF5-SDK!' +echo '************************************' diff --git a/nrf5-sdk-to-clion.sh b/nrf5-sdk-to-clion.sh index 9b4cba5..8d425c6 100644 --- a/nrf5-sdk-to-clion.sh +++ b/nrf5-sdk-to-clion.sh @@ -1,142 +1,5 @@ #!/usr/bin/env bash - -#Copyright 2017 Jumper Labs Ltd. - -#Licensed under the Apache License, Version 2.0 (the "License"); -#you may not use this file except in compliance with the License. -#You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -#Unless required by applicable law or agreed to in writing, software -#distributed under the License is distributed on an "AS IS" BASIS, -#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -#See the License for the specific language governing permissions and -#limitations under the License. - -set -e - -tmp_makefile="/tmp/CMakeLists-generator.mk" - - - - -\cat << 'EOF' > ${tmp_makefile} -LINKERSCRIPT:=`cat Makefile | sed -n 's/.*LINKER_SCRIPT\s\+:=\s\+\(.*\.ld\).*/\1/p'` -LINKER_SCRIPT:="$$$ \{CMAKE_SOURCE_DIR\}/"$(LINKERSCRIPT) -include Makefile -OPT += -std=c99 -TEMPLATE_PATH:="$$$ \{CMAKE_SOURCE_DIR\}/"$(TEMPLATE_PATH) - - -generate: - @echo 'cmake_minimum_required(VERSION 3.4.0)' - - @echo 'FUNCTION(SET_COMPILER_OPTIONS TARGET)' - @echo ' target_compile_options($$$ {TARGET} PRIVATE' - @echo ' $$$ <$$$ :$$$ {CFLAGS}>' - @echo ' $$$ <$$$ :$$$ {CXXFLAGS}>' - @echo ' $$$ <$$$ :$$$ {ASMFLAGS}>' - @echo ' )' - @echo 'ENDFUNCTION()' - - @echo '' - @echo '' - - @echo 'FUNCTION(PRINT_SIZE_OF_TARGETS TARGET)' - @echo ' SET(FILENAME "$$$ {CMAKE_BINARY_DIR}/$$$ {TARGET}")' - @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_SIZE} $$$ {FILENAME})' - @echo 'ENDFUNCTION()' - - @echo '' - @echo '' - - - @echo 'SET(CMAKE_SYSTEM_NAME Generic)' - @echo 'SET(CMAKE_SYSTEM_PROCESSOR arm)' - @echo 'INCLUDE(CMakeForceCompiler)' - - @echo '' - @echo '' - - @echo 'SET(TOOLCHAIN_PREFIX "/usr")' - @echo 'SET(TARGET_TRIPLET "arm-none-eabi")' - @echo 'SET(TOOLCHAIN_BIN_DIR $$$ {TOOLCHAIN_PREFIX}/bin)' - @echo 'SET(TOOLCHAIN_INC_DIR $$$ {TOOLCHAIN_PREFIX}/$$$ {TARGET_TRIPLET}/include)' - @echo 'SET(TOOLCHAIN_LIB_DIR $$$ {TOOLCHAIN_PREFIX}/$$$ {TARGET_TRIPLET}/lib)' - @echo 'SET(CMAKE_SIZE $$$ {TOOLCHAIN_BIN_DIR}/$$$ {TARGET_TRIPLET}-size$$$ {TOOL_EXECUTABLE_SUFFIX} CACHE INTERNAL "size tool")' - - @echo '' - @echo '' - @echo '' - @echo '' - - - $(foreach var, PROJECT_NAME SDK_ROOT PROJ_DIR SRC_FILES INC_FOLDERS CFLAGS CXXFLAGS ASMFLAGS LDFLAGS LIB_FILES, \ - echo "set($(var) $($(var)))" ; \ - ) - @echo '' - @echo '' - - - - @echo 'string(REPLACE ";" " " LDFLAGS "$$$ {LDFLAGS}")' - - @echo '' - @echo '' - - @echo 'set(CMAKE_C_FLAGS "" CACHE INTERNAL "c compiler flags")' - @echo 'set(CMAKE_CXX_FLAGS "" CACHE INTERNAL "c++ compiler flags")' - @echo 'set(CMAKE_ASM_FLAGS "" CACHE INTERNAL "asm compiler flags")' - @echo 'set(CMAKE_EXE_LINKER_FLAGS $$$ {LDFLAGS} CACHE INTERNAL "executable linker flags")' - - @echo '' - @echo '' - - @echo 'CMAKE_FORCE_C_COMPILER($$$ {TOOLCHAIN_BIN_DIR}/$$$ {TARGET_TRIPLET}-gcc$$$ {TOOL_EXECUTABLE_SUFFIX} GNU)' - @echo 'CMAKE_FORCE_CXX_COMPILER($$$ {TOOLCHAIN_BIN_DIR}/$$$ {TARGET_TRIPLET}-g++$$$ {TOOL_EXECUTABLE_SUFFIX} GNU)' - @echo 'SET(CMAKE_ASM_COMPILER $$$ {TOOLCHAIN_BIN_DIR}/$$$ {TARGET_TRIPLET}-gcc$$$ {TOOL_EXECUTABLE_SUFFIX})' - - @echo '' - @echo '' - - @echo '' - @echo '' - - - - @echo 'project($$$ {PROJECT_NAME})' - @echo 'enable_language(ASM)' - - @echo '' - @echo '' - - @echo 'set(LIBS $$$ {LIB_FILES})' - - @echo 'include_directories($$$ {INC_FOLDERS})' - @echo 'add_executable($$$ {PROJECT_NAME} $$$ {SRC_FILES})' - @echo 'target_link_libraries($$$ {PROJECT_NAME} PUBLIC $$$ {LIBS})' - - @echo '' - @echo '' - - - @echo 'SET_COMPILER_OPTIONS($$$ {PROJECT_NAME})' - @echo 'PRINT_SIZE_OF_TARGETS($$$ {PROJECT_NAME})' -EOF - -\echo "cmake_minimum_required(VERSION 2.8.9)" > CMakeLists.txt - -for makefile in `\find ./examples -name Makefile` ; do - dir=`\dirname ${makefile}` +for makefile in `\find $1 -name Makefile` ; do \echo "Creating CMakeLists.txt for ${makefile}" - \pushd ${dir} > /dev/null - \make -s -f ${tmp_makefile} generate > CMakeLists.txt - \popd > /dev/null - \echo "#add_subdirectory(${dir})" >> CMakeLists.txt + \./nrf5-make2cmake.sh ${makefile} done -\rm ${tmp_makefile} - -echo '************************************' -echo 'Enjoy using CLION with the NRF5-SDK!' -echo '************************************' From ee83514b5165bb924638f35c2f665f3d120aac7f Mon Sep 17 00:00:00 2001 From: Nicolas Veloz Savino Date: Fri, 17 Nov 2017 09:58:39 +0100 Subject: [PATCH 3/9] Fixing issue with CMakeLists-generator.mk file nrf5-sdk-to-clion goes back to be an independent script --- nrf5-make2cmake.sh | 12 +-- nrf5-sdk-to-clion.sh | 171 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 175 insertions(+), 8 deletions(-) mode change 100644 => 100755 nrf5-sdk-to-clion.sh diff --git a/nrf5-make2cmake.sh b/nrf5-make2cmake.sh index d1241cc..e221942 100755 --- a/nrf5-make2cmake.sh +++ b/nrf5-make2cmake.sh @@ -16,7 +16,7 @@ set -e -tmp_makefile="CMakeLists-generator.mk" +tmp_makefile=$(mktemp) \cat << 'EOF' > ${tmp_makefile} LINKERSCRIPT:=`cat Makefile | sed -n 's/.*LINKER_SCRIPT\s\+:=\s\+\(.*\.ld\).*/\1/p'` @@ -160,11 +160,11 @@ EOF makefile=$1 - dir=`\dirname ${makefile}` - \echo "Creating CMakeLists.txt for ${makefile}" - \pushd ${dir} > /dev/null - \make -s -f ${tmp_makefile} generate > CMakeLists.txt - \popd > /dev/null +dir=`\dirname ${makefile}` +\echo "Creating CMakeLists.txt for ${makefile}" +\pushd ${dir} > /dev/null +\make -s -f ${tmp_makefile} generate > CMakeLists.txt +\popd > /dev/null \rm ${tmp_makefile} echo '************************************' diff --git a/nrf5-sdk-to-clion.sh b/nrf5-sdk-to-clion.sh old mode 100644 new mode 100755 index 8d425c6..adff186 --- a/nrf5-sdk-to-clion.sh +++ b/nrf5-sdk-to-clion.sh @@ -1,5 +1,172 @@ #!/usr/bin/env bash + +#Copyright 2017 Jumper Labs Ltd. + +#Licensed under the Apache License, Version 2.0 (the "License"); +#you may not use this file except in compliance with the License. +#You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +#Unless required by applicable law or agreed to in writing, software +#distributed under the License is distributed on an "AS IS" BASIS, +#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#See the License for the specific language governing permissions and +#limitations under the License. +function create_cmake { + set -e + + tmp_makefile=$(mktemp) + + \cat << 'EOF' > ${tmp_makefile} + LINKERSCRIPT:=`cat Makefile | sed -n 's/.*LINKER_SCRIPT\s\+:=\s\+\(.*\.ld\).*/\1/p'` + LINKER_SCRIPT:="$$$ \{CMAKE_SOURCE_DIR\}/"$(LINKERSCRIPT) + include Makefile + OPT += -std=c99 + + TEMPLATE_PATH:="$$$ \{CMAKE_SOURCE_DIR\}/"$(TEMPLATE_PATH) + + + generate: + @echo 'cmake_minimum_required(VERSION 3.4.0)' + + @echo 'FUNCTION(SET_COMPILER_OPTIONS TARGET)' + @echo ' target_compile_options($$$ {TARGET} PRIVATE' + @echo ' $$$ <$$$ :$$$ {CFLAGS}>' + @echo ' $$$ <$$$ :$$$ {CXXFLAGS}>' + @echo ' $$$ <$$$ :$$$ {ASMFLAGS}>' + @echo ' )' + @echo 'ENDFUNCTION()' + + @echo '' + @echo '' + + @echo 'FUNCTION(PRINT_SIZE_OF_TARGETS TARGET)' + @echo ' SET(FILENAME "$$$ {CMAKE_BINARY_DIR}/$$$ {TARGET}")' + @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_SIZE} $$$ {FILENAME})' + @echo 'ENDFUNCTION()' + + @echo '' + @echo '' + + @echo 'FUNCTION(ADD_HEX_BIN_TARGETS TARGET)' + @echo ' SET(FILENAME "$$$ {CMAKE_BINARY_DIR}/$$$ {TARGET}")' + @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_OBJCOPY} -Oihex $$$ {FILENAME} $$$ {FILENAME}.hex)' + @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_OBJCOPY} -Obinary $$$ {FILENAME} $$$ {FILENAME}.bin)' + @echo 'ENDFUNCTION()' + + @echo '' + @echo '' + + + @echo 'SET(CMAKE_SYSTEM_NAME Generic)' + @echo 'SET(CMAKE_SYSTEM_PROCESSOR arm)' + @echo 'INCLUDE(CMakeForceCompiler)' + + @echo '$(GNU_INSTALL_ROOT2)' + @echo '' + + @echo '' + @echo '' + @echo '' + @echo '' + + + $(foreach var, PROJECT_NAME SDK_ROOT PROJ_DIR OUTPUT_DIRECTORY LDFLAGS, \ + echo "set($(var) $($(var)))" ; \ + ) + @echo '' + @echo '' + + $(foreach var, CFLAGS CXXFLAGS ASMFLAGS LIB_FILES , \ + echo "set($(var)" ; \ + echo " $($(var))" | sed -e 's/\s\+/\n\t/g'; \ + echo ")" ; \ + ) + + @echo 'set(SRC_FILES ' + @echo ' $(SRC_FILES)' | sed -e 's/\s\+/\n\t/g' + @echo ')' + @echo '' + @echo '' + + @echo 'set(INC_FOLDERS' + @echo ' $(INC_FOLDERS)' | sed -e 's/\s\+/\n\t/g' + @echo ')' + @echo '' + @echo '' + + + + @echo 'foreach(LIB $$$ {LIB_FILES})' + @echo 'find_file(LIB_FILE_$$$ {LIB} $$$ {LIB} $$$ {CMAKE_SOURCE_DIR})' + @echo ' if (NOT LIB_FILE_$$$ {LIB})' + @echo ' list(APPEND LIBS $$$ {LIB})' + @echo ' else ()' + @echo ' list(APPEND LIB_FILES_CLEAN $$$ {LIB_FILE_$$$ {LIB}})' + @echo ' endif()' + @echo 'endforeach()' + + @echo '' + @echo '' + + + @echo 'string(REPLACE ";" " " LDFLAGS "$$$ {LDFLAGS}")' + + @echo '' + @echo '' + + @echo 'set(CMAKE_C_FLAGS "" CACHE INTERNAL "c compiler flags")' + @echo 'set(CMAKE_CXX_FLAGS "" CACHE INTERNAL "c++ compiler flags")' + @echo 'set(CMAKE_ASM_FLAGS "" CACHE INTERNAL "asm compiler flags")' + @echo 'set(CMAKE_EXE_LINKER_FLAGS $$$ {LDFLAGS} CACHE INTERNAL "executable linker flags")' + + @echo '' + @echo '' + + @echo 'set(CMAKE_C_COMPILER $(CC))' + @echo 'set(CMAKE_CXX_COMPILER $(CXX))' + @echo 'set(CMAKE_ASM_COMPILER $(AS))' + @echo 'set(CMAKE_SIZE $(SIZE))' + @echo '' + @echo '' + + @echo '' + @echo '' + + + + @echo 'project($$$ {PROJECT_NAME})' + @echo 'enable_language(ASM)' + + @echo '' + @echo '' + + @echo 'set(LIBS $$$ {LIB_FILES})' + + @echo 'include_directories($$$ {INC_FOLDERS})' + @echo 'add_executable($$$ {PROJECT_NAME} $$$ {SRC_FILES})' + @echo 'target_link_libraries($$$ {PROJECT_NAME} PUBLIC $$$ {LIB_FILES_CLEAN})' + + @echo '' + @echo '' + + + @echo 'SET_COMPILER_OPTIONS($$$ {PROJECT_NAME})' + @echo 'PRINT_SIZE_OF_TARGETS($$$ {PROJECT_NAME})' + @echo 'ADD_HEX_BIN_TARGETS($$$ {PROJECT_NAME})' + EOF + + + dir=`\dirname $1` + \echo "Creating CMakeLists.txt for $1" + \pushd ${dir} > /dev/null + \make -s -f ${tmp_makefile} generate > CMakeLists.txt + \popd > /dev/null + \rm ${tmp_makefile} + +} + for makefile in `\find $1 -name Makefile` ; do - \echo "Creating CMakeLists.txt for ${makefile}" - \./nrf5-make2cmake.sh ${makefile} + create_cmake ${makefile} done From ea18ff363a25cb31121b4010acf3b05679b938bf Mon Sep 17 00:00:00 2001 From: nvelozsavino Date: Tue, 3 Apr 2018 16:38:48 +0200 Subject: [PATCH 4/9] Cleaning and updating make2cmake o fix compilation issues Added flash target --- nrf5-make2cmake.sh | 389 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 302 insertions(+), 87 deletions(-) diff --git a/nrf5-make2cmake.sh b/nrf5-make2cmake.sh index e221942..2d51670 100755 --- a/nrf5-make2cmake.sh +++ b/nrf5-make2cmake.sh @@ -16,73 +16,317 @@ set -e -tmp_makefile=$(mktemp) +nrf52_cmake="nrf52.cmake" + +\cat << 'EOF2' > ${nrf52_cmake} +cmake_minimum_required(VERSION 3.4.0) + +FUNCTION(SET_COMPILER_OPTIONS TARGET) + target_compile_options(${TARGET} PRIVATE + $<$:${CFLAGS}> + $<$:${CXXFLAGS}> + $<$:${ASMFLAGS}> + ) +ENDFUNCTION() + + +FUNCTION(NRF_FLASH_TARGET TARGET) + + + if (NOT OPENOCD_BIN) + find_program(OPENOCD_BIN openocd) + if (NOT OPENOCD_BIN) + message(WANING "OpenOCD binaries, not found, no FLASH target will be created") + return() + else() + message(STATUS "Found OpenOCD binaries in ${OPENOCD_BIN}") + endif() + else() + message(STATUS "Using OpenOCD binaries: ${OPENOCD_BIN}") + endif() + + if (BOOTLOADER_FILE AND NOT NRFUTIL_BIN) + find_program(NRFUTIL_BIN nrfutil) + if (NOT NRFUTIL_BIN) + message(WANING "nrfutil binaries, not found, no Bootloader settings can be created") + return() + else() + message(STATUS "Found nrfutil binaries in ${NRFUTIL_BIN}") + endif() + else() + message(STATUS "Using nrfutil binaries: ${NRFUTIL_BIN}") + endif() + + + + + set(FILE ${CMAKE_BINARY_DIR}/${TARGET}) + if (SOFTDEVICE) + set(REQUIRE_MERGEHEX TRUE) + set(SOFT_DEV_CMD "nrf5 mass_erase\; program \"${SOFTDEVICE}\" verify\;") + else() + set(SOFT_DEV_CMD "") + endif() + + #nrfutil settings generate --family NRF52 --application remote_nordic.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 settings.hex + + + + if (BOOTLOADER_FILE) + + set(BOOT_FILE ${CMAKE_BINARY_DIR}/boot.hex) + set(SETTINGS_FILE ${CMAKE_BINARY_DIR}/settings.hex) + set(BOOT_CMD + COMMAND echo "Preparing Bootloader" + COMMAND rm -f ${SETTINGS_FILE} + COMMAND rm -f ${BOOT_FILE} + COMMAND ${NRFUTIL_BIN} settings generate --family NRF52 --application ${FILE}.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 ${SETTINGS_FILE} + COMMAND ${MERGEHEX_BIN} -m ${BOOTLOADER_FILE} ${SETTINGS_FILE} -o ${BOOT_FILE} + COMMAND echo "Bootloader hex done ${BOOT_FILE}" + ) + set(REQUIRE_MERGEHEX TRUE) + else() + set(BOOT_CMD "") + endif() + + + + if (REQUIRE_MERGEHEX AND NOT MERGEHEX_BIN) + find_program(MERGEHEX_BIN mergehex) + if (NOT MERGEHEX_BIN) + message(WARNING "mergehex binaries, not found, no FLASH target will be created") + return() + else() + message(STATUS "Found mergehex binaries in ${MERGEHEX_BIN}") + endif() + else() + message(STATUS "Using mergehex binaries: ${MERGEHEX_BIN}") + endif() + + + + + if (OPENOCD_SCRIPT) + set(OPENOCD_SCRIPT_CMD "-s ${OPENOCD_SCRIPT}") + else() + set(OPENOCD_SCRIPT_CMD "") + endif() + + if(BOOT_FILE OR SOFTDEVICE) + set(FULL_FILE ${CMAKE_BINARY_DIR}/full.hex) + set(MERGE_CMD + COMMAND rm -f ${FULL_FILE} + COMMAND ${MERGEHEX_BIN} -m ${BOOT_FILE} ${SOFTDEVICE} ${FILE}.hex -o ${FULL_FILE} + ) + else() + set(FULL_FILE ${FILE}.hex) + set(MERGE_CMD + "") + endif() + + set(OPENOCD_FLASH_CMD "reset_config none\; init\; halt\; nrf5 mass_erase\; program \"${FULL_FILE}\" verify\; reset\; exit") + set(OPENOCD_DEBUG_CMD "reset_config none\; init\; halt\; nrf5 mass_erase\; program \"${FULL_FILE}\" verify\; verify\; reset halt\; exit") + if (HLA_SERIAL) + set(OPENOCD_FLASH_CMD "hla_serial ${HLA_SERIAL}\; ${OPENOCD_FLASH_CMD}") + set(OPENOCD_DEBUG_CMD "hla_serial ${HLA_SERIAL}\; ${OPENOCD_DEBUG_CMD}") + else() + + endif() + + + add_custom_target(Flash + DEPENDS ${TARGET} + COMMAND rm -f ${FILE}.hex + COMMAND rm -f ${FULL_FILE} + COMMAND ${CMAKE_OBJCOPY} -Oihex ${FILE} ${FILE}.hex + ${BOOT_CMD} + ${MERGE_CMD} + COMMAND ${OPENOCD_BIN} -f ${OPENOCD_CFG} ${OPENOCD_SCRIPT_CMD} -c "${OPENOCD_FLASH_CMD}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} USES_TERMINAL) + + add_custom_target(Flash-Debug + DEPENDS ${TARGET} + COMMAND rm -f ${FILE}.hex + COMMAND rm -f ${FULL_FILE} + COMMAND ${CMAKE_OBJCOPY} -Oihex ${FILE} ${FILE}.hex + ${BOOT_CMD} + ${MERGE_CMD} + COMMAND ${OPENOCD_BIN} -f ${OPENOCD_CFG} ${OPENOCD_SCRIPT_CMD} -c "${OPENOCD_DEBUG_CMD}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} USES_TERMINAL) + + +ENDFUNCTION() + +FUNCTION(PRINT_SIZE_OF_TARGETS TARGET) + SET(FILENAME "${CMAKE_BINARY_DIR}/${TARGET}") + add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_SIZE} ${FILENAME}) +ENDFUNCTION() + + +FUNCTION(ADD_HEX_BIN_TARGETS TARGET) + SET(FILENAME "${CMAKE_BINARY_DIR}/${TARGET}") + add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Oihex ${FILENAME} ${FILENAME}.hex) + add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Obinary ${FILENAME} ${FILENAME}.bin) +ENDFUNCTION() + + +FUNCTION(SET_COMPILATION_FLAGS) + foreach(LIB ${LIB_FILES}) + find_file(LIB_FILE_${LIB} ${LIB} ${CMAKE_SOURCE_DIR}) + if (NOT LIB_FILE_${LIB}) + list(APPEND LIBS ${LIB}) + else () + list(APPEND LIB_FILES_CLEAN ${LIB_FILE_${LIB}}) + endif() + endforeach() + string(REPLACE ";" " " LDFLAGS "${LDFLAGS}") + set(CMAKE_C_FLAGS "" CACHE INTERNAL "c compiler flags") + set(CMAKE_CXX_FLAGS "" CACHE INTERNAL "c++ compiler flags") + set(CMAKE_ASM_FLAGS "-x assembler-with-cpp" CACHE INTERNAL "asm compiler flags") + set(CMAKE_EXE_LINKER_FLAGS "${LDFLAGS} " CACHE INTERNAL "executable linker flags") +ENDFUNCTION() + +FUNCTION(NRF_SET_COMPILERS) + + if (WIN32 OR WIN64) + set(TOOL_EXECUTABLE_SUFFIX .exe) + else() + set(TOOL_EXECUTABLE_SUFFIX ) + endif() + + + if(NOT TARGET_TRIPLET) + set(TARGET_TRIPLET arm-none-eabi) + set(EXE_EXTENSION ${TOOL_EXECUTABLE_SUFFIX}) + message(STATUS "Using default target triplet ${TARGET_TRIPLET}") + else() + set(EXE_EXTENSION ) + message(STATUS "Using target triplet ${TARGET_TRIPLET}") + endif() + + if(NOT C_COMPILER) + set(C_COMPILER ${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) + message(STATUS "Using default C compiler: ${C_COMPILER}") + else() + message(STATUS "Using C compiler: ${CXX_COMPILER}") + endif() + + if(NOT CXX_COMPILER) + set(CXX_COMPILER ${TARGET_TRIPLET}-c++${EXE_EXTENSION}) + message(STATUS "Using default C++ compiler: ${CXX_COMPILER}") + else() + message(STATUS "Using C++ compiler: ${CXX_COMPILER}") + endif() + get_filename_component(TOOLCHAIN_PATH ${C_COMPILER} DIRECTORY) + if (NOT TOOLCHAIN_PATH STREQUAL "") + set(TOOLCHAIN_PATH ${TOOLCHAIN_PATH}/) + endif() + if(NOT ASM_COMPILER) + set(ASM_COMPILER ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) + message(STATUS "Using default ASM compiler: ${ASM_COMPILER}") + else() + message(STATUS "Using ASM compiler: ${ASM_COMPILER}") + endif() + + if(NOT COMPILER_SIZE_TOOL) + set(COMPILER_SIZE_TOOL ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-size${EXE_EXTENSION}) + message(STATUS "Using default compiler size tool: ${COMPILER_SIZE_TOOL}") + else() + message(STATUS "Using compiler size tool: ${COMPILER_SIZE_TOOL}") + endif() + + if(NOT COMPILER_OBJCOPY_TOOL) + set(COMPILER_OBJCOPY_TOOL ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-objcopy${EXE_EXTENSION}) + message(STATUS "Using default compiler objcopy tool: ${COMPILER_OBJCOPY_TOOL}") + else() + message(STATUS "Using compiler objcopy tool: ${COMPILER_OBJCOPY_TOOL}") + endif() + + if( ${CMAKE_VERSION} VERSION_LESS 3.6.0) + INCLUDE(CMakeForceCompiler) + CMAKE_FORCE_C_COMPILER( ${C_COMPILER} GNU) + CMAKE_FORCE_CXX_COMPILER( ${CXX_COMPILER} GNU) + else() + SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY PARENT_SCOPE) + SET(CMAKE_C_COMPILER ${C_COMPILER} PARENT_SCOPE) + SET(CMAKE_CXX_COMPILER ${CXX_COMPILER} PARENT_SCOPE) + endif() + + SET(CMAKE_SIZE ${COMPILER_SIZE_TOOL} PARENT_SCOPE) + SET(CMAKE_OBJCOPY ${COMPILER_OBJCOPY_TOOL} PARENT_SCOPE) + SET(CMAKE_ASM_COMPILER ${ASM_COMPILER} PARENT_SCOPE) +ENDFUNCTION() + + + +set(CMAKE_C_FLAGS_DEBUG "") +set(CMAKE_C_FLAGS_RELEASE "") +set(CMAKE_C_FLAGS_MINSIZEREL "") +set(CMAKE_C_FLAGS_RELWITHDEBINFO "") + +set(CMAKE_CXX_FLAGS_DEBUG "") +set(CMAKE_CXX_FLAGS_RELEASE "") +set(CMAKE_CXX_FLAGS_MINSIZEREL "") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "") + +set(CMAKE_ASM_FLAGS_DEBUG "") +set(CMAKE_ASM_FLAGS_RELEASE "") +set(CMAKE_ASM_FLAGS_MINSIZEREL "") +set(CMAKE_ASM_FLAGS_RELWITHDEBINFO "") + +set(CMAKE_EXE_LINKE_FLAGS_DEBUG "") +set(CMAKE_EXE_LINKE_FLAGS_RELEASE "") +set(CMAKE_EXE_LINKE_FLAGS_MINSIZEREL "") +set(CMAKE_EXE_LINKE_FLAGS_RELWITHDEBINFO "") + +EOF2 + + + + +tmp_makefile="CMakeLists-generator.mk" \cat << 'EOF' > ${tmp_makefile} -LINKERSCRIPT:=`cat Makefile | sed -n 's/.*LINKER_SCRIPT\s\+:=\s\+\(.*\.ld\).*/\1/p'` -LINKER_SCRIPT:="$$$ \{CMAKE_SOURCE_DIR\}/"$(LINKERSCRIPT) +LINKERSCRIPT=$$(cat Makefile | sed -n 's/\s*LINKER_SCRIPT\s*:=\s*\(.*\.ld\)/\1/p') +LINKER_SCRIPT:=$(LINKERSCRIPT) include Makefile + OPT += -std=c99 TEMPLATE_PATH:="$$$ \{CMAKE_SOURCE_DIR\}/"$(TEMPLATE_PATH) - generate: @echo 'cmake_minimum_required(VERSION 3.4.0)' - - @echo 'FUNCTION(SET_COMPILER_OPTIONS TARGET)' - @echo ' target_compile_options($$$ {TARGET} PRIVATE' - @echo ' $$$ <$$$ :$$$ {CFLAGS}>' - @echo ' $$$ <$$$ :$$$ {CXXFLAGS}>' - @echo ' $$$ <$$$ :$$$ {ASMFLAGS}>' - @echo ' )' - @echo 'ENDFUNCTION()' - - @echo '' @echo '' - - @echo 'FUNCTION(PRINT_SIZE_OF_TARGETS TARGET)' - @echo ' SET(FILENAME "$$$ {CMAKE_BINARY_DIR}/$$$ {TARGET}")' - @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_SIZE} $$$ {FILENAME})' - @echo 'ENDFUNCTION()' - - @echo '' - @echo '' - - @echo 'FUNCTION(ADD_HEX_BIN_TARGETS TARGET)' - @echo ' SET(FILENAME "$$$ {CMAKE_BINARY_DIR}/$$$ {TARGET}")' - @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_OBJCOPY} -Oihex $$$ {FILENAME} $$$ {FILENAME}.hex)' - @echo ' add_custom_command(TARGET $$$ {TARGET} POST_BUILD COMMAND $$$ {CMAKE_OBJCOPY} -Obinary $$$ {FILENAME} $$$ {FILENAME}.bin)' - @echo 'ENDFUNCTION()' + @echo 'include(nrf52.cmake)' @echo '' @echo '' - - @echo 'SET(CMAKE_SYSTEM_NAME Generic)' - @echo 'SET(CMAKE_SYSTEM_PROCESSOR arm)' - @echo 'INCLUDE(CMakeForceCompiler)' - @echo '$(GNU_INSTALL_ROOT2)' @echo '' - @echo '' - @echo '' - @echo '' + @echo 'set(C_COMPILER $(CC))' + @echo 'set(CXX_COMPILER $(CXX))' + @echo 'set(ASM_COMPILER $(CC))' @echo '' - - $(foreach var, PROJECT_NAME SDK_ROOT PROJ_DIR OUTPUT_DIRECTORY LDFLAGS, \ + $(foreach var, PROJECT_NAME, \ echo "set($(var) $($(var)))" ; \ ) @echo '' @echo '' - $(foreach var, CFLAGS CXXFLAGS ASMFLAGS LIB_FILES , \ + $(foreach var, CFLAGS CXXFLAGS ASMFLAGS LIB_FILES, \ echo "set($(var)" ; \ echo " $($(var))" | sed -e 's/\s\+/\n\t/g'; \ echo ")" ; \ ) + $(foreach var, LDFLAGS, \ + echo "set($(var)" ; \ + echo " $($(var))" | sed -e 's/\s\+/\n\t/g; s/-\(L\|T\)/-\1$$$ {CMAKE_SOURCE_DIR}\//g'; \ + echo ")" ; \ + ) @echo 'set(SRC_FILES ' @echo ' $(SRC_FILES)' | sed -e 's/\s\+/\n\t/g' @@ -95,76 +339,47 @@ generate: @echo ')' @echo '' @echo '' - - - - @echo 'foreach(LIB $$$ {LIB_FILES})' - @echo 'find_file(LIB_FILE_$$$ {LIB} $$$ {LIB} $$$ {CMAKE_SOURCE_DIR})' - @echo ' if (NOT LIB_FILE_$$$ {LIB})' - @echo ' list(APPEND LIBS $$$ {LIB})' - @echo ' else ()' - @echo ' list(APPEND LIB_FILES_CLEAN $$$ {LIB_FILE_$$$ {LIB}})' - @echo ' endif()' - @echo 'endforeach()' - - @echo '' - @echo '' - - - @echo 'string(REPLACE ";" " " LDFLAGS "$$$ {LDFLAGS}")' - - @echo '' + @echo 'project($$$ {PROJECT_NAME})' + @echo 'enable_language(ASM)' @echo '' - @echo 'set(CMAKE_C_FLAGS "" CACHE INTERNAL "c compiler flags")' - @echo 'set(CMAKE_CXX_FLAGS "" CACHE INTERNAL "c++ compiler flags")' - @echo 'set(CMAKE_ASM_FLAGS "" CACHE INTERNAL "asm compiler flags")' - @echo 'set(CMAKE_EXE_LINKER_FLAGS $$$ {LDFLAGS} CACHE INTERNAL "executable linker flags")' + @echo 'NRF_SET_COMPILERS()' + @echo 'SET_COMPILATION_FLAGS()' - @echo '' - @echo '' - @echo 'set(CMAKE_C_COMPILER $(CC))' - @echo 'set(CMAKE_CXX_COMPILER $(CXX))' - @echo 'set(CMAKE_ASM_COMPILER $(AS))' - @echo 'set(CMAKE_SIZE $(SIZE))' - @echo '' @echo '' + @echo 'set(PROJECT_CMAKE_INCLUDE "$$$ {CMAKE_SOURCE_DIR}/project.cmake" CACHE STRING "Project CMake Include")' + @echo 'if(EXISTS $$$ {PROJECT_CMAKE_INCLUDE} )' + @echo ' include( $$$ {PROJECT_CMAKE_INCLUDE} )' + @echo 'endif()' @echo '' @echo '' - - - @echo 'project($$$ {PROJECT_NAME})' - @echo 'enable_language(ASM)' - - @echo '' - @echo '' - - @echo 'set(LIBS $$$ {LIB_FILES})' - @echo 'include_directories($$$ {INC_FOLDERS})' @echo 'add_executable($$$ {PROJECT_NAME} $$$ {SRC_FILES})' @echo 'target_link_libraries($$$ {PROJECT_NAME} PUBLIC $$$ {LIB_FILES_CLEAN})' - @echo '' - @echo '' - + @echo 'message(WARNING "Set SOFTDEVICE variable with the Softdevice hex file")' + @echo '#set(SOFTDEVICE $$$ {CMAKE_CURRENT_SOURCE_DIR}/s132.hex)' + @echo 'message(WARNING "Set MERGEHEX_BIN with path to mergehex utility")' + @echo '#set(MERGEHEX_BIN /opt/nordic/mergehex/mergehex)' @echo 'SET_COMPILER_OPTIONS($$$ {PROJECT_NAME})' @echo 'PRINT_SIZE_OF_TARGETS($$$ {PROJECT_NAME})' @echo 'ADD_HEX_BIN_TARGETS($$$ {PROJECT_NAME})' + @echo 'NRF_FLASH_TARGET($$$ {PROJECT_NAME})' EOF makefile=$1 -dir=`\dirname ${makefile}` -\echo "Creating CMakeLists.txt for ${makefile}" -\pushd ${dir} > /dev/null -\make -s -f ${tmp_makefile} generate > CMakeLists.txt -\popd > /dev/null + \pwd + dir=`\dirname ${makefile}` + \echo "Creating CMakeLists.txt for ${makefile}" + \pushd ${dir} > /dev/null + \make -s -f ${tmp_makefile} generate > CMakeLists.txt + \popd > /dev/null \rm ${tmp_makefile} echo '************************************' From 1b77e054984fe7f1ca1233b7c9347bda8b7228be Mon Sep 17 00:00:00 2001 From: nvelozsavino Date: Tue, 3 Apr 2018 16:54:12 +0200 Subject: [PATCH 5/9] Adding ability to choose another TOOLCHAIN_PREFIX --- nrf5-make2cmake.sh | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/nrf5-make2cmake.sh b/nrf5-make2cmake.sh index 2d51670..4c42c54 100755 --- a/nrf5-make2cmake.sh +++ b/nrf5-make2cmake.sh @@ -204,24 +204,28 @@ FUNCTION(NRF_SET_COMPILERS) set(EXE_EXTENSION ) message(STATUS "Using target triplet ${TARGET_TRIPLET}") endif() + if(NOT TOOLCHAIN_PATH OR C_COMPILER) + get_filename_component(TOOLCHAIN_PATH ${C_COMPILER} DIRECTORY) + else() + if (NOT TOOLCHAIN_PATH STREQUAL "") + set(TOOLCHAIN_PATH ${TOOLCHAIN_PATH}/) + endif() + endif() if(NOT C_COMPILER) - set(C_COMPILER ${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) + set(C_COMPILER ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) message(STATUS "Using default C compiler: ${C_COMPILER}") else() message(STATUS "Using C compiler: ${CXX_COMPILER}") endif() if(NOT CXX_COMPILER) - set(CXX_COMPILER ${TARGET_TRIPLET}-c++${EXE_EXTENSION}) + set(CXX_COMPILER ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-c++${EXE_EXTENSION}) message(STATUS "Using default C++ compiler: ${CXX_COMPILER}") else() message(STATUS "Using C++ compiler: ${CXX_COMPILER}") endif() - get_filename_component(TOOLCHAIN_PATH ${C_COMPILER} DIRECTORY) - if (NOT TOOLCHAIN_PATH STREQUAL "") - set(TOOLCHAIN_PATH ${TOOLCHAIN_PATH}/) - endif() + if(NOT ASM_COMPILER) set(ASM_COMPILER ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) message(STATUS "Using default ASM compiler: ${ASM_COMPILER}") From ce7634c64d9c6a1c17600c012c866381a6df02cc Mon Sep 17 00:00:00 2001 From: nvelozsavino Date: Tue, 3 Apr 2018 17:17:50 +0200 Subject: [PATCH 6/9] Fixing missing / on TOOLCHAIN_PREFIX corrected name TOOLCHAIN_PATH by TOOLCHAIN_PREFIX --- nrf5-make2cmake.sh | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/nrf5-make2cmake.sh b/nrf5-make2cmake.sh index 4c42c54..446c192 100755 --- a/nrf5-make2cmake.sh +++ b/nrf5-make2cmake.sh @@ -204,44 +204,43 @@ FUNCTION(NRF_SET_COMPILERS) set(EXE_EXTENSION ) message(STATUS "Using target triplet ${TARGET_TRIPLET}") endif() - if(NOT TOOLCHAIN_PATH OR C_COMPILER) - get_filename_component(TOOLCHAIN_PATH ${C_COMPILER} DIRECTORY) - else() - if (NOT TOOLCHAIN_PATH STREQUAL "") - set(TOOLCHAIN_PATH ${TOOLCHAIN_PATH}/) - endif() + if(NOT TOOLCHAIN_PREFIX OR C_COMPILER) + get_filename_component(TOOLCHAIN_PREFIX ${C_COMPILER} DIRECTORY) + endif() + if (NOT TOOLCHAIN_PREFIX STREQUAL "") + set(TOOLCHAIN_PREFIX ${TOOLCHAIN_PREFIX}/) endif() if(NOT C_COMPILER) - set(C_COMPILER ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) + set(C_COMPILER ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) message(STATUS "Using default C compiler: ${C_COMPILER}") else() message(STATUS "Using C compiler: ${CXX_COMPILER}") endif() if(NOT CXX_COMPILER) - set(CXX_COMPILER ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-c++${EXE_EXTENSION}) + set(CXX_COMPILER ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-c++${EXE_EXTENSION}) message(STATUS "Using default C++ compiler: ${CXX_COMPILER}") else() message(STATUS "Using C++ compiler: ${CXX_COMPILER}") endif() if(NOT ASM_COMPILER) - set(ASM_COMPILER ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) + set(ASM_COMPILER ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) message(STATUS "Using default ASM compiler: ${ASM_COMPILER}") else() message(STATUS "Using ASM compiler: ${ASM_COMPILER}") endif() if(NOT COMPILER_SIZE_TOOL) - set(COMPILER_SIZE_TOOL ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-size${EXE_EXTENSION}) + set(COMPILER_SIZE_TOOL ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-size${EXE_EXTENSION}) message(STATUS "Using default compiler size tool: ${COMPILER_SIZE_TOOL}") else() message(STATUS "Using compiler size tool: ${COMPILER_SIZE_TOOL}") endif() if(NOT COMPILER_OBJCOPY_TOOL) - set(COMPILER_OBJCOPY_TOOL ${TOOLCHAIN_PATH}${TARGET_TRIPLET}-objcopy${EXE_EXTENSION}) + set(COMPILER_OBJCOPY_TOOL ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-objcopy${EXE_EXTENSION}) message(STATUS "Using default compiler objcopy tool: ${COMPILER_OBJCOPY_TOOL}") else() message(STATUS "Using compiler objcopy tool: ${COMPILER_OBJCOPY_TOOL}") From 69bc00897e93218ee643097996fe8857afacfea7 Mon Sep 17 00:00:00 2001 From: nvelozsavino Date: Tue, 3 Apr 2018 17:58:32 +0200 Subject: [PATCH 7/9] Fixing TOOLCHAIN_PREFIX again --- nrf5-make2cmake.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/nrf5-make2cmake.sh b/nrf5-make2cmake.sh index 446c192..73436de 100755 --- a/nrf5-make2cmake.sh +++ b/nrf5-make2cmake.sh @@ -204,8 +204,16 @@ FUNCTION(NRF_SET_COMPILERS) set(EXE_EXTENSION ) message(STATUS "Using target triplet ${TARGET_TRIPLET}") endif() - if(NOT TOOLCHAIN_PREFIX OR C_COMPILER) - get_filename_component(TOOLCHAIN_PREFIX ${C_COMPILER} DIRECTORY) + if(NOT TOOLCHAIN_PREFIX) + if (C_COMPILER) + get_filename_component(TOOLCHAIN_PREFIX ${C_COMPILER} DIRECTORY) + else() + set(TOOLCHAIN_PREFIX "") + message(STATUS "Using default TOOLCHAIN_PREFIX: ${TOOLCHAIN_PREFIX}") + endif() + message(STATUS "Using TOOLCHAIN_PREFIX from C_COMPILER: ${TOOLCHAIN_PREFIX}") + else() + message(STATUS "Using TOOLCHAIN_PREFIX: ${TOOLCHAIN_PREFIX}") endif() if (NOT TOOLCHAIN_PREFIX STREQUAL "") set(TOOLCHAIN_PREFIX ${TOOLCHAIN_PREFIX}/) From c5d80e58cc4d32c59041f4e7628c8a206652e0b0 Mon Sep 17 00:00:00 2001 From: nvelozsavino Date: Sun, 15 Apr 2018 22:47:42 +0200 Subject: [PATCH 8/9] Fixing libs parsing --- nrf5-make2cmake.sh | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/nrf5-make2cmake.sh b/nrf5-make2cmake.sh index 73436de..0d9e04c 100755 --- a/nrf5-make2cmake.sh +++ b/nrf5-make2cmake.sh @@ -16,6 +16,17 @@ set -e +nrf52_stlink="nrf52_stlink.cfg" + +\cat << 'EOF3' > ${nrf52_stlink} + +source [find interface/stlink-v2-1.cfg] + +transport select hla_swd + +source [find target/nrf52.cfg] + +EOF3 nrf52_cmake="nrf52.cmake" @@ -34,6 +45,13 @@ ENDFUNCTION() FUNCTION(NRF_FLASH_TARGET TARGET) + if (NOT OPENOCD_CFG) + set(OPENOCD_CFG ${CMAKE_CURRENT_SOURCE_DIR}/nrf52_stlink.cfg) + message(STATUS "Using default OpenOCD config file: ${OPENOCD_CFG}") + else() + message(STATUS "Using OpenOCD config file: ${OPENOCD_CFG}") + endif() + if (NOT OPENOCD_BIN) find_program(OPENOCD_BIN openocd) if (NOT OPENOCD_BIN) @@ -175,12 +193,15 @@ FUNCTION(SET_COMPILATION_FLAGS) foreach(LIB ${LIB_FILES}) find_file(LIB_FILE_${LIB} ${LIB} ${CMAKE_SOURCE_DIR}) if (NOT LIB_FILE_${LIB}) - list(APPEND LIBS ${LIB}) + string(REGEX REPLACE "-l(.*)" "\\1" LIB_CLEAN ${LIB}) + list(APPEND LIBS_CLEAN ${LIB_CLEAN}) else () list(APPEND LIB_FILES_CLEAN ${LIB_FILE_${LIB}}) endif() endforeach() string(REPLACE ";" " " LDFLAGS "${LDFLAGS}") + set(LIB_FILES_CLEAN ${LIB_FILES_CLEAN} PARENT_SCOPE) + set(LIBS_CLEAN ${LIBS_CLEAN} PARENT_SCOPE) set(CMAKE_C_FLAGS "" CACHE INTERNAL "c compiler flags") set(CMAKE_CXX_FLAGS "" CACHE INTERNAL "c++ compiler flags") set(CMAKE_ASM_FLAGS "-x assembler-with-cpp" CACHE INTERNAL "asm compiler flags") @@ -369,7 +390,8 @@ generate: @echo 'include_directories($$$ {INC_FOLDERS})' @echo 'add_executable($$$ {PROJECT_NAME} $$$ {SRC_FILES})' - @echo 'target_link_libraries($$$ {PROJECT_NAME} PUBLIC $$$ {LIB_FILES_CLEAN})' + + @echo 'target_link_libraries($$$ {PROJECT_NAME} PUBLIC $$$ {LIBS_CLEAN} $$$ {LIB_FILES_CLEAN})' @echo 'message(WARNING "Set SOFTDEVICE variable with the Softdevice hex file")' @echo '#set(SOFTDEVICE $$$ {CMAKE_CURRENT_SOURCE_DIR}/s132.hex)' From b4715ae371b15e9a7a1c49f1b0e55088f9968bb7 Mon Sep 17 00:00:00 2001 From: Nicolas Veloz Savino Date: Tue, 21 Dec 2021 00:53:49 +0100 Subject: [PATCH 9/9] Fixing to use new nordic_cmake repo --- nrf5-make2cmake.sh | 345 +++++---------------------------------------- 1 file changed, 34 insertions(+), 311 deletions(-) diff --git a/nrf5-make2cmake.sh b/nrf5-make2cmake.sh index 0d9e04c..1cd5640 100755 --- a/nrf5-make2cmake.sh +++ b/nrf5-make2cmake.sh @@ -28,294 +28,6 @@ source [find target/nrf52.cfg] EOF3 -nrf52_cmake="nrf52.cmake" - -\cat << 'EOF2' > ${nrf52_cmake} -cmake_minimum_required(VERSION 3.4.0) - -FUNCTION(SET_COMPILER_OPTIONS TARGET) - target_compile_options(${TARGET} PRIVATE - $<$:${CFLAGS}> - $<$:${CXXFLAGS}> - $<$:${ASMFLAGS}> - ) -ENDFUNCTION() - - -FUNCTION(NRF_FLASH_TARGET TARGET) - - - if (NOT OPENOCD_CFG) - set(OPENOCD_CFG ${CMAKE_CURRENT_SOURCE_DIR}/nrf52_stlink.cfg) - message(STATUS "Using default OpenOCD config file: ${OPENOCD_CFG}") - else() - message(STATUS "Using OpenOCD config file: ${OPENOCD_CFG}") - endif() - - if (NOT OPENOCD_BIN) - find_program(OPENOCD_BIN openocd) - if (NOT OPENOCD_BIN) - message(WANING "OpenOCD binaries, not found, no FLASH target will be created") - return() - else() - message(STATUS "Found OpenOCD binaries in ${OPENOCD_BIN}") - endif() - else() - message(STATUS "Using OpenOCD binaries: ${OPENOCD_BIN}") - endif() - - if (BOOTLOADER_FILE AND NOT NRFUTIL_BIN) - find_program(NRFUTIL_BIN nrfutil) - if (NOT NRFUTIL_BIN) - message(WANING "nrfutil binaries, not found, no Bootloader settings can be created") - return() - else() - message(STATUS "Found nrfutil binaries in ${NRFUTIL_BIN}") - endif() - else() - message(STATUS "Using nrfutil binaries: ${NRFUTIL_BIN}") - endif() - - - - - set(FILE ${CMAKE_BINARY_DIR}/${TARGET}) - if (SOFTDEVICE) - set(REQUIRE_MERGEHEX TRUE) - set(SOFT_DEV_CMD "nrf5 mass_erase\; program \"${SOFTDEVICE}\" verify\;") - else() - set(SOFT_DEV_CMD "") - endif() - - #nrfutil settings generate --family NRF52 --application remote_nordic.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 settings.hex - - - - if (BOOTLOADER_FILE) - - set(BOOT_FILE ${CMAKE_BINARY_DIR}/boot.hex) - set(SETTINGS_FILE ${CMAKE_BINARY_DIR}/settings.hex) - set(BOOT_CMD - COMMAND echo "Preparing Bootloader" - COMMAND rm -f ${SETTINGS_FILE} - COMMAND rm -f ${BOOT_FILE} - COMMAND ${NRFUTIL_BIN} settings generate --family NRF52 --application ${FILE}.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 ${SETTINGS_FILE} - COMMAND ${MERGEHEX_BIN} -m ${BOOTLOADER_FILE} ${SETTINGS_FILE} -o ${BOOT_FILE} - COMMAND echo "Bootloader hex done ${BOOT_FILE}" - ) - set(REQUIRE_MERGEHEX TRUE) - else() - set(BOOT_CMD "") - endif() - - - - if (REQUIRE_MERGEHEX AND NOT MERGEHEX_BIN) - find_program(MERGEHEX_BIN mergehex) - if (NOT MERGEHEX_BIN) - message(WARNING "mergehex binaries, not found, no FLASH target will be created") - return() - else() - message(STATUS "Found mergehex binaries in ${MERGEHEX_BIN}") - endif() - else() - message(STATUS "Using mergehex binaries: ${MERGEHEX_BIN}") - endif() - - - - - if (OPENOCD_SCRIPT) - set(OPENOCD_SCRIPT_CMD "-s ${OPENOCD_SCRIPT}") - else() - set(OPENOCD_SCRIPT_CMD "") - endif() - - if(BOOT_FILE OR SOFTDEVICE) - set(FULL_FILE ${CMAKE_BINARY_DIR}/full.hex) - set(MERGE_CMD - COMMAND rm -f ${FULL_FILE} - COMMAND ${MERGEHEX_BIN} -m ${BOOT_FILE} ${SOFTDEVICE} ${FILE}.hex -o ${FULL_FILE} - ) - else() - set(FULL_FILE ${FILE}.hex) - set(MERGE_CMD - "") - endif() - - set(OPENOCD_FLASH_CMD "reset_config none\; init\; halt\; nrf5 mass_erase\; program \"${FULL_FILE}\" verify\; reset\; exit") - set(OPENOCD_DEBUG_CMD "reset_config none\; init\; halt\; nrf5 mass_erase\; program \"${FULL_FILE}\" verify\; verify\; reset halt\; exit") - if (HLA_SERIAL) - set(OPENOCD_FLASH_CMD "hla_serial ${HLA_SERIAL}\; ${OPENOCD_FLASH_CMD}") - set(OPENOCD_DEBUG_CMD "hla_serial ${HLA_SERIAL}\; ${OPENOCD_DEBUG_CMD}") - else() - - endif() - - - add_custom_target(Flash - DEPENDS ${TARGET} - COMMAND rm -f ${FILE}.hex - COMMAND rm -f ${FULL_FILE} - COMMAND ${CMAKE_OBJCOPY} -Oihex ${FILE} ${FILE}.hex - ${BOOT_CMD} - ${MERGE_CMD} - COMMAND ${OPENOCD_BIN} -f ${OPENOCD_CFG} ${OPENOCD_SCRIPT_CMD} -c "${OPENOCD_FLASH_CMD}" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} USES_TERMINAL) - - add_custom_target(Flash-Debug - DEPENDS ${TARGET} - COMMAND rm -f ${FILE}.hex - COMMAND rm -f ${FULL_FILE} - COMMAND ${CMAKE_OBJCOPY} -Oihex ${FILE} ${FILE}.hex - ${BOOT_CMD} - ${MERGE_CMD} - COMMAND ${OPENOCD_BIN} -f ${OPENOCD_CFG} ${OPENOCD_SCRIPT_CMD} -c "${OPENOCD_DEBUG_CMD}" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} USES_TERMINAL) - - -ENDFUNCTION() - -FUNCTION(PRINT_SIZE_OF_TARGETS TARGET) - SET(FILENAME "${CMAKE_BINARY_DIR}/${TARGET}") - add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_SIZE} ${FILENAME}) -ENDFUNCTION() - - -FUNCTION(ADD_HEX_BIN_TARGETS TARGET) - SET(FILENAME "${CMAKE_BINARY_DIR}/${TARGET}") - add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Oihex ${FILENAME} ${FILENAME}.hex) - add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Obinary ${FILENAME} ${FILENAME}.bin) -ENDFUNCTION() - - -FUNCTION(SET_COMPILATION_FLAGS) - foreach(LIB ${LIB_FILES}) - find_file(LIB_FILE_${LIB} ${LIB} ${CMAKE_SOURCE_DIR}) - if (NOT LIB_FILE_${LIB}) - string(REGEX REPLACE "-l(.*)" "\\1" LIB_CLEAN ${LIB}) - list(APPEND LIBS_CLEAN ${LIB_CLEAN}) - else () - list(APPEND LIB_FILES_CLEAN ${LIB_FILE_${LIB}}) - endif() - endforeach() - string(REPLACE ";" " " LDFLAGS "${LDFLAGS}") - set(LIB_FILES_CLEAN ${LIB_FILES_CLEAN} PARENT_SCOPE) - set(LIBS_CLEAN ${LIBS_CLEAN} PARENT_SCOPE) - set(CMAKE_C_FLAGS "" CACHE INTERNAL "c compiler flags") - set(CMAKE_CXX_FLAGS "" CACHE INTERNAL "c++ compiler flags") - set(CMAKE_ASM_FLAGS "-x assembler-with-cpp" CACHE INTERNAL "asm compiler flags") - set(CMAKE_EXE_LINKER_FLAGS "${LDFLAGS} " CACHE INTERNAL "executable linker flags") -ENDFUNCTION() - -FUNCTION(NRF_SET_COMPILERS) - - if (WIN32 OR WIN64) - set(TOOL_EXECUTABLE_SUFFIX .exe) - else() - set(TOOL_EXECUTABLE_SUFFIX ) - endif() - - - if(NOT TARGET_TRIPLET) - set(TARGET_TRIPLET arm-none-eabi) - set(EXE_EXTENSION ${TOOL_EXECUTABLE_SUFFIX}) - message(STATUS "Using default target triplet ${TARGET_TRIPLET}") - else() - set(EXE_EXTENSION ) - message(STATUS "Using target triplet ${TARGET_TRIPLET}") - endif() - if(NOT TOOLCHAIN_PREFIX) - if (C_COMPILER) - get_filename_component(TOOLCHAIN_PREFIX ${C_COMPILER} DIRECTORY) - else() - set(TOOLCHAIN_PREFIX "") - message(STATUS "Using default TOOLCHAIN_PREFIX: ${TOOLCHAIN_PREFIX}") - endif() - message(STATUS "Using TOOLCHAIN_PREFIX from C_COMPILER: ${TOOLCHAIN_PREFIX}") - else() - message(STATUS "Using TOOLCHAIN_PREFIX: ${TOOLCHAIN_PREFIX}") - endif() - if (NOT TOOLCHAIN_PREFIX STREQUAL "") - set(TOOLCHAIN_PREFIX ${TOOLCHAIN_PREFIX}/) - endif() - - if(NOT C_COMPILER) - set(C_COMPILER ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) - message(STATUS "Using default C compiler: ${C_COMPILER}") - else() - message(STATUS "Using C compiler: ${CXX_COMPILER}") - endif() - - if(NOT CXX_COMPILER) - set(CXX_COMPILER ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-c++${EXE_EXTENSION}) - message(STATUS "Using default C++ compiler: ${CXX_COMPILER}") - else() - message(STATUS "Using C++ compiler: ${CXX_COMPILER}") - endif() - - if(NOT ASM_COMPILER) - set(ASM_COMPILER ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-gcc${EXE_EXTENSION}) - message(STATUS "Using default ASM compiler: ${ASM_COMPILER}") - else() - message(STATUS "Using ASM compiler: ${ASM_COMPILER}") - endif() - - if(NOT COMPILER_SIZE_TOOL) - set(COMPILER_SIZE_TOOL ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-size${EXE_EXTENSION}) - message(STATUS "Using default compiler size tool: ${COMPILER_SIZE_TOOL}") - else() - message(STATUS "Using compiler size tool: ${COMPILER_SIZE_TOOL}") - endif() - - if(NOT COMPILER_OBJCOPY_TOOL) - set(COMPILER_OBJCOPY_TOOL ${TOOLCHAIN_PREFIX}${TARGET_TRIPLET}-objcopy${EXE_EXTENSION}) - message(STATUS "Using default compiler objcopy tool: ${COMPILER_OBJCOPY_TOOL}") - else() - message(STATUS "Using compiler objcopy tool: ${COMPILER_OBJCOPY_TOOL}") - endif() - - if( ${CMAKE_VERSION} VERSION_LESS 3.6.0) - INCLUDE(CMakeForceCompiler) - CMAKE_FORCE_C_COMPILER( ${C_COMPILER} GNU) - CMAKE_FORCE_CXX_COMPILER( ${CXX_COMPILER} GNU) - else() - SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY PARENT_SCOPE) - SET(CMAKE_C_COMPILER ${C_COMPILER} PARENT_SCOPE) - SET(CMAKE_CXX_COMPILER ${CXX_COMPILER} PARENT_SCOPE) - endif() - - SET(CMAKE_SIZE ${COMPILER_SIZE_TOOL} PARENT_SCOPE) - SET(CMAKE_OBJCOPY ${COMPILER_OBJCOPY_TOOL} PARENT_SCOPE) - SET(CMAKE_ASM_COMPILER ${ASM_COMPILER} PARENT_SCOPE) -ENDFUNCTION() - - - -set(CMAKE_C_FLAGS_DEBUG "") -set(CMAKE_C_FLAGS_RELEASE "") -set(CMAKE_C_FLAGS_MINSIZEREL "") -set(CMAKE_C_FLAGS_RELWITHDEBINFO "") - -set(CMAKE_CXX_FLAGS_DEBUG "") -set(CMAKE_CXX_FLAGS_RELEASE "") -set(CMAKE_CXX_FLAGS_MINSIZEREL "") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "") - -set(CMAKE_ASM_FLAGS_DEBUG "") -set(CMAKE_ASM_FLAGS_RELEASE "") -set(CMAKE_ASM_FLAGS_MINSIZEREL "") -set(CMAKE_ASM_FLAGS_RELWITHDEBINFO "") - -set(CMAKE_EXE_LINKE_FLAGS_DEBUG "") -set(CMAKE_EXE_LINKE_FLAGS_RELEASE "") -set(CMAKE_EXE_LINKE_FLAGS_MINSIZEREL "") -set(CMAKE_EXE_LINKE_FLAGS_RELWITHDEBINFO "") - -EOF2 - - - tmp_makefile="CMakeLists-generator.mk" \cat << 'EOF' > ${tmp_makefile} @@ -330,25 +42,16 @@ TEMPLATE_PATH:="$$$ \{CMAKE_SOURCE_DIR\}/"$(TEMPLATE_PATH) generate: @echo 'cmake_minimum_required(VERSION 3.4.0)' @echo '' - @echo 'include(nrf52.cmake)' - + @echo 'include(nrf52.cmake) # get it from https://github.com/nvelozsavino/nordic_cmake.git' @echo '' @echo '' - @echo '$(GNU_INSTALL_ROOT2)' @echo '' - - @echo 'set(C_COMPILER $(CC))' - @echo 'set(CXX_COMPILER $(CXX))' - @echo 'set(ASM_COMPILER $(CC))' - @echo '' - $(foreach var, PROJECT_NAME, \ echo "set($(var) $($(var)))" ; \ ) @echo '' @echo '' - $(foreach var, CFLAGS CXXFLAGS ASMFLAGS LIB_FILES, \ echo "set($(var)" ; \ echo " $($(var))" | sed -e 's/\s\+/\n\t/g'; \ @@ -359,32 +62,28 @@ generate: echo " $($(var))" | sed -e 's/\s\+/\n\t/g; s/-\(L\|T\)/-\1$$$ {CMAKE_SOURCE_DIR}\//g'; \ echo ")" ; \ ) - @echo 'set(SRC_FILES ' @echo ' $(SRC_FILES)' | sed -e 's/\s\+/\n\t/g' @echo ')' @echo '' @echo '' - @echo 'set(INC_FOLDERS' @echo ' $(INC_FOLDERS)' | sed -e 's/\s\+/\n\t/g' @echo ')' @echo '' @echo '' - @echo 'project($$$ {PROJECT_NAME})' + @echo 'project( $$$ {PROJECT_NAME} )' @echo 'enable_language(ASM)' @echo '' - @echo 'NRF_SET_COMPILERS()' @echo 'SET_COMPILATION_FLAGS()' - @echo '' - @echo 'set(PROJECT_CMAKE_INCLUDE "$$$ {CMAKE_SOURCE_DIR}/project.cmake" CACHE STRING "Project CMake Include")' @echo 'if(EXISTS $$$ {PROJECT_CMAKE_INCLUDE} )' - @echo ' include( $$$ {PROJECT_CMAKE_INCLUDE} )' + @echo ' include($$$ {PROJECT_CMAKE_INCLUDE})' @echo 'endif()' + @echo '' @echo '' @@ -392,16 +91,40 @@ generate: @echo 'add_executable($$$ {PROJECT_NAME} $$$ {SRC_FILES})' @echo 'target_link_libraries($$$ {PROJECT_NAME} PUBLIC $$$ {LIBS_CLEAN} $$$ {LIB_FILES_CLEAN})' + @echo '' + @echo '' + + @echo 'message(FATAL_ERROR "Set SOFTDEVICE variables with the Softdevice hex file and info and comment this error")' + @echo 'set(SOFTDEVICE_HEX_FILE "")' + @echo 'set(SOFTDEVICE_FWID_REQ "")' + @echo 'set(SOFTDEVICE_FWID_ID "")' + @echo '' + @echo '' + + @echo 'set(FW_VERSION "v0.0.1") #Firmware Version' + @echo 'set(OUTPUT_FOLDER "$$$ {CMAKE_SOURCE_DIR}/build/$$$ {FW_VERSION}/")' + @echo 'set(OBJ_NAME "$$$ {OUTPUT_FOLDER}/$$$ {PROJECT_NAME}")' + @echo '' + @echo '' - @echo 'message(WARNING "Set SOFTDEVICE variable with the Softdevice hex file")' - @echo '#set(SOFTDEVICE $$$ {CMAKE_CURRENT_SOURCE_DIR}/s132.hex)' - @echo 'message(WARNING "Set MERGEHEX_BIN with path to mergehex utility")' - @echo '#set(MERGEHEX_BIN /opt/nordic/mergehex/mergehex)' + @echo 'set(APP_HEX_FILE $$$ {TARGET_HEX_FILE})' + @echo 'set(APP_HEX_FILE-CREATE TRUE)' + @echo 'set(BOOTLOADER_VERSION 1)' @echo 'SET_COMPILER_OPTIONS($$$ {PROJECT_NAME})' @echo 'PRINT_SIZE_OF_TARGETS($$$ {PROJECT_NAME})' - @echo 'ADD_HEX_BIN_TARGETS($$$ {PROJECT_NAME})' - @echo 'NRF_FLASH_TARGET($$$ {PROJECT_NAME})' + @echo 'ADD_HEX_BIN_TARGETS($$$ {PROJECT_NAME} $$$ {OBJ_NAME})' + @echo 'NRF_FLASH_TARGET($$$ {PROJECT_NAME} $$$ {TARGET_HEX_FILE})' + @echo '' + + @echo 'if (NOT BOOTLOADER_HEX_FILE)' + @echo ' message(WARNING "Add -DBOOTLOADER_HEX_FILE= to CMake env variables")' + @echo 'endif()' + + @echo 'if (NOT KEY_PEM_FILE)' + @echo ' message(WARNING "Add -DKEY_PEM_FILE= to CMake env variables")' + @echo 'endif()' + @echo 'GENERATE_UPDATE_FLASH_TARGET($$$ {PROJECT_NAME} "APP" $$$ {OBJ_NAME}.zip)' EOF