| # |
| # Copyright (c) 2007-2014 Quantenna Communications, Inc. |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software |
| # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| # |
| # Top-level makefile for building the entire system. |
| # |
| |
| default: help |
| |
| ifndef board_config |
| -include board_config.mk |
| endif |
| |
| include Make.toolchain |
| |
| # Provide a default config |
| board_config ?= topaz_config |
| board_platform ?= $(shell perl -e 'if ( "$(board_config)" =~ /topaz/ ) { print "topaz"; } else { print "ruby"; }') |
| board_type ?= asic |
| spi ?= yes |
| wmac_mode ?= ap |
| arc770 ?= no |
| arc_rev_ge_4_10 ?= no |
| qtn_hal_pm_corrupt_debug ?= no |
| pre ?= no # include prepopulated files |
| bb_only ?= 1 |
| br2_jlevel ?= $(shell echo -n $$((`nproc || echo 0` + 1))) |
| |
| br2_jlevel_max := 5 |
| br2_jlevel := $(shell \ |
| if [ $(br2_jlevel) -gt $(br2_jlevel_max) ] ; \ |
| then echo $(br2_jlevel_max) ; \ |
| else echo $(br2_jlevel) ; \ |
| fi) |
| |
| ifneq ($(filter topaz_pcie_config topaz_rgmii_config topaz_vzn_config,$(board_config)),) |
| mini_uboot_enabled ?= 1 |
| endif |
| |
| ifneq ($(filter topaz_pcie_config,$(board_config)),) |
| tiny_uboot_enabled ?= 0 |
| endif |
| |
| sigma_testbed_support_enabled ?= 0 |
| tkip_support_enabled ?= $(sigma_testbed_support_enabled) |
| flash_env_size ?= 24 |
| |
| # export firmware staging area to child makefiles |
| QTN_FW_STAGING_REL = buildroot/target/device/Quantenna/Ruby/fw/$(board_platform)-bin |
| QTN_FW_PREBUILD_REL = buildroot/target/device/Quantenna/Ruby/fw_bin/$(board_platform)-bin |
| QTN_FW_STAGING = $(shell pwd)/$(QTN_FW_STAGING_REL) |
| |
| QTN_FW_PREBUILD = $(shell pwd)/$(QTN_FW_PREBUILD_REL) |
| export QTN_FW_STAGING QTN_FW_STAGING_REL QTN_FW_PREBUILD |
| |
| AWK := awk |
| CONFIG_AWK := ./post-process-configs.awk |
| export NEW_CONFIG = .config.new |
| first_run = .first_run |
| |
| QDRV_DIR = drivers/qdrv |
| QDRV_CONFIG_FILE = $(QDRV_DIR)/qdrv_config.h |
| PLATFORM_ID_FILE = buildroot/target/device/Quantenna/Ruby/scripts/platform_id |
| POWER_TABLES_DIR = power_tables |
| |
| # Directory sub-tree names for the major modules in the RUBY software tree |
| kdir := linux |
| udir := u-boot |
| fsdir := buildroot |
| hostdir := host |
| commondir := common |
| macfwdir := macfw |
| aucfwdir := aucfw |
| rdspfwdir := rdspfw |
| tftpdir := tftp |
| |
| ifeq ($(ccache_enable),yes) |
| compile_prefix := $(target_prefix) |
| TARGET_CC_FOR_BR := TARGET_CC=$(target_prefix)gcc TARGET_CROSS=$(target_prefix) |
| export PATH := $(PATH):$(tools_path) |
| else |
| compile_prefix := $(tools_path)$(target_prefix) |
| TARGET_CC_FOR_BR := |
| endif |
| |
| # Where the kernel modules live |
| INSTALL_MOD_PATH := $(PWD)/$(kdir)/modules |
| |
| # Configuration file names |
| busybox := busybox-1.10.3 |
| qcsapi := $(shell cd buildroot/package/qcsapi; ls -d qcsapi-*.*) |
| |
| # The final image used by U-Boot to boot |
| image_suffix := |
| .PHONY: image_suffix |
| |
| PROFILE_MUC_EP := |
| PROFILE_MUC_PG := |
| PROFILE_MUC_P := |
| PROFILE_LINUX_EP := |
| PROFILE_MUC_SAMPLE_DCACHE := |
| PROFILE_MUC_SAMPLE_IPTR := |
| PROFILE_MUC_SAMPLE_IPTR_AUC := |
| PROFILE_MUC_DROP_PACKETS := |
| PROFILE_LINUX_SAMPLE_IPTR := |
| PROFILE_LINUX_SAMPLE_DCACHE := |
| PROFILE_MUC_SAMPLE_DCACHE := |
| POST_RF_LOOP := |
| .PHONY: PROFILE_MUC_EP PROFILE_MUC_PG PROFILE_MUC_P PROFILE_LINUX_EP PROFILE_MUC_SAMPLE_DCACHE PROFILE_MUC_SAMPLE_IPTR PROFILE_MUC_SAMPLE_IPTR_AUC PROFILE_LINUX_SAMPLE_DCACHE PROFILE_MUC_DROP_PACKETS PROFILE_LINUX_SAMPLE_IPTR POST_RF_LOOP |
| export PROFILE_MUC_EP |
| export PROFILE_MUC_P |
| export PROFILE_MUC_PG |
| export PROFILE_LINUX_EP |
| export PROFILE_MUC_SAMPLE_DCACHE |
| export PROFILE_MUC_SAMPLE_IPTR |
| export PROFILE_MUC_SAMPLE_IPTR_AUC |
| export PROFILE_MUC_DROP_PACKETS |
| export PROFILE_LINUX_SAMPLE_IPTR |
| export PROFILE_LINUX_SAMPLE_DCACHE |
| export POST_RF_LOOP |
| |
| uncompressed-boot-image := $(tftpdir)/$(board_platform)-linux.img$(image_suffix) |
| gz-boot-image := $(tftpdir)/$(board_platform)-linux.gz.img$(image_suffix) |
| lzma-boot-image := $(tftpdir)/$(board_platform)-linux.lzma.img$(image_suffix) |
| |
| # Where the kernel compiled image is... |
| kimage := $(kdir)/arch/arc/boot/Image |
| gz_compressed_kimage := $(kimage).gz |
| lzma_compressed_kimage := $(kimage).lzma |
| |
| # lzma executable |
| LZMA := host/utilities/lzma |
| CHECK_LZMA_SIZE := host/utilities/check_lzma_image_size |
| |
| STORE_OBJS := linux/vmlinux macfw/qtn_ruby macfw/bb_only $(shell find drivers/ -name \*.ko) |
| |
| SPARSE = host/utilities/sparse/install/bin/sparse |
| |
| # What revision are we building? |
| rev_num_file:=buildroot/target/device/Quantenna/Ruby/scripts/rev_num |
| rev_num:=$(shell cat ${rev_num_file} 2>/dev/null) |
| doc_rev_ext:=$(rev_num) |
| |
| $(fsdir)/.config.% $(fsdir)/package/busybox/$(busybox)/.config.%: ./configs/% |
| rm -f $(@F) |
| cat $< > $(@F) |
| $(AWK) -f $(CONFIG_AWK) $(@F) |
| cd $(fsdir); \ |
| if ! cmp -s $(@F) $(NEW_CONFIG); then \ |
| cp $(NEW_CONFIG) $(@F); fi |
| cd $(fsdir)/package/busybox/$(busybox); \ |
| if ! cmp -s .config.$(@F) $(NEW_CONFIG); then \ |
| cp $(NEW_CONFIG) $(@F); fi |
| |
| $(kdir)/.config.%: $(kdir)/arch/arc/configs/% |
| cat $< > $@ |
| |
| BUILD_CONFIGS = $(fsdir)/.config.$(board_config) \ |
| $(fsdir)/package/busybox/$(busybox)/.config.$(board_config) \ |
| $(kdir)/.config.$(board_config) |
| |
| define setconfigs |
| # setting configurations to $(1) |
| cd $(kdir); \ |
| ln -fs .config.$(1) .config.current; \ |
| cp .config.current .config |
| cd $(fsdir); \ |
| ln -fs .config.$(1) .config.current; \ |
| cp .config.current .config |
| cd $(fsdir)/package/busybox/$(busybox); \ |
| ln -fs .config.$(1) .config.unpatched.current; \ |
| touch .config.unpatched.current |
| endef |
| |
| # copy possibly modified configs back over the board specific config |
| define syncconfigs |
| # Syncing configs |
| @if [ -f $(kdir)/.config ] ; then \ |
| cat $(kdir)/.config > $(kdir)/.config.current; \ |
| fi |
| |
| @if [ -f $(fsdir)/.config ] ; then \ |
| cat $(fsdir)/.config > $(fsdir)/.config.current; \ |
| fi |
| endef |
| |
| test_config: buildroot/.config buildroot/package/busybox/busybox-1.10.3/.config |
| perl -e 'foreach $$file qw($^) { foreach $$line (`cat $$file`) { $$p = `dirname $$file`; chop($$p); print "#prefix0#$$p/#\n$$line"; } }' > configs/test |
| sed -i 's@#prefix0#buildroot/package@#prefix7#buildroot/package@' configs/test |
| # ------------------------------------------------------------------------- |
| # Configuration targets |
| # ------------------------------------------------------------------------- |
| |
| help: |
| @echo "Use make image or make fromscratch" |
| |
| config: configupdate |
| |
| ALL_CONFIGS = topaz_config \ |
| topaz_rfic6_config \ |
| topaz_host_config \ |
| topaz_pcie_config \ |
| topaz_np_config \ |
| topaz_rgmii_config \ |
| topaz_vzn_config \ |
| topaz_dbdc_config \ |
| topaz_msmr_config \ |
| topaz_msft_config |
| |
| .PHONY: $(ALL_CONFIGS) config get_current_config get_current_platform board_config board_platform |
| |
| ifeq ($(board_config),topaz_host_config) |
| QTN_FWS := dsp |
| else |
| QTN_FWS := muc auc dsp |
| endif |
| |
| define copy_if_changed |
| cmp --quiet $1 $2 || cp -v $1 $2 |
| endef |
| |
| board_config.mk.tmp: force |
| rm -f $@ |
| echo "# Automatically generated file. Do not edit." >> $@ |
| echo "# use 'make xxxx_config' instead" >> $@ |
| echo "export board_config = $(board_config)" >> $@ |
| echo "export board_type = $(board_type)" >> $@ |
| echo "export board_platform = $(board_platform)" >> $@ |
| echo "export spi = $(spi)" >> $@ |
| echo "export qtn_hal_pm_corrupt_debug = $(qtn_hal_pm_corrupt_debug)" >> $@ |
| echo "export wmac_mode = $(wmac_mode)" >> $@ |
| echo "export arc770 = $(arc770)" >> $@ |
| echo "export arc_rev_ge_4_10 = $(arc_rev_ge_4_10)" >> $@ |
| echo "export pre = $(pre)" >> $@ |
| echo "export bb_only = $(bb_only)" >> $@ |
| @if [ "$(hw_config_id)" != "" ] ; then \ |
| echo "export hw_config_id = $(hw_config_id)" >> $@; \ |
| fi |
| $(call copy_if_changed,$@,board_config.mk) |
| rm $@ |
| |
| common/current_platform.h.tmp: force |
| @echo "Board type: $(board_type) config: $(board_config) platform: $(board_platform) selected" |
| rm -f $@ |
| touch $@ |
| ifeq ($(board_platform),topaz) |
| echo "#define TOPAZ_PLATFORM" >> $@ |
| ifeq ($(board_type),asic) |
| echo "#define TOPAZ_FPGA_PLATFORM 0" >> $@ |
| else |
| echo "#define TOPAZ_FPGA_PLATFORM 1" >> $@ |
| endif # board type |
| ifeq ($(filter topaz_pcie_config,$(board_config)),) |
| echo "#define TOPAZ_EMAC_NULL_BUF_WR" >> $@ |
| endif |
| ifeq ($(ddr),umctl1) |
| @echo "DDR3 UMCTL-1 Configuration" |
| echo "#define TOPAZ_FPGA_UMCTL1" >> $@ |
| else |
| @echo "DDR3 UMCTL-2 Configuration" |
| echo "#undef TOPAZ_FPGA_UMCTL1" >> $@ |
| endif |
| endif # topaz |
| ifeq ($(spi),no) |
| echo "#define PLATFORM_NOSPI $(spi)" >> $@ |
| endif |
| ifneq ($(wmac_mode),) |
| @echo "WMAC Mode $(wmac_mode)" |
| echo "#define PLATFORM_WMAC_MODE $(wmac_mode)" >> $@ |
| endif |
| ifneq ($(hw_config_id),) |
| @echo "Default hw_config_id $(hw_config_id)" |
| echo "#define PLATFORM_DEFAULT_BOARD_ID $(hw_config_id)" >> $@ |
| else |
| echo "#undef PLATFORM_DEFAULT_BOARD_ID" >> $@ |
| endif |
| ifeq ($(arc770),yes) |
| echo "#define PLATFORM_ARC7_MMU_VER 3" >> $@ |
| endif |
| ifneq ($(arc_rev_ge_4_10),yes) |
| # For ARC hardware revisions prior to 4.10, |
| # there is a hardware bug causing an ITLB Miss exception even if a |
| # respective TLB entry already exists. This leads to duplicate TLB entries |
| # if an ITLB Miss exception handler does not check whether such an entry |
| # already exists: |
| # |
| # 1. Processor takes an ITLB Miss exception when the entry already exists. |
| # |
| # 2. ITLB Miss handler presumes that there is no such entry in TLB, and |
| # looks for a proper TLB way and set to store the entry. |
| # |
| # 3. Because the hardware way selection is pseudo-random, it can return a |
| # way number that may or may not match the way number of the existing |
| # entry. If the way number is different, a duplicate TLB entry is created, |
| # because the MMU checks for duplicate TLB entries only at the time of |
| # look-up but not at the time of adding entries. |
| # |
| # The following ITLB Miss exception is eventually triggered with a cause |
| # code indicating duplicated TLB entries. This may cause unexpected |
| # behavior of the software. |
| # |
| # This option enables a software workaround for this HW problem. |
| echo "#define ARC_HW_REV_NEEDS_TLBMISS_FIX" >> $@ |
| endif |
| ifeq ($(qtn_hal_pm_corrupt_debug),yes) |
| echo "#define QTN_HAL_PM_CORRUPT_DEBUG" >> $@ |
| endif |
| ifneq ($(hbm_skb_allocator),) |
| echo "#define TOPAZ_HBM_SKB_ALLOCATOR_DEFAULT $(hbm_skb_allocator)" >> $@ |
| endif |
| ifneq ($(hbm_payload_count_s),) |
| echo "#define TOPAZ_HBM_PAYLOAD_COUNT_S $(hbm_payload_count_s)" >> $@ |
| echo "#define TOPAZ_HBM_PAYLOAD_PTR_SECTION" >> $@ |
| endif |
| ifeq ($(board_config),topaz_host_config) |
| echo "#define QTN_RC_ENABLE_HDP" >> $@ |
| endif |
| ifeq ($(board_config),topaz_pcie_config) |
| echo "#define TOPAZ_DISABLE_FWT_WAR" >> $@ |
| endif |
| |
| ifeq (topaz_rfic6,$(board_config:topaz_rfic6%=topaz_rfic6)) |
| echo "#define TOPAZ_RFIC6_PLATFORM" >> $@ |
| echo "#define FLASH_SUPPORT_256KB" >> $@ |
| echo "#define ENABLE_C0_CALIB" >> $@ |
| echo "#define ENABLE_C0" >> $@ |
| else |
| ifeq ($(flash_env_size), 24) |
| echo "#define FLASH_SUPPORT_64KB" >> $@ |
| else |
| ifneq ($(flash_env_size), 64) |
| $(error Wrong flash environment size) |
| endif |
| endif |
| endif |
| echo "#define WPA_TKIP_SUPPORT $(tkip_support_enabled)" >> $@ |
| echo "#define SIGMA_TESTBED_SUPPORT $(sigma_testbed_support_enabled)" >> $@ |
| |
| $(call copy_if_changed,$@,common/current_platform.h) |
| rm $@ |
| |
| $(ALL_CONFIGS): |
| @if [ ! -f $(kdir)/arch/arc/configs/$@ ]; then \ |
| echo No kernel config found for board_config $@ ; \ |
| false ; \ |
| fi |
| $(MAKE) -C . board_config=$@ board_platform=$(shell perl -e 'if ( "$@" =~ /topaz/ ) { print "topaz"; } else { print "ruby"; }') board_config.mk.tmp |
| $(MAKE) -C . board_config=$@ board_platform=$(shell perl -e 'if ( "$@" =~ /topaz/ ) { print "topaz"; } else { print "ruby"; }') common/current_platform.h.tmp |
| $(MAKE) -C . board_config=$@ board_platform=$(shell perl -e 'if ( "$@" =~ /topaz/ ) { print "topaz"; } else { print "ruby"; }') configupdate |
| @if [ -d $(POWER_TABLES_DIR)/$@ ]; then \ |
| (cd $(POWER_TABLES_DIR) && ln -nsf $@ board_config) ; \ |
| else \ |
| rm -f $(POWER_TABLES_DIR)/board_config ; \ |
| fi |
| echo "/* Automatically generated file. Do not edit. */" > $(QDRV_CONFIG_FILE); |
| @echo -n "#define QDRV_CFG_PLATFORM_ID " >> $(QDRV_CONFIG_FILE) |
| @echo $(shell grep CONFIG_PLATFORM_ID configs/$@ 2>/dev/null | cut -d= -f2) >> $(QDRV_CONFIG_FILE) |
| echo "#define QDRV_CFG_TYPE \"$@\"" >> $(QDRV_CONFIG_FILE); |
| @echo $(shell grep CONFIG_PLATFORM_ID configs/$@ 2>/dev/null | cut -d= -f2) > $(PLATFORM_ID_FILE) |
| |
| get_current_config: |
| @echo $(board_config) |
| |
| get_current_platform: |
| @echo $(board_platform) |
| |
| # ------------------------------------------------------------------------- |
| # Cleaning targets |
| # ------------------------------------------------------------------------- |
| |
| distcleans := commondistclean udistclean kdistclean hostdistclean macfwdistclean rdspfwdistclean aucfwdistclean |
| cleans := commonclean uclean kclean hostclean macfwclean rdspfwclean aucfwclean |
| |
| .PHONY: clean distclean fsclean $(cleans) $(distcleans) configclean |
| |
| clean: $(QTN_LICENSE_CLEAN) fsclean $(cleans) |
| |
| fsclean: |
| $(MAKE) -C $(fsdir) CROSS_COMPILE=$(compile_prefix) clean |
| |
| $(cleans): |
| @if [ -d $($(strip $(patsubst %clean, %dir, $@))) ] ; then \ |
| $(MAKE) -C $($(strip $(patsubst %clean, %dir, $@))) CROSS_COMPILE=$(compile_prefix) clean ; \ |
| fi |
| |
| distclean: $(QTN_LICENSE_CLEAN) fsdistclean $(distcleans) \ |
| driversclean cleantftpdir configclean doxygenclean fwstagingclean |
| rm -f $(first_run) |
| |
| configclean: |
| rm -f $(fsdir)/package/busybox/$(busybox)/.config* .config* $(fsdir)/.config* $(kdir)/.config* |
| rm -f board_config.mk |
| rm -f common/current_platform.h |
| rm -f $(QDRV_CONFIG_FILE) |
| rm -f $(PLATFORM_ID_FILE) |
| |
| fsdistclean: |
| $(MAKE) -C $(fsdir) CROSS_COMPILE=$(compile_prefix) distclean |
| |
| doxygenclean: |
| rm -rf ./doxygen.tar.bz2 ./doxygen/* |
| |
| fwstagingclean: |
| rm -rf $(QTN_FW_STAGING) |
| |
| driversclean: |
| ifeq ($(wildcard drivers),drivers) |
| $(MAKE) -C drivers clean |
| rm -f drivers/extra_kos.symvers |
| endif |
| |
| $(distcleans): |
| @if [ -d $($(strip $(patsubst %distclean, %dir, $@))) ] ; then \ |
| $(MAKE) -C $($(strip $(patsubst %distclean, %dir, $@))) CROSS_COMPILE=$(compile_prefix) distclean ; \ |
| fi |
| |
| clean_linux_modules: |
| rm -rf $(kdir)/modules/lib/modules/* |
| |
| # ------------------------------------------------------------------------- |
| # Building targets |
| # ------------------------------------------------------------------------- |
| |
| .PHONY: include_gen force all ruby topaz $(QTN_FWS) auc_topaz fromscratch cleantftpdir configupdate copyconfigs u-boot host |
| .PHONY: buildroot buildbot_package buildbot_nightly verify_binary_archive unpack_binary_archive clean_linux_modules kernel_modules external_modules |
| .PHONY: qtn_license |
| |
| ########### prerequisite image building |
| CHILD_BUILD_PATH ?= $(shell pwd) |
| export CHILD_BUILD_PATH |
| |
| this_config_prereqs = |
| #this_config_prereqs += prereq_debug |
| |
| # define prerequisite configs for images that require them |
| ifeq ($(QTN_LINUX_IMG_DIR),) |
| topaz_host_config_prereqs = topaz_pcie_config |
| topaz_np_config_prereqs = topaz_rgmii_config |
| endif |
| |
| ifneq ($($(board_config)_prereqs),) |
| QTN_FWS += u-boot |
| endif |
| |
| # override image maximum size for images that will contain child images |
| qtm710_np_config_maxsize = 7471104 |
| qtm710_rc_config_maxsize = 7471104 |
| # minimum ODM request for RGMII image size limit is 4.5M, including u-boot (128k) |
| qtm710_rgmii_config_maxsize = 4350000 |
| qhs711_host_config_maxsize = 10000000 |
| |
| prereq_debug: |
| ## board_config: $(board_config) has prerequisites: $(this_config_prereqs) |
| |
| # template recipe/rule for building child prerequisites |
| define PREREQ_TEMPLATE |
| prereq_$(1): |
| $(syncconfigs) |
| ## target '$(board_config)' has prereq '$(1)', building '$(1)'... |
| $(MAKE) -C $(CHILD_BUILD_PATH) board_config=$(1) configupdate |
| $(MAKE) -C . board_config=$(1) common/current_platform.h.tmp |
| +$(MAKE) -C $(CHILD_BUILD_PATH) board_config=$(1) image_no_prereq |
| ## target '$(board_config)' prereq '$(1)' completed. |
| ## restoring configs '$(board_config)' |
| $(MAKE) -C . board_config=$(board_config) configupdate |
| $(MAKE) -C . board_config=$(board_config) common/current_platform.h.tmp |
| |
| .PHONY: prereq_$(1) |
| this_config_prereqs += prereq_$(1) |
| endef |
| $(foreach prereq,$($(board_config)_prereqs),$(eval $(call PREREQ_TEMPLATE,$(prereq)))) |
| |
| PHONY: check_packages |
| check_packages: |
| if test -f tools/setup.sh; then tools/setup.sh --check-packages; fi |
| |
| .PHONY: image_no_prereq |
| image_no_prereq: u-boot $(QTN_HOST_BOARD_UTILS) $(uncompressed-boot-image) qtn_license $(lzma-boot-image) |
| |
| ####### current image building |
| all image: check_packages $(BUILD_NAME_DEP) |
| @for p in $(this_config_prereqs); do $(MAKE) $${p}; done; |
| $(MAKE) image_no_prereq |
| |
| qtn_license: $(QTN_LICENSE_FILE) |
| |
| ruby topaz: $(uncompressed-boot-image) $(lzma-boot-image) |
| |
| fromscratch: |
| $(MAKE) -j1 distclean |
| $(MAKE) $(board_config) |
| $(MAKE) all |
| |
| $(SPARSE): |
| $(MAKE) -C host/utilities/sparse |
| |
| $(tftpdir): |
| mkdir -p $@ |
| |
| cleantftpdir: |
| rm -rf $(tftpdir)/ |
| |
| configupdate: $(BUILD_CONFIGS) clean_linux_modules unpack_binary_archive |
| $(syncconfigs) |
| $(call setconfigs,$(board_config)) |
| @if [ "$(spi)" = "no" ] ; then \ |
| echo "BR2_PACKAGE_QTN_PREPOPULATE=y" >> $(fsdir)/.config; \ |
| fi |
| @if [ "$(pre)" = "yes" ] ; then \ |
| echo "BR2_PACKAGE_QTN_PREPOPULATE=y" >> $(fsdir)/.config; \ |
| fi |
| @if [ $(br2_jlevel) != '1' ] && [ "$(findstring j,$(MAKEFLAGS))" != "" ] ; then \ |
| sed --in-place "s/BR2_JLEVEL=.*/BR2_JLEVEL=$(br2_jlevel)/" $(fsdir)/.config ; \ |
| fi |
| |
| copyconfigs: configupdate |
| cd $(fsdir); yes "" | $(MAKE) config |
| cd $(fsdir); mkdir -p dl; cp download_backup/* dl; chmod u+w dl/* |
| |
| u-boot: common $(tftpdir) |
| $(MAKE) -C $(udir) CROSS_COMPILE=$(compile_prefix) ruby_config |
| $(MAKE) -C $(udir) CROSS_COMPILE=$(compile_prefix) all |
| $(MAKE) -C $(udir) CROSS_COMPILE=$(compile_prefix) ruby_mini_config |
| $(MAKE) -C $(udir) CROSS_COMPILE=$(compile_prefix) ruby_mini |
| ifeq ($(tiny_uboot_enabled),1) |
| $(MAKE) -C $(udir) -f qtn_tiny.mk CROSS_COMPILE=$(compile_prefix) |
| $(MAKE) -C $(udir) -f piggy.mk CROSS_COMPILE=$(compile_prefix) TARGET=u-boot-tiny |
| endif |
| $(MAKE) -C $(udir) -f piggy.mk CROSS_COMPILE=$(compile_prefix) TARGET=u-boot-mini |
| $(MAKE) -C $(udir) -f piggy.mk CROSS_COMPILE=$(compile_prefix) TARGET=u-boot |
| mv $(udir)/u-boot.bin $(udir)/u-boot.bin.full |
| ifneq ($(NO_CHECK_SIZE),1) |
| $(CHECK_LZMA_SIZE) $(udir)/u-boot-mini-piggy.bin 20480 |
| ifeq ($(tiny_uboot_enabled),1) |
| $(CHECK_LZMA_SIZE) $(udir)/u-boot-tiny-piggy.bin 20480 |
| endif |
| $(CHECK_LZMA_SIZE) $(udir)/u-boot-piggy.bin 81920 |
| endif |
| cp $(udir)/u-boot-piggy.bin $(tftpdir)/u-boot.bin$(image_suffix) |
| ifeq ($(mini_uboot_enabled),1) |
| cp $(udir)/u-boot-mini-piggy.bin $(tftpdir)/u-boot-mini-piggy.bin$(image_suffix) |
| endif |
| @mkdir -p $(QTN_FW_STAGING)/ |
| cp $(udir)/u-boot-piggy.bin $(QTN_FW_STAGING)/u-boot.bin |
| ifeq ($(tiny_uboot_enabled),1) |
| cp $(udir)/u-boot-tiny-piggy.bin $(tftpdir)/u-boot-tiny.bin$(image_suffix) |
| $(udir)/tools/mkimage -A arc -C none -O u-boot -T firmware \ |
| -name UBOOT_STAGE2 \ |
| -d $(udir)/u-boot-piggy.bin $(tftpdir)/u-boot-stage2.img$(image_suffix) |
| endif |
| |
| host: |
| if [ -d $(hostdir) ] ; then $(MAKE) -C $(hostdir) ; fi |
| |
| .PHONY: do_buildroot |
| do_buildroot: |
| @echo "################################### Do buildroot" |
| -$(MAKE) -j1 -C $(fsdir) KERNEL_MODULES_PATH=$(INSTALL_MOD_PATH)/lib clean-fs |
| @if [ "topaz_msft_config" = "$(board_config)" ]; then \ |
| $(MAKE) -j1 -C $(fsdir) $(TARGET_CC_FOR_BR) KERNEL_MODULES_PATH=$(INSTALL_MOD_PATH)/lib MSFT=y; \ |
| else \ |
| $(MAKE) -j1 -C $(fsdir) $(TARGET_CC_FOR_BR) KERNEL_MODULES_PATH=$(INSTALL_MOD_PATH)/lib; \ |
| fi |
| $(syncconfigs) |
| |
| buildroot: check_packages $(QTN_FWS) kernel_modules external_modules strip_modules $(QTN_REGULATORY_DB) |
| $(MAKE) do_buildroot |
| |
| kernel_image: buildroot |
| @echo "################################### Making kernel image" |
| @mkdir -p buildroot/build_arc/root/etc/default |
| $(MAKE) -C $(kdir) ARCH=arc CROSS_COMPILE=$(compile_prefix) Image |
| $(syncconfigs) |
| |
| kernel_modules: $(first_run) |
| @echo "################################### Making kernel modules" |
| $(MAKE) -C $(kdir) ARCH=arc CROSS_COMPILE=$(compile_prefix) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) vmlinux modules |
| $(MAKE) -C $(kdir) ARCH=arc CROSS_COMPILE=$(compile_prefix) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) modules_install |
| $(syncconfigs) |
| |
| verify_binary_archive: |
| @if [ $$(echo quantenna-bin-*tar | wc -w) -gt 1 ]; \ |
| then \ |
| echo "Too many binary archives, correct and restart"; \ |
| ls -l quantenna-bin-*tar; \ |
| exit 1; \ |
| fi |
| @if [ $$(echo pcie-quantenna-bin-*tar | wc -w) -gt 1 ]; \ |
| then \ |
| echo "Too many binary archives for pcie build, correct and restart"; \ |
| ls -l pcie-quantenna-bin-*tar; \ |
| exit 1; \ |
| fi |
| @if [ $$(echo pcie-host-quantenna-bin-*tar | wc -w) -gt 1 ]; \ |
| then \ |
| echo "Too many binary archives for pcie build, correct and restart"; \ |
| ls -l pcie-host-quantenna-bin-*tar; \ |
| exit 1; \ |
| fi |
| @if [ $$(echo dbdc-quantenna-bin-*tar | wc -w) -gt 1 ]; \ |
| then \ |
| echo "Too many binary archives for dbdc build, correct and restart"; \ |
| ls -l dbdc-quantenna-bin-*tar; \ |
| exit 1; \ |
| fi |
| @if [ $$(echo rgmii-quantenna-bin-*tar | wc -w) -gt 1 ]; \ |
| then \ |
| echo "Too many binary archives for rgmii build, correct and restart"; \ |
| ls -l rgmii-quantenna-bin-*tar; \ |
| exit 1; \ |
| fi |
| @if [ $$(echo rfic6-quantenna-bin-*tar | wc -w) -gt 1 ]; \ |
| then \ |
| echo "Too many binary archives for rfic6 vb build, correct and restart"; \ |
| ls -l rfic6-quantenna-bin-*tar; \ |
| exit 1; \ |
| fi |
| |
| unpack_binary_archive: verify_binary_archive |
| @if [ "$(board_config)" = "topaz_pcie_config" ]; then \ |
| if [ -f pcie-quantenna-bin-*.tar ] ; then tar xvf pcie-quantenna-bin-*.tar ; \ |
| fi \ |
| elif [ "$(board_config)" = "topaz_host_config" ]; then \ |
| if [ -f pcie-host-quantenna-bin-*.tar ] ; then tar xvf pcie-host-quantenna-bin-*.tar ; \ |
| fi \ |
| elif [ "$(board_config)" = "topaz_dbdc_config" ] ; then \ |
| if [ -f dbdc-quantenna-bin-*.tar ] ; then tar xvf dbdc-quantenna-bin-*.tar ; \ |
| fi \ |
| elif [ "$(board_config:topaz_rfic6%=topaz_rfic6)" = "topaz_rfic6" ]; then \ |
| if [ -f rfic6-quantenna-bin-*.tar ] ; then tar xvf rfic6-quantenna-bin-*.tar ; \ |
| fi \ |
| else \ |
| if [ -f quantenna-bin-*.tar ] ; then tar xvf quantenna-bin-*.tar ; \ |
| fi \ |
| fi |
| |
| .PHONY: do_external_modules |
| do_external_modules: include_gen |
| @echo "################################### Making external modules" |
| if [ -d drivers ]; \ |
| then \ |
| $(MAKE) -C drivers ARCH=arc CROSS_COMPILE=$(compile_prefix) CHECK=../$(SPARSE); \ |
| fi |
| if [ -d drivers ]; \ |
| then \ |
| $(MAKE) -C drivers ARCH=arc CROSS_COMPILE=$(compile_prefix) install; \ |
| fi |
| $(syncconfigs) |
| |
| external_modules: kernel_modules |
| $(MAKE) do_external_modules |
| |
| ifeq ($(board_platform),topaz) |
| QTN_AUCFW := auc_topaz |
| endif |
| |
| ifeq ($(bb_only),1) |
| MUC_BUILD_TARGETS += bb_only |
| endif |
| MUC_BUILD_TARGETS += qtn_ruby |
| |
| muc: $(QTN_FW_STAGING_REL) ${QTN_FW_PREBUILD_REL} $(QTN_FW_STAGING_REL)/$(QTN_MACFW_BIN) |
| dsp: $(QTN_FW_STAGING_REL) ${QTN_FW_PREBUILD_REL} $(QTN_FW_STAGING_REL)/$(QTN_RDSPFW_BIN) |
| auc: $(QTN_AUCFW) |
| auc_topaz: $(QTN_FW_STAGING_REL) ${QTN_FW_PREBUILD_REL} $(QTN_FW_STAGING_REL)/$(QTN_AUCFW_BIN) |
| |
| $(QTN_FW_STAGING_REL) $(QTN_FW_PREBUILD_REL): |
| @mkdir -p $@ |
| |
| uncompressed_kimage: common kernel_image $(udir)/tools/mkimage |
| |
| $(gz_compressed_kimage): uncompressed_kimage |
| rm -f $@ |
| gzip -c --best $(kimage) > $(gz_compressed_kimage) |
| |
| $(lzma_compressed_kimage): uncompressed_kimage |
| rm -f $@ |
| $(LZMA) -k --best $(kimage) |
| |
| kernel_base_util := ./host/utilities/kernel_base_util |
| kernel_base_util_src := $(kernel_base_util).c |
| $(kernel_base_util): $(kernel_base_util_src) force |
| gcc -Wall -Icommon $< -o $@ |
| |
| uboot_qtn_flags = 0x1 |
| |
| $(uncompressed-boot-image): uncompressed_kimage $(tftpdir) $(kernel_base_util) |
| @echo "################################### Creating uncompressed U-Boot image" |
| $(udir)/tools/mkimage -A arc -C none -T kernel \ |
| -a `$(kernel_base_util) -a` -e `$(kernel_base_util) -e` \ |
| -name $(board_platform)-linux -Q $(uboot_qtn_flags) \ |
| -d $(kimage) $(uncompressed-boot-image) |
| |
| $(gz-boot-image): $(gz_compressed_kimage) $(tftpdir) $(kernel_base_util) |
| @echo "################################### Creating gzip compressed U-Boot image" |
| $(udir)/tools/mkimage -A arc -C gzip -T kernel \ |
| -a `$(kernel_base_util) -e` -e `$(kernel_base_util) -e` \ |
| -name $(board_platform)-linux -Q $(uboot_qtn_flags) \ |
| -d $(gz_compressed_kimage) $(gz-boot-image) |
| |
| $(lzma-boot-image): $(lzma_compressed_kimage) $(tftpdir) $(kernel_base_util) |
| @echo "################################### Creating lzma compressed U-Boot image" |
| $(udir)/tools/mkimage -A arc -C lzma -T kernel \ |
| -a `$(kernel_base_util) -e` -e `$(kernel_base_util) -e` \ |
| -name $(board_platform)-linux -Q $(uboot_qtn_flags) \ |
| -d $(lzma_compressed_kimage) $(lzma-boot-image) |
| @mkdir -p $(QTN_FW_STAGING)/$(board_config) |
| cp $@ $(QTN_FW_STAGING)/$(board_config)/$(board_platform)-linux.lzma.img |
| ifneq ($(NO_CHECK_SIZE),1) |
| $(CHECK_LZMA_SIZE) $@ $($(board_config)_maxsize) |
| endif |
| |
| strip_modules: kernel_modules external_modules |
| @echo "################################### Strip modules" |
| if [ "`find $(INSTALL_MOD_PATH) -name '*\.ko'`" != "" ] ; then \ |
| $(compile_prefix)strip --strip-unneeded `find $(INSTALL_MOD_PATH) -name '*\.ko'` ; \ |
| fi |
| |
| common: |
| $(MAKE) -C common |
| |
| $(udir)/tools/mkimage: | u-boot |
| @true # empty rule |
| |
| $(first_run): | $(QTN_FWS) $(QTN_REGULATORY_DB) |
| $(MAKE) copyconfigs |
| $(MAKE) do_buildroot && touch $(first_run) |
| |
| install: |
| cp $(uncompressed-boot-image) /tftpboot |
| cp $(lzma-boot-image) /tftpboot |
| |
| all_doxygen: |
| @echo "generate document of drivers,mucfw,qcsapi now...." |
| rm -rf ./doxygen.tar.bz2 ./doxygen/* |
| $(MAKE) -C drivers doxygen |
| $(MAKE) -C macfw doxygen |
| $(MAKE) -C rdspfw doxygen |
| $(MAKE) -C buildroot/package/qcsapi/qcsapi-1.0.1 doxygen |
| tar -cvjf doxygen.tar.bz2 ./doxygen/* |
| |
| doxygen_pdf: force |
| @echo "Auto-generated doxygen PDF files for QCSAPI and pktlogger" |
| -rm -rf doxygen_pdf |
| -rm -rf doxygen |
| -rm -f doxygen-${doc_rev_ext}.tar |
| mkdir doxygen_pdf |
| REV_NUM=$(doc_rev_ext) $(MAKE) -e -C common/ doco |
| find doxygen -name '*.pdf' | xargs -i cp {} doxygen_pdf/ |
| tar cvf doxygen-${doc_rev_ext}.tar doxygen_pdf/ |
| |
| include_gen: force |
| (cd include/qtn && make) |
| |
| show_configs: |
| @echo ${ALL_CONFIGS} |