mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-02-18 10:53:17 +00:00
71 lines
2.4 KiB
CMake
71 lines
2.4 KiB
CMake
# The script is to generate ELF for application
|
|
|
|
# Trick to temporarily redefine project(). When functions are overridden in CMake, the originals can still be accessed
|
|
# using an underscore prefixed function of the same name. The following lines make sure that project calls
|
|
# the original project(). See https://cmake.org/pipermail/cmake/2015-October/061751.html.
|
|
function(project_elf)
|
|
endfunction()
|
|
|
|
function(_project_elf)
|
|
endfunction()
|
|
|
|
macro(project_elf project_name)
|
|
# Enable these options to remove unused symbols and reduce linked objects
|
|
set(cflags -nostartfiles
|
|
-nostdlib
|
|
-fPIC
|
|
-shared
|
|
-e app_main
|
|
-fdata-sections
|
|
-ffunction-sections
|
|
-Wl,--gc-sections
|
|
-fvisibility=hidden)
|
|
|
|
# Enable this options to remove unnecessary sections in
|
|
list(APPEND cflags -Wl,--strip-all
|
|
-Wl,--strip-debug
|
|
-Wl,--strip-discarded)
|
|
|
|
list(APPEND cflags -Dmain=app_main)
|
|
|
|
idf_build_set_property(COMPILE_OPTIONS "${cflags}" APPEND)
|
|
|
|
set(elf_app "${CMAKE_PROJECT_NAME}.app.elf")
|
|
|
|
# Remove more unused sections
|
|
string(REPLACE "-elf-gcc" "-elf-strip" ${CMAKE_STRIP} ${CMAKE_C_COMPILER})
|
|
set(strip_flags --strip-unneeded
|
|
--remove-section=.comment
|
|
--remove-section=.got.loc
|
|
--remove-section=.dynamic)
|
|
|
|
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
|
|
list(APPEND strip_flags --remove-section=.xt.lit
|
|
--remove-section=.xt.prop
|
|
--remove-section=.xtensa.info)
|
|
elseif(CONFIG_IDF_TARGET_ARCH_RISCV)
|
|
list(APPEND strip_flags --remove-section=.riscv.attributes)
|
|
endif()
|
|
|
|
# Link input list of libraries to ELF
|
|
list(PREPEND ELF_COMPONENTS "main")
|
|
if(ELF_COMPONENTS)
|
|
foreach(c ${ELF_COMPONENTS})
|
|
list(APPEND elf_libs "esp-idf/${c}/lib${c}.a")
|
|
list(APPEND elf_dependeces "idf::${c}")
|
|
endforeach()
|
|
endif()
|
|
if (ELF_LIBS)
|
|
list(APPEND elf_libs "${ELF_LIBS}")
|
|
endif()
|
|
spaces2list(elf_libs)
|
|
|
|
add_custom_command(OUTPUT elf_app
|
|
COMMAND ${CMAKE_C_COMPILER} ${cflags} ${elf_libs} -o ${elf_app}
|
|
COMMAND ${CMAKE_STRIP} ${strip_flags} ${elf_app}
|
|
DEPENDS ${elf_dependeces}
|
|
COMMENT "Build ELF: ${elf_app}"
|
|
)
|
|
add_custom_target(elf ALL DEPENDS elf_app)
|
|
endmacro()
|