################################################################## ifeq ($(BUNDLE_TYPE),) BUNDLE_TYPE=av endif include Config.bundle-$(BUNDLE_TYPE) ################################################################## GIT_DIRECTORIES=cleopatre cesar common ################################################################## BUNDLE_VERSION=$(shell git describe --always 2>/dev/null) LINUX_VERSION=2.6.25.10 UBOOT_VERSION=1.1.6 BUNDLE_NAME=SPiDBundle-$(BUNDLE_VERSION) BUNDLE_TMPDIR_PATH?=$(shell mktemp -d -u --suffix=-BundleCleo) # Evaluate now. export BUNDLE_TMPDIR_PATH:=$(BUNDLE_TMPDIR_PATH) BUNDLE_UPPER_PATH=$(BUNDLE_TMPDIR_PATH)/$(BUNDLE_NAME) BUNDLE_TMP=$(BUNDLE_UPPER_PATH)-tmp GIT_BASE=$(CURDIR)/.. WORK_DIRECTORY=$(BUNDLE_UPPER_PATH)/$(BUNDLE_NAME) BUNDLE_PATH=$(WORK_DIRECTORY)/bundle BUNDLE_TMP_PATH=$(BUNDLE_TMP)/$(BUNDLE_NAME)/bundle BUNDLE_GENBIN_PATH=$(WORK_DIRECTORY)/binaries BUNDLE_PLCBIN_PATH=$(BUNDLE_PATH)/binaries CLEOPATRE_PATH=$(WORK_DIRECTORY)/cleopatre CESAR_PATH=$(WORK_DIRECTORY)/cesar COMMON_PATH=$(WORK_DIRECTORY)/common MMTCGEN=$(COMMON_PATH)/lib/mmtcgen LIBMME_PATH=$(CLEOPATRE_PATH)/application/libmme PLCDRV_PATH=$(CLEOPATRE_PATH)/devkit/plcdrv PLCD_NAME=plcd PLCD_PATH=$(CLEOPATRE_PATH)/devkit/plcd CESAR_PRJ_PATH=$(CESAR_PATH)/projects LINUX_NAME=linux-$(LINUX_VERSION)-arm LINUX_PATH=$(CLEOPATRE_PATH)/linux-$(LINUX_VERSION)-spc300 # Buildroot is used once the cleopatre as been renamed to bundle BUILDROOT_PATH=$(BUNDLE_PATH)/buildroot BUILDROOT_TMP_PATH=$(BUNDLE_TMP_PATH)/buildroot # U-boot is used once the cleopatre as been renamed to bundle UBOOT_NAME=u-boot.bin UBOOT_PATH=$(BUNDLE_PATH)/u-boot-$(UBOOT_VERSION) UBOOT_TMP_PATH=$(BUNDLE_TMP_PATH)/u-boot-$(UBOOT_VERSION) # FLASHFS is used once the cleopatre as been renamed to bundle FLASHFS_NAME=flashfs.*.jffs2 FLASHFS_PATH=$(BUNDLE_TMP_PATH)/tools/flashfs OPENOCD_PATH=$(BUNDLE_PATH)/tools/openocd-r668 ################################################################## ifdef V ifeq ("$(origin V)", "command line") KBUILD_VERBOSE = $(V) endif endif ifndef KBUILD_VERBOSE KBUILD_VERBOSE = 0 endif ifeq ($(KBUILD_VERBOSE),1) Q = else Q = @ endif ################################################################## # Default rule to make a bundle related to the current branch all: $(Q)$(MAKE) bundle-standalone BUNDLE_TYPE="av" # Custom rule to choose the bundle type bundle-%: $(Q)$(MAKE) bundle-standalone BUNDLE_TYPE="$*" bundle-standalone: $(Q)echo "Prepare $(BUNDLE_NAME)..." $(Q)if [ -d $(WORK_DIRECTORY) ]; then \ echo "Bundle already exist please remove it before ($(WORK_DIRECTORY))"; false; \ fi $(Q)echo "Generate bundle sources..." $(Q)mkdir -p $(WORK_DIRECTORY) $(Q)(cd $(GIT_BASE) && git archive --format=tar HEAD: $(GIT_DIRECTORIES)) | tar -x -C $(WORK_DIRECTORY) $(Q)echo $(BUNDLE_VERSION) > $(WORK_DIRECTORY)/.version $(Q)$(MAKE) -C $(LIBMME_PATH) bundle $(Q)cp -R $(CLEOPATRE_PATH) $(BUNDLE_PATH) $(Q)cp -R $(COMMON_PATH)/tools/flashfs $(BUNDLE_PATH)/tools $(Q)sed -i -e 's/buildjffs2-200//g' $(BUNDLE_PATH)/tools/flashfs/Makefile $(Q)cp -R $(COMMON_PATH)/tools/genNVRAM $(BUNDLE_PATH)/tools $(Q)sed -i -e 's/\(BUNDLE_DIR=\)n/\1y/' $(BUNDLE_PATH)/tools/genNVRAM/Makefile $(Q)echo "Generate PLC binaries..." $(Q)echo $(BUNDLE_VERSION) > $(CESAR_PRJ_PATH)/version.txt $(Q)mkdir -p $(BUNDLE_PLCBIN_PATH) $(Q)[ "$(PLC_BINS)" = "" ] || $(MAKE) $(PLC_BINS) $(Q)echo "Generate Bundle archive..." $(Q)$(MAKE) prepare-includes $(Q)find $(BUNDLE_PATH)/application/ -name Module -exec rm -f '{}' ';' $(Q)sed -i -e 's/\(BUNDLE_VERSION *= *\)\(.*\)/\1$(BUNDLE_VERSION)/' $(BUILDROOT_PATH)/target/device/Spidcom/Makefile.in $(Q)sed -i -e 's/\(EXTRAVERSION *= *\)\(.*\)/\1-$(BUNDLE_VERSION)/' $(BUNDLE_PATH)/u-boot-1.1.6/Makefile $(Q)echo -n "$(BUNDLE_VERSION)" | sed -e 's/\(.\{16\}\).*/\1/' > $(BUILDROOT_PATH)/.version $(Q)cd $(BUNDLE_PATH) ; rm -rf $(UNUSE) $(Q)cd $(BUNDLE_UPPER_PATH) ; tar -cf $(BUNDLE_NAME).tar $(subst $(BUNDLE_UPPER_PATH)/,, $(BUNDLE_PATH)) $(Q)echo "Generate Bundle binaries..." $(Q)mkdir -p $(BUNDLE_GENBIN_PATH) $(Q)mkdir $(BUNDLE_TMP) $(Q)cd $(BUNDLE_TMP); tar xf $(BUNDLE_UPPER_PATH)/$(BUNDLE_NAME).tar $(Q)[ "$(GEN_BINS)" = "" ] || $(MAKE) $(GEN_BINS) $(Q)rm -rf $(BUNDLE_TMP) $(Q)echo "Generate end of Bundle archive..." $(Q)cd $(BUNDLE_UPPER_PATH) ; tar -rf $(BUNDLE_NAME).tar $(subst $(BUNDLE_UPPER_PATH)/,, $(BUNDLE_GENBIN_PATH)) $(Q)bzip2 $(BUNDLE_UPPER_PATH)/$(BUNDLE_NAME).tar $(Q)[ "$(DEBUG_BINS)" = "" ] || $(MAKE) $(DEBUG_BINS) $(Q)mv $(BUNDLE_UPPER_PATH) $(GIT_BASE) $(Q)rmdir $(BUNDLE_TMPDIR_PATH) prepare-includes: # We have to remove gitignore files here because, in our git repository, those includes are based in the common/ # directory and the ones in linux and u-boot are just copies we must ignore. But, once copied in the bundle, linux # and u-boot are their actual base locations and they must not be ignored anymore. # Moreover, gitignore files are not usually removed, that is why we have to handle them individually. $(Q)rm $(BUNDLE_PATH)/linux-$(LINUX_VERSION)-spc300/scripts/mksimage $(Q)cp -r $(GIT_BASE)/common/tools/mksimage \ $(BUNDLE_PATH)/linux-$(LINUX_VERSION)-spc300/scripts/mksimage $(Q)$(BUNDLE_PATH)/linux-$(LINUX_VERSION)-spc300/scripts/cpincludes $(BUNDLE_PATH)/linux-$(LINUX_VERSION)-spc300 $(Q)rm -f $(BUNDLE_PATH)/linux-$(LINUX_VERSION)-spc300/scripts/cpincludes $(Q)rm -f $(BUNDLE_PATH)/linux-$(LINUX_VERSION)-spc300/include/asm-arm/arch-spc300/.gitignore $(Q)cd $(BUNDLE_PATH)/include; ln -sf ../linux-$(LINUX_VERSION)-spc300/include/asm-arm/arch-spc300/nvram.h nvram.h $(Q)$(MAKE) -C $(UBOOT_PATH) cpincludes $(Q)rm -f $(UBOOT_PATH)/cpincludes.mk $(Q)rm -f $(UBOOT_PATH)/include/asm-arm/arch-spc300/.gitignore $(Q)$(OPENOCD_PATH)/cpincludes $(OPENOCD_PATH) $(Q)rm -f $(OPENOCD_PATH)/cpincludes $(Q)rm -f $(OPENOCD_PATH)/.gitignore $(Q)rm -f $(BUNDLE_PATH)/include/ethernet.h $(BUNDLE_PATH)/include/spid_img_desc.h $(Q)cp -f $(GIT_BASE)/common/include/ethernet.h $(BUNDLE_PATH)/include/ $(Q)cp $(GIT_BASE)/common/include/spid_img_desc.h \ $(BUNDLE_PATH)/include/ cesar-plc-debug: $(Q)$(MAKE) -C $(CESAR_PRJ_PATH)/plc clean $(Q)rm -fr $(CESAR_PRJ_PATH)/plc/obj $(Q)$(MAKE) -C $(CESAR_PRJ_PATH)/plc PROJECT_CONFIG=Config.traces $(Q)cp $(CESAR_PRJ_PATH)/plc/obj/plc.rom $(BUNDLE_UPPER_PATH)/plc-with-traces.rom plcd: $(foreach chip,$(CHIPS),plcd-$(chip)) plcd-%: -$(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot clean distclean $(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot ${$*_REF_BOARD}_defconfig $(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot plcd VERSION=$(BUNDLE_VERSION) $(Q)cp $(PLCD_PATH)/plcd $(BUNDLE_PLCBIN_PATH)/$(PLCD_NAME)-$* plcdrv: $(foreach chip,$(CHIPS),plcdrv-$(chip)) plcdrv-%: -$(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot clean distclean $(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot ${$*_REF_BOARD}_defconfig $(Q)$(MAKE) -C $(CLEOPATRE_PATH)/buildroot plcdrv BUNDLE_VERSION=$(BUNDLE_VERSION) $(Q)cp $(PLCDRV_PATH)/plcdrv.ko $(BUNDLE_PLCBIN_PATH)/plcdrv-$*.ko $(Q)cp $(CESAR_PRJ_PATH)/plc/obj/plc.rom $(BUNDLE_PLCBIN_PATH)/plc.rom $(Q)cp $(PLCDRV_PATH)/hotplug-plcdrv $(BUNDLE_PLCBIN_PATH) uboot: $(Q)$(MAKE) -C $(UBOOT_TMP_PATH) clean distclean sdk300_config $(Q)$(MAKE) -C $(UBOOT_TMP_PATH) $(Q)cp $(UBOOT_TMP_PATH)/u-boot.bin $(BUNDLE_GENBIN_PATH)/spc300-$(UBOOT_NAME) $(Q)$(MAKE) -C $(UBOOT_TMP_PATH) clean distclean mse500_config $(Q)$(MAKE) -C $(UBOOT_TMP_PATH) $(Q)cp $(UBOOT_TMP_PATH)/u-boot.bin $(BUNDLE_GENBIN_PATH)/mse500-$(UBOOT_NAME) linux: $(foreach board,$(BOARDS), linux-$(board)) linux-%: -$(Q)$(MAKE) -C $(BUILDROOT_TMP_PATH) clean distclean $(Q)$(MAKE) -C $(BUILDROOT_TMP_PATH) $*_defconfig $(Q)$(MAKE) -C $(BUILDROOT_TMP_PATH) $(Q)cp $(BUILDROOT_TMP_PATH)/binaries/$*/linux-kernel-$(LINUX_VERSION)-arm $(BUNDLE_GENBIN_PATH)/$(LINUX_NAME)-$* flashfs: $(Q)$(MAKE) -C $(FLASHFS_PATH) $(Q)cp $(FLASHFS_PATH)/$(FLASHFS_NAME) $(BUNDLE_GENBIN_PATH)/