#------------------------------------------------------------------------------- # Copyright (c) 2012 Freescale Semiconductor, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # o Redistributions of source code must retain the above copyright notice, this list # of conditions and the following disclaimer. # # o 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. # # o Neither the name of Freescale Semiconductor, Inc. nor the names of its # contributors may be used to endorse or promote products derived from this # software without specific prior written permission. # # 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. #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Root paths #------------------------------------------------------------------------------- # At this point, the path to this makefile was just appended to MAKEFILE_LIST. We make # use of this to get the root directory of the SDK. This variable is exported to child # instances of make. this_makefile := $(firstword $(MAKEFILE_LIST)) export SDK_ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))../) # The rest of the paths are defined in a separate makefile for easy access. include $(SDK_ROOT)/mk/paths.mk #------------------------------------------------------------------------------- # Utility #------------------------------------------------------------------------------- # Kludge to create a variable equal to a single space. empty := space := $(empty) $(empty) #------------------------------------------------------------------------------- # OS #------------------------------------------------------------------------------- # Get the OS name. Known values are "Linux", "CYGWIN_NT-5.1", and "Darwin". os_name := $(shell uname -s) # Set to 1 if running on cygwin. is_cygwin := $(and $(findstring CYGWIN,$(os_name)),1) # Set to 1 if running on redhat. is_redhat := $(shell if [ -f /etc/redhat-release ]; then echo 1 ; fi) # Disable parallel builds for cygwin since they hang. ifeq "$(is_cygwin)" "1" .NOTPARALLEL: endif #------------------------------------------------------------------------------- # Logging options #------------------------------------------------------------------------------- # Enable color output by default. BUILD_SDK_COLOR ?= 1 # Normally, commands in recipes are prefixed with '@' so the command itself # is not echoed by make. But if VERBOSE is defined (set to anything non-empty), # then the '@' is removed from recipes. The 'at' variable is used to control # this. Similarly, 'silent_make' is used to pass the -s option to child make # invocations when not in VERBOSE mode. ifeq "$(VERBOSE)" "1" at := silent_make := else at := @ silent_make := -s endif # These colors must be printed with the printf command. echo won't handle the # escape sequences. color_default = \033[00m color_bold = \033[01m color_red = \033[31m color_green = \033[32m color_yellow = \033[33m color_blue = \033[34m color_magenta = \033[35m color_cyan = \033[36m color_orange = \033[38;5;172m color_light_blue = \033[38;5;039m color_gray = \033[38;5;008m color_purple = \033[38;5;097m ifeq "$(BUILD_SDK_COLOR)" "1" color_build := $(color_light_blue) color_c := $(color_green) color_cxx := $(color_green) color_cpp := $(color_orange) color_asm := $(color_magenta) color_ar := $(color_yellow) color_link := $(color_purple) endif # Used in printmessage if the color args are not present. color_ := # Use in recipes to print color messages if printing to a terminal. If # BUILD_SDK_COLOR is not set to 1, this reverts to a simple uncolorized printf. # A newline is added to the end of the printed message. # # Arguments: # 1 - name of the color variable (see above), minus the "color_" prefix # 2 - first colorized part of the message # 3 - first uncolorized part of the message # 4 - color name for second colorized message # 5 - second colorized message # 6 - second uncolorized part of the message # 7 - uncolorized prefix on the whole line; this is last because it is expected to be used rarely # # All arguments are optional. # # Use like: # $(call printmessage,cyan,Building, remainder of the message...) ifeq "$(BUILD_SDK_COLOR)" "1" define printmessage if [ -t 1 ]; then printf "$(7)$(color_$(1))$(2)$(color_default)$(3)$(color_$(4))$(5)$(color_default)$(6)\n" ; \ else printf "$(7)$(2)$(3)$(5)$(6)\n" ; fi endef else define printmessage printf "$(7)$(2)$(3)$(5)$(6)\n" ; fi endef endif #------------------------------------------------------------------------------- # Compiler and tools #------------------------------------------------------------------------------- # For all the paths built below, we assume that the Mentor CodeSourcery release of gcc is # being used. Other distributions of gcc may work, but have not been tested. # Set compiler version defaults. CROSS_COMPILE = arm-none-eabi- # Strip off the trailing '-', resulting in arm-none-eabi CROSS_COMPILE_STRIP := $(CROSS_COMPILE:%-=%) # Build tool names. CC = $(CROSS_COMPILE)gcc CXX = $(CROSS_COMPILE)g++ LD = $(CROSS_COMPILE)ld AS = $(CROSS_COMPILE)as AR = $(CROSS_COMPILE)ar OBJCOPY = $(CROSS_COMPILE)objcopy # Ask the compiler for its version CC_VERSION := $(shell $(CC) -dumpversion) # Get the compiler directory. We have to go through this sillyness in order to support # paths with spaces in their names, such as under Cygwin where the CodeSourcery compiler # is normally installed under C:\Program Files\. CC_PREFIX := $(shell dirname "`which $(CC)`")/.. # Standard library include paths. LIBGCC_LDPATH = $(CC_PREFIX)/lib/gcc/$(CROSS_COMPILE_STRIP)/$(CC_VERSION)/$(CC_LIB_POST) LIBC_LDPATH = $(CC_PREFIX)/$(CROSS_COMPILE_STRIP)/lib/$(CC_LIB_POST) # System header file include paths. CC_INCLUDE = $(CC_PREFIX)/lib/gcc/$(CROSS_COMPILE_STRIP)/$(CC_VERSION)/include CC_INCLUDE_FIXED = $(CC_PREFIX)/lib/gcc/$(CROSS_COMPILE_STRIP)/$(CC_VERSION)/include-fixed LIBC_INCLUDE = $(CC_PREFIX)/$(CROSS_COMPILE_STRIP)/include #------------------------------------------------------------------------------- # Target and board configuration #------------------------------------------------------------------------------- include $(SDK_ROOT)/mk/config.mk #------------------------------------------------------------------------------- # Compiler flags #------------------------------------------------------------------------------- include $(SDK_ROOT)/mk/flags.mk