# Part of the Raspberry-Pi Bare Metal Tutorials # Copyright (c) 2013-2015, Brian Sidebotham # All rights reserved. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # A CMake toolchain file so we can cross-compile for the Rapsberry-Pi bare-metal include(CMakeForceCompiler) # usage # cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-arm-none-eabi.cmake ../ # The Generic system name is used for embedded targets (targets without OS) in # CMake set( CMAKE_SYSTEM_NAME Generic ) set( CMAKE_SYSTEM_PROCESSOR BCM2835 ) # Set a toolchain path. You only need to set this if the toolchain isn't in # your system path. Don't forget a trailing path separator! set( TC_PATH "" ) # The toolchain prefix for all toolchain executables set( CROSS_COMPILE arm-none-eabi- ) # specify the cross compiler. We force the compiler so that CMake doesn't # attempt to build a simple test program as this will fail without us using # the -nostartfiles option on the command line CMAKE_FORCE_C_COMPILER( ${TC_PATH}${CROSS_COMPILE}gcc GNU ) # We must set the OBJCOPY setting into cache so that it's available to the # whole project. Otherwise, this does not get set into the CACHE and therefore # the build doesn't know what the OBJCOPY filepath is set( CMAKE_OBJCOPY ${TC_PATH}${CROSS_COMPILE}objcopy CACHE FILEPATH "The toolchain objcopy command " FORCE ) # Set the CMAKE C flags (which should also be used by the assembler! set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfp" ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfloat-abi=hard" ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv6zk" ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mtune=arm1176jzf-s" ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" ) set( CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" )