CMAKE for ARM Issues

#ARM GCC

# Target is an embedded system
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR ARM)
set(TOOLCHAIN_PREFIX arm-none-eabi-)

if(MINGW OR CYGWIN OR WIN32)
set(UTIL_SEARCH_CMD where)
elseif(UNIX OR APPLE)
set(UTIL_SEARCH_CMD which)
endif()

execute_process(
COMMAND ${UTIL_SEARCH_CMD} ${TOOLCHAIN_PREFIX}gcc
OUTPUT_VARIABLE BINUTILS_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc)
set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++)
#set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy)
set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size)

here, I did not set the CMAKE_OBJCOPY because the objcpy can be empty in the first time run, but it work in the second time build.
The " set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size) " has to define here, otherwise the size command is not set.
I don't know why.

 

#sub folder as library

Normally, the sub folder will be defined as library. At the same time, the lib also requres other libs from other folder. The CMakeLists.txt shall call target_link_libraries to work together with other libs.

example, the LwIPApp folder, it needs to call other libs.

# The minimun CMAKE version
cmake_minimum_required(VERSION 3.10.2)

#define the library name
set(LIB_NAME LwIPApp)

# add the source code to compile
aux_source_directory(App APP_DIR_LIB_SRCS)
aux_source_directory(Target APP_DIR_LIB_SRCS)

add_library(${LIB_NAME} STATIC ${APP_DIR_LIB_SRCS} ${APP_DIR_LIB_SRCS})


# include directory
include_directories(
${MainHeader}
${STM32HALHeader}
${CMSISDeviceHeader}
${CMSISCoreHeader}
${LWIPLibHeader}
${LWIPAppTargetHeader}
${LWIPLibSystemHeader}
${FreeRTOSCMSISRTOSV2Header}
${FreeRTOSHeader}
${FreeRTOSCM3Header}
)

target_compile_options(${LIB_NAME}
PRIVATE
$<$<AND:$<BOOL:$<COMPILE_LANGUAGE:C>>,$<BOOL:$<CONFIG:DEBUG>>>:${C_FLAGS_DEBUG}>
$<$<AND:$<BOOL:$<COMPILE_LANGUAGE:CXX>>,$<BOOL:$<CONFIG:DEBUG>>>:${CXX_FLAGS_DEBUG}>
$<$<AND:$<BOOL:$<COMPILE_LANGUAGE:C>>,$<BOOL:$<CONFIG:RELEASE>>>:${C_FLAGS_RELEASE}>
$<$<AND:$<BOOL:$<COMPILE_LANGUAGE:CXX>>,$<BOOL:$<CONFIG:RELEASE>>>:${CXX_FLAGS_RELEASE}>
$<$<CONFIG:DEBUG>:${MAIN_DEBUG_OPTIMIZATION_LEVEL}>
)

target_link_libraries(${LIB_NAME}
PRIVATE
Middlewares
Drivers
)

 

posted on 2020-09-03 16:06  荷树栋  阅读(438)  评论(0)    收藏  举报

导航