123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- set_property(TARGET linker PROPERTY devices_start_symbol "__device_start")
- find_program(CMAKE_LINKER ${CROSS_COMPILE}lldac PATH ${TOOLCHAIN_HOME} NO_DEFAULT_PATH)
- set_ifndef(LINKERFLAGPREFIX -Wl,)
- macro(configure_linker_script linker_script_gen linker_pass_define)
- set(extra_dependencies ${ARGN})
-
- if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
-
-
- set(linker_script_dep IMPLICIT_DEPENDS C ${LINKER_SCRIPT})
- elseif(CMAKE_GENERATOR STREQUAL "Ninja")
-
- set(linker_script_dep DEPFILE ${PROJECT_BINARY_DIR}/${linker_script_gen}.dep)
- else()
-
-
- message(STATUS "Warning; this generator is not well supported. The
- Linker script may not be regenerated when it should.")
- set(linker_script_dep "")
- endif()
- zephyr_get_include_directories_for_lang(C current_includes)
- get_filename_component(base_name ${CMAKE_CURRENT_BINARY_DIR} NAME)
- get_property(current_defines GLOBAL PROPERTY PROPERTY_LINKER_SCRIPT_DEFINES)
- add_custom_command(
- OUTPUT ${linker_script_gen}
- DEPENDS
- ${LINKER_SCRIPT}
- ${AUTOCONF_H}
- ${extra_dependencies}
-
- ${linker_script_dep}
- COMMAND ${CMAKE_C_COMPILER}
- -x c
- ${NOSYSDEF_CFLAG}
- -Hnocopyr
- -MD -MF ${linker_script_gen}.dep -MT ${base_name}/${linker_script_gen}
- -D_LINKER
- -D_ASMLANGUAGE
- -imacros ${AUTOCONF_H}
- ${current_includes}
- ${current_defines}
- ${linker_pass_define}
- ${LINKER_SCRIPT}
- -E
- -o ${linker_script_gen}
- VERBATIM
- WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
- COMMAND_EXPAND_LISTS
- )
- endmacro()
- function(toolchain_ld_force_undefined_symbols)
- foreach(symbol ${ARGN})
- zephyr_link_libraries(${LINKERFLAGPREFIX}-u${symbol})
- endforeach()
- endfunction()
- function(toolchain_ld_link_elf)
- cmake_parse_arguments(
- TOOLCHAIN_LD_LINK_ELF
- ""
- "TARGET_ELF;OUTPUT_MAP;LINKER_SCRIPT"
- "LIBRARIES_PRE_SCRIPT;LIBRARIES_POST_SCRIPT;DEPENDENCIES"
- ${ARGN}
- )
- target_link_libraries(
- ${TOOLCHAIN_LD_LINK_ELF_TARGET_ELF}
- ${TOOLCHAIN_LD_LINK_ELF_LIBRARIES_PRE_SCRIPT}
- ${LINKERFLAGPREFIX}-T${TOOLCHAIN_LD_LINK_ELF_LINKER_SCRIPT}
- ${TOOLCHAIN_LD_LINK_ELF_LIBRARIES_POST_SCRIPT}
- ${LINKERFLAGPREFIX}--gc-sections
- ${LINKERFLAGPREFIX}--entry=__start
- ${LINKERFLAGPREFIX}--Map=${TOOLCHAIN_LD_LINK_ELF_OUTPUT_MAP}
- ${LINKERFLAGPREFIX}--whole-archive
- ${ZEPHYR_LIBS_PROPERTY}
- ${LINKERFLAGPREFIX}--no-whole-archive
- kernel
- $<TARGET_OBJECTS:${OFFSETS_LIB}>
- ${LIB_INCLUDE_DIR}
- -L${PROJECT_BINARY_DIR}
- ${TOOLCHAIN_LIBS}
- ${TOOLCHAIN_LD_LINK_ELF_DEPENDENCIES}
- )
- endfunction(toolchain_ld_link_elf)
- macro(toolchain_ld_baremetal)
- zephyr_ld_options(
- -Hlld
- -Hnosdata
- -Xtimer0
- -Hnoxcheck_obj
- -Hnocplus
- -Hhostlib=
- -Hheap=0
- -Hnoivt
- -Hnocrt
- )
-
-
-
-
-
- if(CONFIG_MINIMAL_LIBC)
- zephyr_ld_options(
- -Hnolib
- -Hldopt=-lmw
- )
- endif()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if(CONFIG_LINKER_ORPHAN_SECTION_WARN)
- message(WARNING "MWDT toolchain does not support
- CONFIG_LINKER_ORPHAN_SECTION_WARN")
- elseif(CONFIG_LINKER_ORPHAN_SECTION_ERROR)
- zephyr_ld_options(
- ${LINKERFLAGPREFIX}--orphan-handling=error)
- endif()
- endmacro()
- macro(toolchain_ld_base)
- if(NOT PROPERTY_LINKER_SCRIPT_DEFINES)
- set_property(GLOBAL PROPERTY PROPERTY_LINKER_SCRIPT_DEFINES -D__MWDT_LINKER_CMD__)
- endif()
-
-
- zephyr_ld_option_ifdef(
- CONFIG_LINKER_SORT_BY_ALIGNMENT
- ${LINKERFLAGPREFIX}--sort-section=alignment
- )
- endmacro()
- macro(toolchain_ld_configure_files)
- configure_file(
- $ENV{ZEPHYR_BASE}/include/arch/common/app_data_alignment.ld
- ${PROJECT_BINARY_DIR}/include/generated/app_data_alignment.ld)
- configure_file(
- $ENV{ZEPHYR_BASE}/include/linker/app_smem.ld
- ${PROJECT_BINARY_DIR}/include/generated/app_smem.ld)
- configure_file(
- $ENV{ZEPHYR_BASE}/include/linker/app_smem_aligned.ld
- ${PROJECT_BINARY_DIR}/include/generated/app_smem_aligned.ld)
- configure_file(
- $ENV{ZEPHYR_BASE}/include/linker/app_smem_unaligned.ld
- ${PROJECT_BINARY_DIR}/include/generated/app_smem_unaligned.ld)
- endmacro()
- macro(toolchain_ld_cpp)
- zephyr_link_libraries(
- -Hcplus
- )
- endmacro()
- macro(toolchain_ld_relocation)
- set(MEM_RELOCATION_LD "${PROJECT_BINARY_DIR}/include/generated/linker_relocate.ld")
- set(MEM_RELOCATION_SRAM_DATA_LD
- "${PROJECT_BINARY_DIR}/include/generated/linker_sram_data_relocate.ld")
- set(MEM_RELOCATION_SRAM_BSS_LD
- "${PROJECT_BINARY_DIR}/include/generated/linker_sram_bss_relocate.ld")
- set(MEM_RELOCATION_CODE "${PROJECT_BINARY_DIR}/code_relocation.c")
- add_custom_command(
- OUTPUT ${MEM_RELOCATION_CODE} ${MEM_RELOCATION_LD}
- COMMAND
- ${PYTHON_EXECUTABLE}
- ${ZEPHYR_BASE}/scripts/gen_relocate_app.py
- $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
- -d ${APPLICATION_BINARY_DIR}
- -i \"$<TARGET_PROPERTY:code_data_relocation_target,COMPILE_DEFINITIONS>\"
- -o ${MEM_RELOCATION_LD}
- -s ${MEM_RELOCATION_SRAM_DATA_LD}
- -b ${MEM_RELOCATION_SRAM_BSS_LD}
- -c ${MEM_RELOCATION_CODE}
- DEPENDS app kernel ${ZEPHYR_LIBS_PROPERTY}
- )
- add_library(code_relocation_source_lib STATIC ${MEM_RELOCATION_CODE})
- target_link_libraries(code_relocation_source_lib zephyr_interface)
- endmacro()
|