2022-10-21 10:17:49 +08:00
|
|
|
macro(sdk_generate_library)
|
|
|
|
if(${ARGC})
|
2023-01-17 20:54:15 +08:00
|
|
|
set(library_name ${ARGV0})
|
2022-10-21 10:17:49 +08:00
|
|
|
else()
|
2023-02-24 21:33:12 +08:00
|
|
|
get_filename_component(library_name ${CMAKE_CURRENT_LIST_DIR} NAME)
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
|
|
|
|
message(STATUS "[register library : ${library_name}], path:${CMAKE_CURRENT_LIST_DIR}")
|
|
|
|
|
|
|
|
set(CURRENT_STATIC_LIBRARY ${library_name})
|
|
|
|
add_library(${library_name} STATIC)
|
|
|
|
set_property(GLOBAL APPEND PROPERTY SDK_LIBS ${library_name})
|
|
|
|
target_link_libraries(${library_name} PUBLIC sdk_intf_lib)
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
function(sdk_library_add_sources)
|
|
|
|
foreach(arg ${ARGV})
|
|
|
|
if(IS_DIRECTORY ${arg})
|
2023-02-24 21:33:12 +08:00
|
|
|
message(FATAL_ERROR "sdk_library_add_sources() was called on a directory")
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(IS_ABSOLUTE ${arg})
|
2023-02-24 21:33:12 +08:00
|
|
|
set(path ${arg})
|
2022-10-21 10:17:49 +08:00
|
|
|
else()
|
2023-02-24 21:33:12 +08:00
|
|
|
set(path ${CMAKE_CURRENT_SOURCE_DIR}/${arg})
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
2023-02-24 21:33:12 +08:00
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
target_sources(${CURRENT_STATIC_LIBRARY} PRIVATE ${path})
|
|
|
|
endforeach()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(sdk_library_add_sources_ifdef feature)
|
|
|
|
if(${${feature}})
|
2023-02-24 21:33:12 +08:00
|
|
|
sdk_library_add_sources(${ARGN})
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(sdk_add_include_directories)
|
|
|
|
foreach(arg ${ARGV})
|
|
|
|
if(IS_ABSOLUTE ${arg})
|
|
|
|
set(path ${arg})
|
|
|
|
else()
|
|
|
|
set(path ${CMAKE_CURRENT_SOURCE_DIR}/${arg})
|
|
|
|
endif()
|
2023-02-24 21:33:12 +08:00
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
target_include_directories(sdk_intf_lib INTERFACE ${path})
|
|
|
|
endforeach()
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
function(sdk_add_private_include_directories)
|
|
|
|
foreach(arg ${ARGV})
|
|
|
|
if(IS_ABSOLUTE ${arg})
|
|
|
|
set(path ${arg})
|
|
|
|
else()
|
|
|
|
set(path ${CMAKE_CURRENT_SOURCE_DIR}/${arg})
|
|
|
|
endif()
|
2023-02-24 21:33:12 +08:00
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
target_include_directories(${CURRENT_STATIC_LIBRARY} PRIVATE ${path})
|
|
|
|
endforeach()
|
|
|
|
endfunction()
|
|
|
|
|
2023-02-24 21:33:12 +08:00
|
|
|
function(sdk_add_system_include_directories)
|
|
|
|
foreach(arg ${ARGV})
|
|
|
|
if(IS_ABSOLUTE ${arg})
|
|
|
|
set(path ${arg})
|
|
|
|
else()
|
|
|
|
set(path ${CMAKE_CURRENT_SOURCE_DIR}/${arg})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
target_include_directories(sdk_intf_lib SYSTEM INTERFACE ${path})
|
|
|
|
endforeach()
|
|
|
|
endfunction()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
function(sdk_add_include_directories_ifdef feature)
|
|
|
|
if(${${feature}})
|
2023-02-24 21:33:12 +08:00
|
|
|
sdk_add_include_directories(${ARGN})
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
function(sdk_add_private_include_directories_ifdef feature)
|
|
|
|
if(${${feature}})
|
2023-02-24 21:33:12 +08:00
|
|
|
sdk_add_private_include_directories(${ARGN})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(sdk_add_system_include_directories_ifdef feature)
|
|
|
|
if(${${feature}})
|
|
|
|
sdk_add_system_include_directories(${ARGN})
|
2023-01-17 20:54:15 +08:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
function(sdk_add_compile_definitions)
|
|
|
|
target_compile_definitions(sdk_intf_lib INTERFACE ${ARGV})
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
function(sdk_add_private_compile_definitions)
|
|
|
|
target_compile_definitions(${CURRENT_STATIC_LIBRARY} PRIVATE ${ARGV})
|
|
|
|
endfunction()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
function(sdk_add_compile_definitions_ifdef feature)
|
|
|
|
if(${${feature}})
|
2023-02-24 21:33:12 +08:00
|
|
|
sdk_add_compile_definitions(${ARGN})
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
function(sdk_add_private_compile_definitions_ifdef feature)
|
|
|
|
if(${${feature}})
|
|
|
|
sdk_add_private_compile_definitions(${ARGN})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
function(sdk_add_compile_options)
|
|
|
|
target_compile_options(sdk_intf_lib INTERFACE ${ARGV})
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
function(sdk_add_private_compile_options)
|
|
|
|
target_compile_options(${CURRENT_STATIC_LIBRARY} PRIVATE ${ARGV})
|
|
|
|
endfunction()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
function(sdk_add_compile_options_ifdef feature)
|
|
|
|
if(${${feature}})
|
2023-02-24 21:33:12 +08:00
|
|
|
sdk_add_compile_options(${ARGN})
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
function(sdk_add_private_compile_options_ifdef feature)
|
|
|
|
if(${${feature}})
|
2023-02-24 21:33:12 +08:00
|
|
|
sdk_add_private_compile_options(${ARGN})
|
2023-01-17 20:54:15 +08:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
function(sdk_add_link_options)
|
|
|
|
target_link_options(sdk_intf_lib INTERFACE ${ARGV})
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
function(sdk_add_private_link_options)
|
|
|
|
target_link_options(${CURRENT_STATIC_LIBRARY} PRIVATE ${ARGV})
|
|
|
|
endfunction()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
function(sdk_add_link_options_ifdef feature)
|
|
|
|
if(${${feature}})
|
2023-02-24 21:33:12 +08:00
|
|
|
sdk_add_link_options(${ARGN})
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
function(sdk_add_private_link_options_ifdef feature)
|
|
|
|
if(${${feature}})
|
|
|
|
sdk_add_private_link_options(${ARGN})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
function(sdk_add_link_libraries)
|
|
|
|
target_link_libraries(sdk_intf_lib INTERFACE ${ARGV})
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(sdk_add_link_libraries_ifdef feature)
|
|
|
|
if(${${feature}})
|
2023-02-24 21:33:12 +08:00
|
|
|
sdk_add_link_libraries(${ARGN})
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(sdk_add_subdirectory_ifdef feature dir)
|
|
|
|
if(${${feature}})
|
|
|
|
add_subdirectory(${dir})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
function(sdk_add_static_library)
|
|
|
|
foreach(arg ${ARGV})
|
2023-02-24 21:33:12 +08:00
|
|
|
if(IS_DIRECTORY ${arg})
|
|
|
|
message(FATAL_ERROR "sdk_add_static_library() was called on a directory")
|
|
|
|
endif()
|
2023-01-17 20:54:15 +08:00
|
|
|
|
2023-02-24 21:33:12 +08:00
|
|
|
if(IS_ABSOLUTE ${arg})
|
|
|
|
set(path ${arg})
|
|
|
|
else()
|
|
|
|
set(path ${CMAKE_CURRENT_SOURCE_DIR}/${arg})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
get_filename_component(library_name ${path} NAME_WE)
|
|
|
|
message(STATUS "[register extern library : ${library_name}], path:${CMAKE_CURRENT_LIST_DIR}")
|
|
|
|
set_property(GLOBAL APPEND PROPERTY SDK_LIBS ${path})
|
2023-01-17 20:54:15 +08:00
|
|
|
endforeach()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(sdk_add_static_library_ifdef feature)
|
|
|
|
if(${${feature}})
|
|
|
|
sdk_add_static_library(${ARGN})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2022-11-25 20:18:36 +08:00
|
|
|
macro(sdk_ifndef define val)
|
|
|
|
if(NOT DEFINED ${define})
|
|
|
|
set(${define} ${val})
|
|
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
function(sdk_set_linker_script ld)
|
|
|
|
if(IS_ABSOLUTE ${ld})
|
2023-02-24 21:33:12 +08:00
|
|
|
set(path ${ld})
|
2022-10-21 10:17:49 +08:00
|
|
|
else()
|
2023-02-24 21:33:12 +08:00
|
|
|
set(path ${CMAKE_CURRENT_SOURCE_DIR}/${ld})
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
2023-02-24 21:33:12 +08:00
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
set_property(GLOBAL PROPERTY LINKER_SCRIPT ${path})
|
|
|
|
endfunction()
|
|
|
|
|
2023-01-17 20:54:15 +08:00
|
|
|
macro(sdk_set_vscode_dir dir)
|
|
|
|
if(IS_ABSOLUTE ${dir})
|
|
|
|
set(VSCODE_DIR ${dir})
|
2022-10-29 16:40:04 +08:00
|
|
|
else()
|
2023-01-17 20:54:15 +08:00
|
|
|
set(VSCODE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir})
|
2022-10-29 16:40:04 +08:00
|
|
|
endif()
|
2023-01-17 20:54:15 +08:00
|
|
|
endmacro()
|
2022-10-29 16:40:04 +08:00
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
macro(sdk_set_main_file)
|
2023-02-24 21:33:12 +08:00
|
|
|
if(IS_ABSOLUTE ${ARGV0})
|
2022-10-21 10:17:49 +08:00
|
|
|
set(path ${ARGV0})
|
2023-02-24 21:33:12 +08:00
|
|
|
else()
|
2022-10-21 10:17:49 +08:00
|
|
|
set(path ${CMAKE_CURRENT_SOURCE_DIR}/${ARGV0})
|
2023-02-24 21:33:12 +08:00
|
|
|
endif()
|
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
set(CURRENT_MAIN_FILE ${path})
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
macro(project name)
|
|
|
|
if(CPU_ID)
|
2023-02-24 21:33:12 +08:00
|
|
|
set(proj_name ${name}_${CHIP}_${CPU_ID})
|
2022-10-21 10:17:49 +08:00
|
|
|
else()
|
2023-02-24 21:33:12 +08:00
|
|
|
set(proj_name ${name}_${CHIP})
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
|
|
|
|
_project(${proj_name} ASM C CXX)
|
|
|
|
|
|
|
|
set(HEX_FILE ${build_dir}/${proj_name}.hex)
|
|
|
|
set(BIN_FILE ${build_dir}/${proj_name}.bin)
|
|
|
|
set(MAP_FILE ${build_dir}/${proj_name}.map)
|
|
|
|
set(ASM_FILE ${build_dir}/${proj_name}.asm)
|
|
|
|
|
|
|
|
add_executable(${proj_name}.elf ${CURRENT_MAIN_FILE})
|
|
|
|
target_link_libraries(${proj_name}.elf sdk_intf_lib)
|
|
|
|
get_property(LINKER_SCRIPT_PROPERTY GLOBAL PROPERTY LINKER_SCRIPT)
|
2023-02-24 21:33:12 +08:00
|
|
|
|
2022-10-21 10:17:49 +08:00
|
|
|
if(EXISTS ${LINKER_SCRIPT_PROPERTY})
|
|
|
|
set_target_properties(${proj_name}.elf PROPERTIES LINK_FLAGS "-T${LINKER_SCRIPT_PROPERTY} -Wl,-Map=${MAP_FILE}")
|
|
|
|
set_target_properties(${proj_name}.elf PROPERTIES LINK_DEPENDS ${LINKER_SCRIPT_PROPERTY})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
get_property(SDK_LIBS_PROPERTY GLOBAL PROPERTY SDK_LIBS)
|
2023-02-24 21:33:12 +08:00
|
|
|
target_link_libraries(${proj_name}.elf -Wl,--whole-archive ${SDK_LIBS_PROPERTY} app -Wl,--no-whole-archive)
|
2022-10-21 10:17:49 +08:00
|
|
|
|
|
|
|
if(OUTPUT_DIR)
|
2023-02-24 21:33:12 +08:00
|
|
|
add_custom_command(TARGET ${proj_name}.elf POST_BUILD
|
|
|
|
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${proj_name}.elf> ${BIN_FILE}
|
|
|
|
COMMAND ${CMAKE_OBJDUMP} -d -S $<TARGET_FILE:${proj_name}.elf> >${ASM_FILE}
|
|
|
|
|
|
|
|
# COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${proj_name}.elf> ${HEX_FILE}
|
|
|
|
# COMMAND ${SIZE} $<TARGET_FILE:${proj_name}.elf>
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${proj_name}.elf> ${OUTPUT_DIR}/${name}/${proj_name}.elf
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ASM_FILE} ${OUTPUT_DIR}/${name}/${proj_name}.asm
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${MAP_FILE} ${OUTPUT_DIR}/${name}/${proj_name}.map
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${BIN_FILE} ${OUTPUT_DIR}/${name}/${proj_name}.bin
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${BIN_FILE} ${OUTPUT_DIR}/project.bin
|
|
|
|
COMMENT "Generate ${BIN_FILE}\r\n"
|
|
|
|
)
|
2022-10-21 10:17:49 +08:00
|
|
|
|
|
|
|
else()
|
2023-02-24 21:33:12 +08:00
|
|
|
add_custom_command(TARGET ${proj_name}.elf POST_BUILD
|
|
|
|
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${proj_name}.elf> ${BIN_FILE}
|
|
|
|
COMMAND ${CMAKE_OBJDUMP} -d -S $<TARGET_FILE:${proj_name}.elf> >${ASM_FILE}
|
|
|
|
|
|
|
|
# COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${proj_name}.elf> ${HEX_FILE}
|
|
|
|
# COMMAND ${SIZE} $<TARGET_FILE:${proj_name}.elf>
|
|
|
|
COMMENT "Generate ${BIN_FILE}\r\n"
|
|
|
|
)
|
2022-10-21 10:17:49 +08:00
|
|
|
endif()
|
|
|
|
|
2023-02-24 21:33:12 +08:00
|
|
|
include(${BL_SDK_BASE}/cmake/bflb_flash.cmake)
|
|
|
|
include(${BL_SDK_BASE}/cmake/gen_c_cpp_properties_json.cmake)
|
2022-10-21 10:17:49 +08:00
|
|
|
endmacro()
|