TOPDIR:=$(shell pwd) APP_DIR:=$(TOPDIR)/application PKG_DIR:=$(TOPDIR)/package RTAI_DIR:=$(TOPDIR)/rtai-3.1-2.6 LINUX_DIR:=$(TOPDIR)/linux-2.6.10 TARGET_DIR:=$(TOPDIR)/target INCLUDE_DIR:=$(TOPDIR)/include DEVKIT_DIR:=$(TOPDIR)/devkit PLC_DIR:=$(DEVKIT_DIR)/plc-polux BUSYBOX_DIR:=$(APP_DIR)/busybox BINARIES_DIR=$(TOPDIR)/binaries HG_DIR:=$(shell find -maxdepth 1 -name .hg) export TOPDIR LINUX_DIR INCLUDE_DIR APP_DIR BUNDLETEST = $(shell find . -maxdepth 1 -name devkit) ifeq ($(findstring devkit,$(BUNDLETEST)), devkit) CONFIG_CONFIG_IN=Config_dev.in else CONFIG_CONFIG_IN=Config_bundle.in endif CONFIG_DEFCONFIG=default.config CONFIG=package/config DATE:=$(shell date -u +%Y%m%d) # default commands CROSS_COMPILE=arm-uclinux- noconfig_targets:=menuconfig config oldconfig randconfig \ defconfig allyesconfig allnoconfig release tags \ source-check help # Use shell variables, if defined ifneq ($(BUILDROOT_LOCAL),) BR_LOCAL:=$(BUILDROOT_LOCAL) else BR_LOCAL:=$(TOPDIR)/local endif # $(shell find . -name *_defconfig |sed 's/.*\///') # Pull in the user's configuration file ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) ifeq ($(BOARD),) # if "make BOARD=xyz" command -include .config else # if "make" command -include $(BR_LOCAL)/$(BOARD)/$(BOARD).config endif endif # Override BR_DL_DIR if shell variable defined ifneq ($(BUILDROOT_DL_DIR),) BR_DL_DIR:=$(BUILDROOT_DL_DIR) endif LOCAL:=$(BR_LOCAL) # To put more focus on warnings, be less verbose as default # Use 'make V=1' to see the full commands ifdef V ifeq ("$(origin V)", "command line") KBUILD_VERBOSE=$(V) endif endif ifndef KBUILD_VERBOSE KBUILD_VERBOSE=0 endif ifeq ($(KBUILD_VERBOSE),1) quiet= Q= ifndef VERBOSE VERBOSE=1 endif else quiet=quiet_ Q=@ endif CONFIG_SHELL:=$(shell if [ -x "$$BASH" ]; then echo $$BASH; \ else if [ -x /bin/bash ]; then echo /bin/bash; \ else echo sh; fi; fi) export CONFIG_SHELL quiet Q KBUILD_VERBOSE VERBOSE ifndef HOSTAR HOSTAR:=ar endif ifndef HOSTAS HOSTAS:=as endif ifndef HOSTCC HOSTCC:=gcc else endif ifndef HOSTCXX HOSTCXX:=g++ endif ifndef HOSTFC HOSTFC:=gfortran endif ifndef HOSTCPP HOSTCPP:=cpp endif ifndef HOSTLD HOSTLD:=ld endif ifndef HOSTLN HOSTLN:=ln endif ifndef HOSTNM HOSTNM:=nm endif HOSTAR:=$(shell $(CONFIG_SHELL) -c "which $(HOSTAR)" || type -p $(HOSTAR) || echo ar) HOSTAS:=$(shell $(CONFIG_SHELL) -c "which $(HOSTAS)" || type -p $(HOSTAS) || echo as) HOSTCC:=$(shell $(CONFIG_SHELL) -c "which $(HOSTCC)" || type -p $(HOSTCC) || echo gcc) HOSTCXX:=$(shell $(CONFIG_SHELL) -c "which $(HOSTCXX)" || type -p $(HOSTCXX) || echo g++) HOSTFC:=$(shell $(CONFIG_SHELL) -c "which $(HOSTLD)" || type -p $(HOSTLD) || echo || which g77 || type -p g77 || echo gfortran) HOSTCPP:=$(shell $(CONFIG_SHELL) -c "which $(HOSTCPP)" || type -p $(HOSTCPP) || echo cpp) HOSTLD:=$(shell $(CONFIG_SHELL) -c "which $(HOSTLD)" || type -p $(HOSTLD) || echo ld) HOSTLN:=$(shell $(CONFIG_SHELL) -c "which $(HOSTLN)" || type -p $(HOSTLN) || echo ln) HOSTNM:=$(shell $(CONFIG_SHELL) -c "which $(HOSTNM)" || type -p $(HOSTNM) || echo nm) ifndef CFLAGS_FOR_BUILD CFLAGS_FOR_BUILD:=-g -O2 endif ifndef CXXFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD:=-g -O2 endif ifndef FCFLAGS_FOR_BUILD FCFLAGS_FOR_BUILD:=-g -O2 endif export HOSTAR HOSTAS HOSTCC HOSTCXX HOSTFC HOSTLD ifeq ($(BR2_HAVE_DOT_CONFIG),y) # cc-option # Usage: cflags-y+=$(call cc-option, -march=winchip-c6, -march=i586) # sets -march=winchip-c6 if supported else falls back to -march=i586 # without checking the latter. cc-option=$(shell if $(TARGET_CC) $(TARGET_CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) ############################################################# # # Hide troublesome environment variables from sub processes # ############################################################# unexport CROSS_COMPILE unexport ARCH ############################################################# # # Setup the proper filename extensions for the host # ############################################################## ifneq ($(findstring linux,$(BR2_GNU_BUILD_SUFFIX)),) HOST_EXEEXT:= HOST_LIBEXT:=.a HOST_SHREXT:=.so endif ifneq ($(findstring apple,$(BR2_GNU_BUILD_SUFFIX)),) HOST_EXEEXT:= HOST_LIBEXT:=.a HOST_SHREXT:=.dylib endif ifneq ($(findstring cygwin,$(BR2_GNU_BUILD_SUFFIX)),) HOST_EXEEXT:=.exe HOST_LIBEXT:=.lib HOST_SHREXT:=.dll endif ifneq ($(findstring mingw,$(BR2_GNU_BUILD_SUFFIX)),) HOST_EXEEXT:=.exe HOST_LIBEXT:=.lib HOST_SHREXT:=.dll endif # The preferred type of libs we build for the target ifeq ($(BR_PREFER_STATIC_LIB),y) LIBTGTEXT=.a #PREFERRED_LIB_FLAGS:=--disable-shared --enable-static else LIBTGTEXT=.so #PREFERRED_LIB_FLAGS:=--disable-static --enable-shared endif PREFERRED_LIB_FLAGS:=--enable-static --enable-shared ############################################################## # # The list of stuff to build for the target toolchain # along with the packages to build for the target. # ############################################################## TARGETS:= BR2_DEPENDS_DIR=$(PROJECT_BUILD_DIR)/buildroot-config ############################################################# # # You should probably leave this stuff alone unless you know # what you are doing. # ############################################################# all: world # In this section, we need .config include .config.cmd # We also need the various per-package makefiles, which also add # each selected package to TARGETS if that package was selected # in the .config file. include package/*/*.mk # Trick to ensure initramfs and kernel will be generated last TARGETS += initramfs linux TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS)) TARGETS_PROPER:=$(patsubst %,%-mrproper,$(TARGETS)) TARGETS_SOURCE:=$(patsubst %,%-source,$(TARGETS) $(BASE_TARGETS)) TARGETS_DIRCLEAN:=$(patsubst %,%-dirclean,$(TARGETS)) TARGETS_ALL:=$(patsubst %,__real_tgt_%,$(TARGETS)) # all targets depend on the crosscompiler and it's prerequisites $(TARGETS_ALL): __real_tgt_%: $(BASE_TARGETS) % # ensure that devkit and libraries will be compiled first BASE_TARGETS += devkit spidlib $(BR2_DEPENDS_DIR): .config rm -rf $@ mkdir -p $(@D) cp -dpRf $(CONFIG)/buildroot-config $@ autoconf: @if [ ! -f $(INCLUDE_DIR)/autoconf.h ]; then \ ln -s $(LINUX_DIR)/include/linux/autoconf.h $(INCLUDE_DIR)/autoconf.h; \ fi world: autoconf $(BASE_TARGETS) $(TARGETS_ALL) .PHONY: all world dirs clean dirclean source \ $(BASE_TARGETS) $(TARGETS) $(TARGETS_ALL) \ $(TARGETS_CLEAN) $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) \ $(BR2_DEPENDS_DIR) ############################################################# # # staging and target directories do NOT list these as # dependencies anywhere else # ############################################################# $(STAGING_DIR): @mkdir -p $(STAGING_DIR)/bin @mkdir -p $(STAGING_DIR)/lib ifeq ($(BR2_TOOLCHAIN_SYSROOT),y) @mkdir -p $(STAGING_DIR)/usr/lib else ifneq ($(BR2_TOOLCHAIN_EXTERNAL),y) @ln -snf . $(STAGING_DIR)/usr @mkdir -p $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME) @ln -snf ../lib $(STAGING_DIR)/usr/lib @ln -snf ../lib $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib endif endif @mkdir -p $(STAGING_DIR)/usr/include source: $(TARGETS_SOURCE) $(HOST_SOURCE) _source-check: $(MAKE) SPIDER=--spider source external-deps: @$(MAKE) -Bs BR_WGET=$(TOPDIR)toolchain/wget-show-external-deps.sh \ source ############################################################# # # Cleanup and misc junk # ############################################################# clean: $(TARGETS_CLEAN) rm -rf $(STAGING_DIR) $(TARGET_DIR) $(IMAGE) dirclean: $(TARGETS_DIRCLEAN) rm -rf $(STAGING_DIR) $(TARGET_DIR) $(IMAGE) mrproper: $(TARGETS_PROPER) rm -rf $(STAGING_DIR) $(TARGET_DIR) $(IMAGE) find . -name "*~" -exec rm {} + rm -f .config else # ifeq ($(BR2_HAVE_DOT_CONFIG),y) all: menuconfig # configuration # --------------------------------------------------------------------------- HOSTCFLAGS=$(CFLAGS_FOR_BUILD) export HOSTCFLAGS $(CONFIG)/conf: @mkdir -p $(CONFIG)/buildroot-config $(MAKE) CC="$(HOSTCC)" -C $(CONFIG) conf -@if [ ! -f .config ]; then \ cp $(CONFIG_DEFCONFIG) .config; \ fi $(CONFIG)/mconf: @mkdir -p $(CONFIG)/buildroot-config $(MAKE) CC="$(HOSTCC)" -C $(CONFIG) conf mconf -@if [ ! -f .config ]; then \ cp $(CONFIG_DEFCONFIG) .config; \ fi menuconfig: $(CONFIG)/mconf @mkdir -p $(CONFIG)/buildroot-config @if ! KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ $(CONFIG)/mconf $(CONFIG_CONFIG_IN); then \ test -f .config.cmd || rm -f .config; \ fi # Something to change here ? @if ! [ -e $(LINUX_DIR)/.config ]; then $(MAKE) linux-config; fi @if ! [ -e $(BUSYBOX_DIR)/.config ]; then $(MAKE) busybox-config; fi config: $(CONFIG)/conf @mkdir -p $(CONFIG)/buildroot-config @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ $(CONFIG)/conf $(CONFIG_CONFIG_IN) oldconfig: $(CONFIG)/conf @mkdir -p $(CONFIG)/buildroot-config @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ $(CONFIG)/conf -o $(CONFIG_CONFIG_IN) randconfig: $(CONFIG)/conf @mkdir -p $(CONFIG)/buildroot-config @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ $(CONFIG)/conf -r $(CONFIG_CONFIG_IN) allyesconfig: $(CONFIG)/conf cat $(CONFIG_DEFCONFIG) > .config @mkdir -p $(CONFIG)/buildroot-config @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ $(CONFIG)/conf -y $(CONFIG_CONFIG_IN) # sed -i -e "s/^CONFIG_DEBUG.*/# CONFIG_DEBUG is not set/" .config allnoconfig: $(CONFIG)/conf @mkdir -p $(CONFIG)/buildroot-config @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ $(CONFIG)/conf -n $(CONFIG_CONFIG_IN) defconfig: $(CONFIG)/conf @mkdir -p $(CONFIG)/buildroot-config @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ $(CONFIG)/conf -d $(CONFIG_CONFIG_IN) # check if download URLs are outdated source-check: allyesconfig $(MAKE) _source-check ############################################################# # # Cleanup and misc junk # ############################################################# clean: rm -f .config .config.old .config.cmd .tmpconfig.h .defconfig -$(MAKE) -C $(CONFIG) clean mrproper: rm -f .config .config.old .config.cmd .tmpconfig.h .defconfig -$(MAKE) -C $(CONFIG) clean endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y) ppc_spc200c_defconfig: cp $@ .config cp $@ .defconfig $(MAKE) defconfig ppc_spc200e_defconfig: cp $@ .config cp $@ .defconfig $(MAKE) defconfig all_spc200c_defconfig: cp $@ .config cp $@ .defconfig $(MAKE) defconfig all_spc200e_defconfig: cp $@ .config cp $@ .defconfig $(MAKE) defconfig slave_spc200c_defconfig: cp $@ .config cp $@ .defconfig $(MAKE) defconfig slave_spc200e_defconfig: cp $@ .config cp $@ .defconfig $(MAKE) defconfig .PHONY: all_spc200c_defconfig all_spc200e_defconfig \ slave_spc200c_defconfig slave_spc200e_defconfig \ ppc_spc200c_defconfig ppc_spc200e_defconfig ifneq ($(HG_DIR),) VERSION_TAG:=$(shell hg identify -t) BUNDLE_DIR:=../SPiDBundle-$(VERSION_TAG) bundle: rm -rf $(BUNDLE_DIR) hg archive $(BUNDLE_DIR) rm $(BUNDLE_DIR)/.hg* rm -rf $(BUNDLE_DIR)/devkit rm -rf $(BUNDLE_DIR)/toolkit rm -rf $(BUNDLE_DIR)/ppc_spc200c_defconfig rm -rf $(BUNDLE_DIR)/ppc_spc200e_defconfig mkdir -p $(BUNDLE_DIR)/binaries mkdir -p $(BUNDLE_DIR)/include/plc-drv make -C $(PLC_DIR) clean plc_drv-headers cp -u $(INCLUDE_DIR)/plc-drv/plc_sysctl.h $(BUNDLE_DIR)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/plc_ioctl.h $(BUNDLE_DIR)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/plc_drv_if.h $(BUNDLE_DIR)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/ioctl-interface.h $(BUNDLE_DIR)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/pmd.h $(BUNDLE_DIR)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/version.h $(BUNDLE_DIR)/include/plc-drv/ make mrproper make slave_spc200e_defconfig make devkit make mrproper make all_spc200e_defconfig make devkit make mrproper make slave_spc200c_defconfig make devkit make mrproper make all_spc200c_defconfig make devkit cp $(BINARIES_DIR)/* $(BUNDLE_DIR)/binaries tar -cf $(BUNDLE_DIR).tar $(BUNDLE_DIR) bzip2 $(BUNDLE_DIR).tar endif # ifneq ($(HG_DIR),) allimages: make mrproper make slave_spc200e_defconfig make make mrproper make all_spc200e_defconfig make make mrproper make slave_spc200c_defconfig make make mrproper make all_spc200c_defconfig make BUNDLE_DIR_PPC:=../SPiDBundle-PPC-$(VERSION_TAG) ppcbundle: rm -rf $(BUNDLE_DIR_PPC) hg archive $(BUNDLE_DIR_PPC) rm $(BUNDLE_DIR_PPC)/.hg* rm -rf $(BUNDLE_DIR_PPC)/devkit rm -rf $(BUNDLE_DIR_PPC)/toolkit rm -rf $(BUNDLE_DIR_PPC)/slave_spc200e_defconfig rm -rf $(BUNDLE_DIR_PPC)/all_spc200e_defconfig rm -rf $(BUNDLE_DIR_PPC)/slave_spc200c_defconfig rm -rf $(BUNDLE_DIR_PPC)/all_spc200c_defconfig mkdir -p $(BUNDLE_DIR_PPC)/binaries mkdir -p $(BUNDLE_DIR_PPC)/include/plc-drv make -C $(PLC_DIR) clean plc_drv-headers cp -u $(INCLUDE_DIR)/plc-drv/plc_sysctl.h $(BUNDLE_DIR_PPC)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/plc_ioctl.h $(BUNDLE_DIR_PPC)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/plc_drv_if.h $(BUNDLE_DIR_PPC)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/ioctl-interface.h $(BUNDLE_DIR_PPC)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/pmd.h $(BUNDLE_DIR_PPC)/include/plc-drv cp -u $(INCLUDE_DIR)/plc-drv/version.h $(BUNDLE_DIR_PPC)/include/plc-drv/ make mrproper make ppc_spc200e_defconfig make devkit make mrproper make ppc_spc200c_defconfig make devkit cp $(BINARIES_DIR)/* $(BUNDLE_DIR_PPC)/binaries tar -cf $(BUNDLE_DIR_PPC).tar $(BUNDLE_DIR_PPC) bzip2 $(BUNDLE_DIR_PPC).tar ppcimages: make mrproper make ppc_spc200e_defconfig make make mrproper make ppc_spc200c_defconfig make help: @echo 'Cleaning:' @echo ' clean - delete temporary files created by build' @echo ' mrproper - delete all non-source files (including .config)' @echo @echo 'Build:' @echo ' all - make world' @echo @echo 'Configuration:' @echo ' menuconfig - interactive curses-based configurator' @echo ' oldconfig - resolve any unresolved symbols in .config' @echo .PHONY: dummy subdirs release clean config oldconfig \ menuconfig tags check test depend defconfig help