diff --git a/Makefile b/Makefile index 2d76e5a8..19c46372 100644 --- a/Makefile +++ b/Makefile @@ -1,38 +1,67 @@ +#common config BOARD?=bl706_iot CHIP?=bl702 APP_DIR?=examples APP?=helloworld CPU_ID?=none -COMx?= + +#bootrom config,users do not need it BOOTROM?=n -SUPPORT_FLOAT?=n -SUPPORT_ROMAPI?=y - -INTERFACE?=uart -BAUDRATE ?=2000000 - +#format config FORMAT_DIR?=. -export BOARD -export CHIP -export APP_DIR -export APP -export BOOTROM -export CPU_ID -export SUPPORT_FLOAT -export SUPPORT_ROMAPI - # The command to remove a file. -RM = cmake -E rm -rf +RM = cmake -E remove_directory -build: +#flash tool config +INTERFACE?=uart +COMx?= +BAUDRATE ?=2000000 +ifeq ($(INTERFACE),uart) +FLASH_DOWNLOAD_CONFIG:=--chipname=$(CHIP) --interface=uart --port=$(COMx) --baudrate=$(BAUDRATE) +else +FLASH_DOWNLOAD_CONFIG:=--chipname=$(CHIP) --interface=$(INTERFACE) +endif + +#option config to use +SUPPORT_FLOAT?=n +SUPPORT_ROMAPI?=y +SUPPORT_USB_HS?=n +SUPPORT_HW_SEC_ENG_DISABLE?=n +SUPPORT_BLECONTROLLER_LIB?= + +#cmake definition config +ifneq ($(CPU_ID),none) +cmake_definition+= -DCPU_ID=$(CPU_ID) +endif + +cmake_definition+= -DCHIP=$(CHIP) +cmake_definition+= -DBOARD=$(BOARD) +cmake_definition+= -DAPP_DIR=$(APP_DIR) +cmake_definition+= -DAPP=$(APP) +cmake_definition+= -DBOOTROM=$(BOOTROM) +cmake_definition+= -DSUPPORT_ROMAPI=$(SUPPORT_ROMAPI) +cmake_definition+= -DCONFIG_PRINT_FLOAT=$(SUPPORT_FLOAT) +cmake_definition+= -DCONFIG_USB_HS=$(SUPPORT_USB_HS) +cmake_definition+= -DCONFIG_HW_SEC_ENG_DISABLE=$(SUPPORT_HW_SEC_ENG_DISABLE) +cmake_definition+= -DCONFIG_BLECONTROLLER_LIB=$(SUPPORT_BLECONTROLLER_LIB) + +build:Makefile cmake -E make_directory build - cmake -E copy project.build build - make -C ./build -f ./project.build + cd build && cmake -G "Unix Makefiles" $(cmake_definition) .. + cd build && make -j4 + +help: + @echo "Welcome to MCU SDK camke build system,commands are as follows:" + @echo "" + @echo "make clean - Remove all cmake caches and output files" + @echo "make SUPPORT_FLOAT=y - Enable float print" + @echo "make SUPPORT_USB_HS=y - Enable usb high speed" + @echo "make SUPPORT_BLECONTROLLER_LIB=value - Select blecontroller lib,value can be m0s1、m0s1s、std or empty" download: - ./tools/bflb_flash_tool/bflb_mcu_tool --chipname=$(CHIP) --interface=$(INTERFACE) --port=$(COMx) --baudrate=$(BAUDRATE) + ./tools/bflb_flash_tool/bflb_mcu_tool $(FLASH_DOWNLOAD_CONFIG) format: find $(FORMAT_DIR)/ -name "*.c" -o -name "*.h" -o -name "*.cc" -o -name "*.cpp"| xargs clang-format -style=file -i @@ -41,5 +70,5 @@ clean: $(RM) out $(RM) build -.PHONY:build clean download format +.PHONY:build clean download format help diff --git a/Preload.cmake b/Preload.cmake deleted file mode 100644 index 6c16e991..00000000 --- a/Preload.cmake +++ /dev/null @@ -1 +0,0 @@ -set(CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE) \ No newline at end of file diff --git a/project.build b/project.build deleted file mode 100644 index 03fda0e3..00000000 --- a/project.build +++ /dev/null @@ -1,17 +0,0 @@ -ifneq ($(CPU_ID),none) -cmake_definition+= -DCPU_ID=$(CPU_ID) -endif - -cmake_definition+= -DCHIP=$(CHIP) -cmake_definition+= -DBOARD=$(BOARD) -cmake_definition+= -DSUPPORT_FLOAT=$(SUPPORT_FLOAT) -cmake_definition+= -DSUPPORT_ROMAPI=$(SUPPORT_ROMAPI) -cmake_definition+= -DAPP_DIR=$(APP_DIR) -cmake_definition+= -DAPP=$(APP) -cmake_definition+= -DBOOTROM=$(BOOTROM) - -__build: - cmake $(cmake_definition) .. - make -j4 - -.PHONY:__build \ No newline at end of file diff --git a/tools/cmake/compiler_flags.cmake b/tools/cmake/compiler_flags.cmake index 36361e11..d238a22a 100644 --- a/tools/cmake/compiler_flags.cmake +++ b/tools/cmake/compiler_flags.cmake @@ -9,7 +9,7 @@ list(APPEND GLOBAL_LD_FLAGS -Wall -Wchar-subscripts -std=c99) list(APPEND GLOBAL_LD_FLAGS --specs=nano.specs) -if("${SUPPORT_FLOAT}" STREQUAL "y") +if(CONFIG_PRINT_FLOAT_ENABLE) list(APPEND GLOBAL_LD_FLAGS -u _printf_float) endif() diff --git a/tools/cmake/tools.cmake b/tools/cmake/tools.cmake index a161ea36..89eba931 100644 --- a/tools/cmake/tools.cmake +++ b/tools/cmake/tools.cmake @@ -43,14 +43,7 @@ function(generate_library) # Add requirements if(ADD_REQUIREMENTS) - foreach(lib ${ADD_REQUIREMENTS}) - if(TARGET ${lib}) - add_dependencies(${library_name} ${lib}) - target_link_libraries(${library_name} ${lib}) - else() - message(FATAL_ERROR "${lib} is not a target") - endif() - endforeach() + target_link_libraries(${library_name} ${ADD_REQUIREMENTS}) endif() # Add static lib @@ -82,9 +75,9 @@ endfunction() function(generate_bin) - get_filename_component(current_relative_dir_name ${CMAKE_CURRENT_LIST_DIR} NAME) - string(REGEX REPLACE "(.*)/${current_relative_dir_name}$" "\\1" above_absolute_dir ${CMAKE_CURRENT_LIST_DIR}) - get_filename_component(above_relative_dir_name ${above_absolute_dir} NAME) + get_filename_component(current_dir_name ${CMAKE_CURRENT_LIST_DIR} NAME) + string(REGEX REPLACE "(.*)/${current_dir_name}$" "\\1" above_absolute_dir ${CMAKE_CURRENT_LIST_DIR}) + get_filename_component(above_dir_name ${above_absolute_dir} NAME) execute_process( COMMAND git submodule status @@ -137,21 +130,23 @@ function(generate_bin) set(OUTPUT_DIR ${OUTPUT}) set(target_name firmware) else() - if(${APP_DIR} MATCHES "../") #if demo is not in sdk path - string(REPLACE "../" "" dir ${APP_DIR}) - set(OUTPUT_DIR ${CMAKE_SOURCE_DIR}/out/${dir}/${current_relative_dir_name}) - elseif(${APP_DIR} MATCHES "./")#if demo is in sdk peer path - set(OUTPUT_DIR ${CMAKE_SOURCE_DIR}/out/${current_relative_dir_name}) + string(REPLACE "." ":" dot2colon ${APP_DIR}) + if(${dot2colon} MATCHES "::/") #if demo is not in sdk path + string(REPLACE "../" "" relative_dir ${APP_DIR}) + set(OUTPUT_DIR ${CMAKE_SOURCE_DIR}/out/${relative_dir}/${current_dir_name}) + elseif(${dot2colon} MATCHES ":")#if demo is in sdk peer path + set(OUTPUT_DIR ${CMAKE_SOURCE_DIR}/out/${current_dir_name}) else() #if demo is in sdk path not in peer path - if(${APP_DIR} MATCHES ${above_relative_dir_name}) #if demo has one-Layer Catalog - set(OUTPUT_DIR ${CMAKE_SOURCE_DIR}/out/${APP_DIR}/${current_relative_dir_name}) + if(${APP_DIR} MATCHES ${above_dir_name}) #if demo has one-Layer Catalog + set(OUTPUT_DIR ${CMAKE_SOURCE_DIR}/out/${APP_DIR}/${current_dir_name}) else() #if demo has Two-Layer Catalog - set(OUTPUT_DIR ${CMAKE_SOURCE_DIR}/out/${APP_DIR}/${above_relative_dir_name}/${current_relative_dir_name}) + set(OUTPUT_DIR ${CMAKE_SOURCE_DIR}/out/${APP_DIR}/${above_dir_name}/${current_dir_name}) endif() + endif() file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/submodule_commit_info.txt ${GIT_SUBMODULE_INFO}) - set(target_name ${current_relative_dir_name}) + set(target_name ${current_dir_name}) endif() file(MAKE_DIRECTORY ${OUTPUT_DIR}) @@ -240,7 +235,7 @@ if(DEFINED APP) get_filename_component(app_absolute_dir ${cmakelists_file} DIRECTORY) get_filename_component(app_absolute_dir_name ${app_absolute_dir} NAME) message(STATUS "[run app:${app_absolute_dir_name}], path:${app_absolute_dir}") - add_subdirectory(${app_absolute_dir} ${CMAKE_SOURCE_DIR}/build/samples/${app_absolute_dir_name}) + add_subdirectory(${app_absolute_dir} ${PROJECT_BINARY_DIR}/samples/${app_absolute_dir_name}) endforeach() else() message(FATAL_ERROR "can not find ${APP} in the first or second directory under the path:${component_path}") @@ -252,8 +247,8 @@ endif() endfunction() -function(check_add_library target_name directory) +function(check_add_library target_name directory) # if library do not be built, add its subdirectory and build it if(NOT TARGET ${target_name}) - add_subdirectory(${directory} ${CMAKE_SOURCE_DIR}/build/libraries/${target_name}) + add_subdirectory(${directory} ${PROJECT_BINARY_DIR}/libraries/${target_name}) endif() endfunction() \ No newline at end of file