From c09d293d2b34d15e8bf609466d55555c74587845 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Fri, 1 Jul 2016 22:57:09 +0200 Subject: o Adding elfinfo tool from the stm32 playground. --- cmake/intel-quark-d2000.toolchain.cmake | 79 +++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 18 deletions(-) (limited to 'cmake/intel-quark-d2000.toolchain.cmake') diff --git a/cmake/intel-quark-d2000.toolchain.cmake b/cmake/intel-quark-d2000.toolchain.cmake index 3e15792..16f12f5 100644 --- a/cmake/intel-quark-d2000.toolchain.cmake +++ b/cmake/intel-quark-d2000.toolchain.cmake @@ -1,6 +1,6 @@ if (${INTEL_QUARK_TOOLCHAIN_LOADED}) - return() -endif() + return() +endif () set(INTEL_QUARK_TOOLCHAIN_LOADED TRUE) include(CMakeForceCompiler) @@ -10,12 +10,14 @@ set(TRIPLE "i586-intel-elfiamcu") if (NOT IS_DIRECTORY "${ISSM_DIR}") message(FATAL_ERROR "ISSM_DIR has to be set to a directory:" ${ISSM_DIR}) set(ISSM_DIR CACHE PATH "The path to Intes ISSM") -endif() +endif () if (NOT INTEL_QUARK_CHIP) set(INTEL_QUARK_CHIP CACHE STRING "The Intel Quark chip to build for") message(FATAL_ERROR "INTEL_QUARK_CHIP has to be set before including the toolchain file") -endif() +endif () + +get_filename_component(toolchain_dir "${CMAKE_TOOLCHAIN_FILE}" DIRECTORY) set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_PROCESSOR intel) @@ -26,22 +28,22 @@ set(BASE_FLAGS "-std=c90 -Wall -Wextra -Werror -Wno-unused-parameter") set(INCLUDES "") -if(IS_DIRECTORY "${QMSI_DIR}") +if (IS_DIRECTORY "${QMSI_DIR}") message("Using QMSI_DIR: ${QMSI_DIR}") -else() +else () message("Detecting QMSI_DIR..") find_path(QMSI_DIR qm_common.h - HINTS "${ISSM_DIR}/firmware/bsp/1.0/include" - NO_DEFAULT_PATH) + HINTS "${ISSM_DIR}/firmware/bsp/1.0/include" + NO_DEFAULT_PATH) - if(IS_DIRECTORY "${QMSI_DIR}") + if (IS_DIRECTORY "${QMSI_DIR}") message("Found QMSI_DIR: ${QMSI_DIR}") - else() + else () message(FATAL_ERROR "Could not find QMSI directory") - endif() + endif () -endif() +endif () # TODO: these directories should be validated list(APPEND includes "${ISSM_DIR}/firmware/bsp/1.0/include") @@ -52,9 +54,12 @@ list(APPEND includes "${ISSM_DIR}/firmware/bsp/1.0/drivers/bmc150") if (INTEL_QUARK_CHIP STREQUAL D2000) list(APPEND includes "${ISSM_DIR}/firmware/bsp/1.0/soc/quark_d2000/include") set(ld_file "${ISSM_DIR}/firmware/bsp/1.0/soc/quark_d2000/quark_d2000.ld") + + list(APPEND mcu_text_areas 0x00180000:20k) + list(APPEND mcu_data_areas 0x00280000:5k) elseif (INTEL_QUARK_CHIP STREQUAL SE) list(APPEND includes "${ISSM_DIR}/firmware/bsp/1.0/soc/quark_se/include") -endif() +endif () # QMSI Library file(GLOB_RECURSE qmsi_sources ${ISSM_DIR}/firmware/bsp/1.0/drivers/*.c) @@ -129,7 +134,7 @@ set(CMAKE_C_FLAGS "${BASE_FLAGS} ${TARGET_FLAGS} " CACHE STRING "c flags") set(CMAKE_CXX_FLAGS "${BASE_FLAGS} ${TARGET_FLAGS} -fno-exceptions -fno-rtti -felide-constructors -std=c++14" CACHE STRING "c++ flags") # ${CMAKE_C_FLAGS} is prepended to this string -set(LD_FILE ) +set(LD_FILE) set(linker_flags "") set(linker_flags "${linker_flags} -nostdlib") set(linker_flags "${linker_flags} -Xlinker -A") @@ -143,9 +148,9 @@ set(CMAKE_EXE_LINKER_FLAGS "${linker_flags}" CACHE STRING "linker flags" FORCE) set(GCC "${ISSM_DIR}/tools/compiler/bin/${TRIPLE}-gcc") -if(NOT EXISTS "${GCC}") +if (NOT EXISTS "${GCC}") message(FATAL_ERROR "Could not find ${TRIPLE}-gcc. Is $ISSM_DIR set correctly?") -endif() +endif () # No C++ support for D2000 # set(GXX "${ISSM_DIR}/tools/compiler/bin/${TRIPLE}-g++") @@ -156,13 +161,14 @@ endif() cmake_force_c_compiler("${GCC}" GNU) -# search for programs in the build host directories +# search for programs in the build elfinfo directories set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) function(toolchain_target TARGET) + add_dependencies("${TARGET}" elfinfo) target_link_libraries("${TARGET}" intel_sys) target_link_libraries("${TARGET}" qmsi) target_link_libraries("${TARGET}" ipp) @@ -170,7 +176,44 @@ function(toolchain_target TARGET) target_link_libraries("${TARGET}" softfp) target_link_libraries("${TARGET}" c) target_link_libraries("${TARGET}" g) -# target_link_libraries("${TARGET}" gcc) + # target_link_libraries("${TARGET}" gcc) target_compile_definitions("${TARGET}" PUBLIC -D__IPP_ENABLED__) target_link_libraries("${TARGET}" "-Xlinker" "-T${ld_file}") endfunction() + +# elfinfo tools + +get_filename_component(ELFINFO_SOURCE_DIR "${toolchain_dir}/elfinfo" ABSOLUTE) +get_filename_component(ELFINFO_INSTALL_DIR "${CMAKE_BINARY_DIR}/elfinfo" ABSOLUTE) + +include(ExternalProject) +ExternalProject_Add(elfinfo + SOURCE_DIR "${ELFINFO_SOURCE_DIR}" + DOWNLOAD_COMMAND "" + UPDATE_COMMAND "" + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${ELFINFO_INSTALL_DIR}) + +function(add_extra_commands target_name) + # add_custom_command(TARGET ${target_name} POST_BUILD + # COMMAND mkdir -p ${target_name}-info && arm-none-eabi-objdump -D ${target_name} > ${target_name}-info/${target_name}.asm) + # add_custom_command(TARGET ${target_name} POST_BUILD + # COMMAND mkdir -p ${target_name}-info && arm-none-eabi-nm -C ${target_name} > ${target_name}-info/${target_name}.nm) + # add_custom_command(TARGET ${target_name} POST_BUILD + # COMMAND mkdir -p ${target_name}-info && arm-none-eabi-size ${target_name} > ${target_name}-info/${target_name}.size) + # add_custom_command(TARGET ${target_name} POST_BUILD + # COMMAND mkdir -p ${target_name}-info && arm-none-eabi-readelf -a ${target_name} > ${target_name}-info/${target_name}.readelf) + # add_custom_command(TARGET ${target_name} POST_BUILD + # COMMAND mkdir -p ${target_name}-info && arm-none-eabi-objcopy -O ihex ${target_name} ${target_name}-info/${target_name}.hex) + # add_custom_command(TARGET ${target_name} POST_BUILD + # COMMAND mkdir -p ${target_name}-info && arm-none-eabi-objcopy -O binary ${target_name} ${target_name}-info/${target_name}.bin) + + foreach(area ${mcu_text_areas}) + set(text_segments "${text_segments}" "-t" "${area}") + endforeach() + foreach(area ${mcu_data_areas}) + set(data_segments "${data_segments}" "-d" "${area}") + endforeach() + + add_custom_command(TARGET ${target_name} DEPENDS elfinfo POST_BUILD + COMMAND "${ELFINFO_INSTALL_DIR}/bin/elfinfo" -f ${target_name} ${text_segments} ${data_segments}) +endfunction() -- cgit v1.2.3