################################################################## 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-spc300-$(BUNDLE_VERSION) BUNDLE_UPPER_PATH=/tmp/$(BUNDLE_NAME) GIT_BASE=$(CURDIR)/.. WORK_DIRECTORY=$(BUNDLE_UPPER_PATH)/$(BUNDLE_NAME) BUNDLE_PATH=$(WORK_DIRECTORY)/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_NAME=plcdrv.ko PLCDRV_PATH=$(CLEOPATRE_PATH)/devkit/plcdrv PLCD_NAME=plcd PLCD_PATH=$(CLEOPATRE_PATH)/devkit/plcd CESAR_PLC_NAME=plc.rom 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 # 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) # FLASHFS is used once the cleopatre as been renamed to bundle FLASHFS_NAME=flashfs.jffs2 FLASHFS_PATH=$(BUNDLE_PATH)/tools/flashfs ################################################################## 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="$(subst bundle-,,$@)" bundle-clean: $(Q)rm -rf $(WORK_DIRECTORY) 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)$(MAKE) -C $(LIBMME_PATH) bundle $(Q)cp -R $(CLEOPATRE_PATH) $(BUNDLE_PATH) $(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)[ "$(GEN_BINS)" = "" ] || $(MAKE) $(GEN_BINS) $(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) 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)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 cesar-plc: $(Q)$(MAKE) -C $(CESAR_PRJ_PATH)/plc clean $(Q)rm -fr $(CESAR_PRJ_PATH)/plc/obj $(Q)$(MAKE) -C $(CESAR_PRJ_PATH)/plc $(Q)cp $(CESAR_PRJ_PATH)/plc/obj/plc.rom $(BUNDLE_PLCBIN_PATH)/$(CESAR_PLC_NAME) plcd: $(Q)$(MAKE) -C $(PLCD_PATH) clean $(Q)$(MAKE) -C $(PLCD_PATH) VERSION=$(BUNDLE_VERSION) $(Q)cp $(PLCD_PATH)/plcd $(BUNDLE_PLCBIN_PATH)/$(PLCD_NAME) plcdrv: $(Q)$(MAKE) -C $(LINUX_PATH) distclean $(Q)cp $(CLEOPATRE_PATH)/buildroot/target/device/Spidcom/spk300g/linux26.config $(LINUX_PATH)/.config $(Q)$(MAKE) -C $(LINUX_PATH) ARCH=arm CROSS_COMPILE=arm-linux- oldconfig $(Q)$(MAKE) -C $(LINUX_PATH) ARCH=arm CROSS_COMPILE=arm-linux- modules_prepare $(Q)$(MAKE) -C $(PLCDRV_PATH) clean $(Q)$(MAKE) -C $(PLCDRV_PATH) BUNDLE_VERSION=$(BUNDLE_VERSION) $(Q)cp $(PLCDRV_PATH)/plcdrv.ko $(BUNDLE_PLCBIN_PATH)/$(PLCDRV_NAME) $(Q)cp $(PLCDRV_PATH)/hotplug-plcdrv $(BUNDLE_PLCBIN_PATH) uboot: $(Q)$(MAKE) -C $(UBOOT_PATH) clean distclean sdk300_config $(Q)$(MAKE) -C $(UBOOT_PATH) $(Q)cp $(UBOOT_PATH)/u-boot.bin $(BUNDLE_GENBIN_PATH)/$(UBOOT_NAME) linux: $(Q)for BOARD in $(BOARDS); do \ $(MAKE) -C $(BUILDROOT_PATH) distclean "$$BOARD"_defconfig; \ $(MAKE) -C $(BUILDROOT_PATH); \ cp $(BUILDROOT_PATH)/binaries/"$$BOARD"/linux-kernel-$(LINUX_VERSION)-arm $(BUNDLE_GENBIN_PATH)/$(LINUX_NAME)-"$$BOARD"; \ done flashfs: $(Q)$(MAKE) -C $(FLASHFS_PATH) $(Q)cp $(FLASHFS_PATH)/flashfs.jffs2 $(BUNDLE_GENBIN_PATH)/$(FLASHFS_NAME)