First commit. Temp from Mo10
This commit is contained in:
108
cmake/toolchain.cmake
Normal file
108
cmake/toolchain.cmake
Normal file
@@ -0,0 +1,108 @@
|
||||
|
||||
if(NOT TOOLCHAIN_PATH)
|
||||
if(DEFINED ENV{TOOLCHAIN_PATH})
|
||||
message(STATUS "Detected toolchain path TOOLCHAIN_PATH in environmental variables: " $ENV{TOOLCHAIN_PATH})
|
||||
set(TOOLCHAIN_PATH $ENV{TOOLCHAIN_PATH})
|
||||
else()
|
||||
if(NOT CMAKE_C_COMPILER)
|
||||
set(TOOLCHAIN_PATH "/usr")
|
||||
message(STATUS "No TOOLCHAIN_PATH specified, using default: " ${TOOLCHAIN_PATH})
|
||||
else()
|
||||
# keep only directory of compiler
|
||||
get_filename_component(TOOLCHAIN_PATH ${CMAKE_C_COMPILER} DIRECTORY)
|
||||
# remove the last /bin directory
|
||||
get_filename_component(TOOLCHAIN_PATH ${TOOLCHAIN_PATH} DIRECTORY)
|
||||
endif()
|
||||
endif()
|
||||
file(TO_CMAKE_PATH "${TOOLCHAIN_PATH}" TOOLCHAIN_PATH)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET_TRIPLET)
|
||||
set(TARGET_TRIPLET "arm-none-eabi")
|
||||
message(STATUS "No TARGET_TRIPLET specified, using default: " ${TARGET_TRIPLET})
|
||||
endif()
|
||||
|
||||
set(CMAKE_SYSTEM_NAME Generic)
|
||||
|
||||
set(TOOLCHAIN_SYSROOT "${TOOLCHAIN_PATH}/${TARGET_TRIPLET}")
|
||||
set(TOOLCHAIN_BIN_PATH "${TOOLCHAIN_PATH}/bin")
|
||||
set(TOOLCHAIN_INC_PATH "${TOOLCHAIN_PATH}/${TARGET_TRIPLET}/include")
|
||||
set(TOOLCHAIN_LIB_PATH "${TOOLCHAIN_PATH}/${TARGET_TRIPLET}/lib")
|
||||
|
||||
find_program(CMAKE_OBJCOPY NAMES ${TARGET_TRIPLET}-objcopy HINTS ${TOOLCHAIN_BIN_PATH})
|
||||
find_program(CMAKE_OBJDUMP NAMES ${TARGET_TRIPLET}-objdump HINTS ${TOOLCHAIN_BIN_PATH})
|
||||
find_program(CMAKE_SIZE NAMES ${TARGET_TRIPLET}-size HINTS ${TOOLCHAIN_BIN_PATH})
|
||||
|
||||
function(print_size_of_target TARGET)
|
||||
add_custom_target(${TARGET}_always_display_size
|
||||
ALL COMMAND ${CMAKE_SIZE} "$<TARGET_FILE:${TARGET}>"
|
||||
COMMENT "Target Sizes: "
|
||||
DEPENDS ${TARGET}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(_generate_file TARGET OUTPUT_EXTENSION OBJCOPY_BFD_OUTPUT)
|
||||
get_target_property(TARGET_OUTPUT_NAME ${TARGET} OUTPUT_NAME)
|
||||
if (TARGET_OUTPUT_NAME)
|
||||
set(OUTPUT_FILE_NAME "${TARGET_OUTPUT_NAME}.${OUTPUT_EXTENSION}")
|
||||
else()
|
||||
set(OUTPUT_FILE_NAME "${TARGET}.${OUTPUT_EXTENSION}")
|
||||
endif()
|
||||
|
||||
get_target_property(RUNTIME_OUTPUT_DIRECTORY ${TARGET} RUNTIME_OUTPUT_DIRECTORY)
|
||||
if(RUNTIME_OUTPUT_DIRECTORY)
|
||||
set(OUTPUT_FILE_PATH "${RUNTIME_OUTPUT_DIRECTORY}/${OUTPUT_FILE_NAME}")
|
||||
else()
|
||||
set(OUTPUT_FILE_PATH "${OUTPUT_FILE_NAME}")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
TARGET ${TARGET}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_OBJCOPY} -O ${OBJCOPY_BFD_OUTPUT} "$<TARGET_FILE:${TARGET}>" ${OUTPUT_FILE_PATH}
|
||||
BYPRODUCTS ${OUTPUT_FILE_PATH}
|
||||
COMMENT "Generating ${OBJCOPY_BFD_OUTPUT} file ${OUTPUT_FILE_NAME}"
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(generate_binary_file TARGET)
|
||||
_generate_file(${TARGET} "bin" "binary")
|
||||
endfunction()
|
||||
|
||||
function(generate_hex_file TARGET)
|
||||
_generate_file(${TARGET} "hex" "ihex")
|
||||
endfunction()
|
||||
|
||||
set(CMAKE_EXECUTABLE_SUFFIX_C .elf)
|
||||
set(CMAKE_EXECUTABLE_SUFFIX_CXX .elf)
|
||||
set(CMAKE_EXECUTABLE_SUFFIX_ASM .elf)
|
||||
|
||||
# This should be safe to set for a bare-metal cross-compiler
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
|
||||
|
||||
# Extra CFlags
|
||||
set(TARGET_CFLAGS_EXTRA "-Wall -fdata-sections -ffunction-sections -fno-common -fmessage-length=0")
|
||||
set(TARGET_CXXFLAGS_EXTRA "-Wall -fdata-sections -ffunction-sections -fno-common -fmessage-length=0")
|
||||
set(TARGET_LDFLAGS_EXTRA "-Wl,--print-memory-usage")
|
||||
|
||||
# Device specific settings, goes to CFLAGS and LDFLAGS
|
||||
set(TARGET_CFLAGS_HARDWARE "-mcpu=cortex-m23 -mfloat-abi=soft -mthumb -mthumb-interwork")
|
||||
|
||||
# Conditional flags
|
||||
# DEBUG
|
||||
set(CMAKE_C_FLAGS_DEBUG "-DDEBUG=0 -O0 -g")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG=0 -O0 -g")
|
||||
set(CMAKE_ASM_FLAGS_DEBUG "-DDEBUG=0 -O0 -g")
|
||||
|
||||
# RELEASE
|
||||
set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O3") # -flto
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3") # -flto
|
||||
set(CMAKE_ASM_FLAGS_RELEASE "-DNDEBUG -O3") # -flto
|
||||
#set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-flto")
|
||||
|
||||
# Final compiler flags
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_CFLAGS_HARDWARE} ${TARGET_CFLAGS_EXTRA}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TARGET_CFLAGS_HARDWARE} ${TARGET_CXXFLAGS_EXTRA}")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${CMAKE_C_FLAGS} -x assembler-with-cpp")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-specs=nosys.specs -Wl,--gc-sections ${TARGET_LDFLAGS_EXTRA}")
|
Reference in New Issue
Block a user