aboutsummaryrefslogtreecommitdiff
path: root/intel-quark-d2000.cmake
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2016-09-04 22:12:32 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2016-09-04 22:12:32 +0200
commitd807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b (patch)
tree6e913d0effc92483b0f4110b7003e81aea425bad /intel-quark-d2000.cmake
downloadmcu.cmake-d807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b.tar.gz
mcu.cmake-d807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b.tar.bz2
mcu.cmake-d807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b.tar.xz
mcu.cmake-d807f0ab00ec7b833c8688f0b08b7ecdf9b8d52b.zip
o Initial import of mcu.cmake containing old Intel Quark D2000 cmake code and new NRF51 code.
The Intel code is not useful and the NRF code needs to be updated to support NRF52 chips.
Diffstat (limited to 'intel-quark-d2000.cmake')
-rw-r--r--intel-quark-d2000.cmake207
1 files changed, 207 insertions, 0 deletions
diff --git a/intel-quark-d2000.cmake b/intel-quark-d2000.cmake
new file mode 100644
index 0000000..03925a7
--- /dev/null
+++ b/intel-quark-d2000.cmake
@@ -0,0 +1,207 @@
+if (${INTEL_QUARK_TOOLCHAIN_LOADED})
+ return()
+endif ()
+set(INTEL_QUARK_TOOLCHAIN_LOADED TRUE)
+
+include(CMakeForceCompiler)
+
+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 ()
+
+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 ()
+
+get_filename_component(toolchain_dir "${CMAKE_TOOLCHAIN_FILE}" DIRECTORY)
+
+macro(export_variable NAME)
+ set(${NAME} "${${NAME}}" PARENT_SCOPE)
+endmacro()
+
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_SYSTEM_PROCESSOR intel)
+set(CMAKE_CROSSCOMPILING 1)
+
+set(TARGET_FLAGS "-march=lakemont -mtune=lakemont -miamcu -msoft-float")
+set(BASE_FLAGS "-std=c90 -Wall -Wextra -Werror -Wno-unused-parameter")
+
+set(INCLUDES "")
+
+# TODO: these directories should be validated
+#list(APPEND includes "${ISSM_DIR}/firmware/bsp/1.0/include")
+#list(APPEND includes "${ISSM_DIR}/firmware/bsp/1.0/board/drivers")
+
+if (INTEL_QUARK_CHIP STREQUAL D2000)
+ include("${toolchain_dir}/intel/d2000.cmake")
+ d2000_init()
+
+ include("${toolchain_dir}/intel/openocd.cmake")
+ openocd_init()
+
+ include("${toolchain_dir}/intel/gdb.cmake")
+ gdb_init()
+
+ include("${toolchain_dir}/intel/qmsi.cmake")
+ qmsi_init()
+elseif (INTEL_QUARK_CHIP STREQUAL SE)
+# list(APPEND includes "${ISSM_DIR}/firmware/bsp/1.0/soc/quark_se/include")
+endif ()
+
+# IPP Library
+#file(GLOB_RECURSE ipp_sources ${ISSM_DIR}/firmware/lib/ipp/1.0.0/*.c)
+add_library(ipp STATIC IMPORTED)
+set_property(TARGET ipp PROPERTY IMPORTED_LOCATION "${ISSM_DIR}/firmware/lib/ipp/1.0.0/lib/libippsq.a")
+#target_include_directories(ipp PUBLIC "${ISSM_DIR}/firmware/lib/ipp/1.0.0/include")
+set_property(TARGET ipp APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${ISSM_DIR}/firmware/lib/ipp/1.0.0/include")
+#target_compile_definitions(ipp PUBLIC -D__IPP_ENABLED__)
+#target_compile_options(ipp PUBLIC -Wno-empty-body)
+#target_link_libraries(ipp INTERFACE qmsi)
+
+# Compilation
+# -O0
+# -g
+# -DDEBUG
+# -fmessage-length=0
+# -I../include
+# -fno-asynchronous-unwind-tables
+# -I../drivers
+# -I../drivers/include
+#
+# -DSPI_IRQ_MST
+# -I../soc/quark_d2000/include
+# -c
+# -o ../drivers/debug/quark_d2000/obj/qm_i2c.o
+# ../drivers/qm_i2c.c
+
+# Linking
+# i586-intel-elfiamcu-gcc
+# -nostdlib
+# -L./bsp/build/debug/quark_d2000/libqmsi/lib
+# -Xlinker -T./bsp/soc/quark_d2000/quark_d2000.ld
+# -Xlinker -A
+# -Xlinker --oformat
+# -Xlinker -Map=./debug/quark_d2000/obj/accel_test.map
+# -o ./debug/quark_d2000/obj/accel_test.elf
+# ./debug/quark_d2000/obj/main.o
+# ./bsp/sys/debug/quark_d2000/obj/app_entry.o
+# ./bsp/sys/debug/quark_d2000/obj/newlib-syscalls.o
+# ./bsp/board/drivers/debug/quark_d2000/obj/bmc150.o
+# -L/home/trygvis/intel/issm_2016.0.019/firmware/lib/ipp/1.0.0/lib
+# -lippsq
+# -lc
+# -lnosys
+# -lsoftfp
+# -lgcc
+# -lqmsi
+
+set(o_level "$<TARGET_PROPERTY:O_LEVEL>")
+add_compile_options("$<$<BOOL:${o_level}>:-O${o_level}>$<$<NOT:$<BOOL:${o_level}>>:-O3>")
+unset(o_level)
+
+#include_directories("${includes}")
+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(linker_flags "")
+set(linker_flags "${linker_flags} -nostdlib")
+set(linker_flags "${linker_flags} -Xlinker -A")
+set(linker_flags "${linker_flags} -Xlinker --oformat")
+
+#set(LINKER_LIBS "-larm_cortexM4l_math -lm")
+
+# http://stackoverflow.com/questions/16588097/cmake-separate-linker-and-compiler-flags
+set(CMAKE_EXE_LINKER_FLAGS "${linker_flags}" CACHE STRING "linker flags" FORCE)
+#unset(linker_flags)
+
+set(GCC "${ISSM_DIR}/tools/compiler/bin/${TRIPLE}-gcc")
+#set(GCC "/usr/bin/clang++-3.9")
+
+if (NOT EXISTS "${GCC}")
+ message(FATAL_ERROR "Could not find ${TRIPLE}-gcc. Is $ISSM_DIR set correctly?")
+endif ()
+
+# No C++ support for D2000
+# set(GXX "${ISSM_DIR}/tools/compiler/bin/${TRIPLE}-g++")
+# if(NOT EXISTS "${GXX}")
+# message(FATAL_ERROR "Could not find ${TRIPLE}-g++. Is $ISSM_DIR set correctly?")
+# endif()
+# cmake_force_cxx_compiler("${GXX}" GNU)
+
+cmake_force_c_compiler("${GCC}" GNU)
+#cmake_force_c_compiler("${GCC}" LLVM)
+
+# 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}" PUBLIC ipp)
+ target_link_libraries("${TARGET}" PUBLIC softfp)
+ target_link_libraries("${TARGET}" PUBLIC c)
+ target_link_libraries("${TARGET}" PUBLIC g)
+ target_compile_definitions("${TARGET}" PUBLIC -D__IPP_ENABLED__)
+ target_link_libraries("${TARGET}" PUBLIC "-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})
+
+ add_custom_target(${target_name}-openocd
+ DEPENDS ${target_name}
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
+ COMMAND ${openocd_bin} -s ${openocd_scripts} -f board/quark_d2000_onboard.cfg)
+
+ add_custom_target(${target_name}-gdb
+ DEPENDS ${target_name}
+ COMMAND ${gdb_bin}
+ -ex "target remote localhost:3333"
+ -ex "monitor gdb_breakpoint_override hard"
+ -ex "set remotetimeout 30"
+ -ex "monitor clk32M"
+ -ex "monitor reset halt"
+ ${target_name}
+ )
+endfunction()