rt-thread-official/bsp/imx6sx/iMX6_Platform_SDK/Makefile

168 lines
4.7 KiB
Makefile

#-------------------------------------------------------------------------------
# Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved.
#
# THIS SOFTWARE IS PROVIDED BY FREESCALE "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 FREESCALE 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.
#-------------------------------------------------------------------------------
#
# Top-level Makefile.
#
# This file is responsible for building all libraries and applications.
#
# Targets:
# - all
# - sdk
# - board
# - sdk_unit_test
# - power_modes_test
# - obds
# - gpu_demo
# - smp_primes
# - stream
# - usb_hid_mouse
# - httpd
# - ping
# - clean
# - clean_sdk
# - clean_board
# - clean_sdk_unit_test
# - clean_power_modes_test
# - clean_obds
# - clean_gpu_demo
# - clean_smp_primes
# - clean_stream
# - clean_usb_hid_mouse
# - clean_httpd
# - clean_ping
#
# The clean targets work with any combination of configuration variables. For
# example, clean_sdk with TARGET set will clean libsdk for only that TARGET, while
# clean_sdk without TARGET set will clean libsdk in all targets.
#
include mk/common.mk
# Turn off parallel jobs for this makefile only. Child makefiles will still use the
# specified number of jobs. This isn't strictly necessary, and actually slows the build
# a little bit, but greatly improves the readability of the log output.
.NOTPARALLEL:
# Determine if the target is either the MX6DQ or MX6SDL.
ifeq "$(TARGET)" "mx6dq"
is_dq_or_sdl = 1
else ifeq "$(TARGET)" "mx6sdl"
is_dq_or_sdl = 1
endif
# Library subdirectories that the apps depend upon. Handled automatically by targets.mk.
SUBDIRS = \
sdk \
lwip \
$(BOARD_ROOT)
# List of all applications to build. Applications must reside in the apps directory.
ALL_APPS = \
filesystem \
httpd \
obds \
ping \
power_modes_test \
sdk_unit_test \
stream \
usb_hid_mouse
# Apps that are only built for MX6DQ and MX6SDL.
ifdef is_dq_or_sdl
ALL_APPS += \
caam_blob_gen \
gpu_demo \
smp_primes
endif
# Default target.
.PHONY: all
all: $(sort $(ALL_APPS)) ;
# App targets. All apps depend on the listed subdirectories.
.PHONY: ALL_APPS
$(ALL_APPS): $(SUBDIRS)
@$(call printmessage,build,Building, $@ ,gray,[$(TARGET) $(BOARD) $(BOARD_REVISION)],,\n)
@$(MAKE) $(silent_make) -r -C apps/$@
# Print message before recursive into subdirs.
$(SUBDIRS)::
@$(call printmessage,build,Building, $(@F) ,gray,[$(TARGET) $(BOARD) $(BOARD_REVISION)],,\n)
# Target with a simple name for building the board package.
.PHONY: board
board: $(BOARD_ROOT)
# Target to clean everything.
.PHONY: clean
clean:
@echo "Deleting output directory..."
@rm -rf output
@echo "done."
# Target to clean just the sdk library and objects.
.PHONY: clean_sdk
clean_sdk:
ifdef TARGET
rm -rf $(LIBSDK) $(OUTPUT_ROOT)/lib/obj/sdk
else
rm -rf $(SDK_ROOT)/output/*/lib/libsdk.a $(SDK_ROOT)/output/*/lib/obj/sdk
endif
# Target to clean the board library and objects.
.PHONY: clean_board
clean_board:
ifdef TARGET
ifdef BOARD
rm -rf $(LIBBOARD) $(OUTPUT_ROOT)/lib/obj/board_$(BOARD_WITH_REV)
else
rm -rf $(OUTPUT_ROOT)/lib/libboard* $(OUTPUT_ROOT)/lib/obj/board_*
endif
else
rm -rf $(SDK_ROOT)/output/*/lib/libboard* $(SDK_ROOT)/output/*/lib/obj/board_*
endif
# Set up targets to clean each of the applications. For an app "foo", the target to clean
# just that app is "clean_foo". If no TARGET is passed to make, the app is cleaned
# for all targets.
ALL_APP_CLEAN_TARGETS := $(addprefix clean_,$(ALL_APPS))
.PHONY: $(ALL_APP_CLEAN_TARGETS)
$(ALL_APP_CLEAN_TARGETS):
ifdef TARGET
ifdef BOARD
ifdef BOARD_REVISION
ifdef BOARD_REVISION_IS_DEFAULT
# Clean all revs of the board.
rm -rf $(OUTPUT_ROOT)/$(patsubst clean_%,%,$@)/$(BOARD)_rev_*
else
# Specific rev specified so clean just that one rev.
rm -rf $(OUTPUT_ROOT)/$(patsubst clean_%,%,$@)/$(BOARD_WITH_REV)
endif
else
# Clean all revs of the board.
rm -rf $(OUTPUT_ROOT)/$(patsubst clean_%,%,$@)/$(BOARD)_rev_*
endif
else
# Clean all boards of the app.
rm -rf $(OUTPUT_ROOT)/$(patsubst clean_%,%,$@)
endif
else
# Clean all boards and targets of the app.
rm -rf $(SDK_ROOT)/output/*/$(patsubst clean_%,%,$@)
endif
include mk/targets.mk