diff --git a/Makefile b/Makefile index cd8d08a2..6a046c09 100644 --- a/Makefile +++ b/Makefile @@ -16,13 +16,12 @@ null := space := ${null} ${null} ${space} := ${space} -prepared_stamp := $(GLUON_BUILDDIR)/prepared +prepared_stamp := $(GLUON_BUILDDIR)/$(BOARD)/prepared define GluonProfile image/$(1): $(prepared_stamp) $(MAKE) -C $(GLUON_BUILDERDIR) image \ PROFILE="$(1)" \ - PACKAGE_DIR="$(GLUON_OPENWRTDIR)/bin/$(BOARD)/packages" \ $(if $(2),PACKAGES="$(2)") PROFILES += $(1) @@ -32,8 +31,8 @@ endef include profiles.mk prepare: - mkdir -p $(GLUON_IMAGEDIR) $(GLUON_BUILDDIR) - echo 'src packages file:../openwrt/bin/$(BOARD)/packages' > $(GLUON_BUILDDIR)/opkg-$(BOARD).conf + mkdir -p $(GLUON_IMAGEDIR) $(GLUON_BUILDDIR)/$(BOARD) + echo 'src packages file:../openwrt/bin/$(BOARD)/packages' > $(GLUON_BUILDDIR)/$(BOARD)/opkg.conf $(LN_S) $(GLUON_BUILDERDIR)/feeds.conf $(GLUON_OPENWRTDIR)/feeds.conf $(GLUON_OPENWRTDIR)/scripts/feeds uninstall -a diff --git a/builder/Makefile b/builder/Makefile index f3c48a0d..e680b887 100644 --- a/builder/Makefile +++ b/builder/Makefile @@ -1,6 +1,7 @@ -# Makefile for OpenWrt +# Greatly modified OpenWRT Image Builder Makefile # # Copyright (C) 2007-2010 OpenWrt.org +# Copyright (C) 2013 Project Gluon # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -24,7 +25,17 @@ ifneq ($(OPENWRT_BUILD),1) export OPENWRT_BUILD endif -include rules.mk +include $(TOPDIR)/rules.mk + +PACKAGE_DIR := $(GLUON_OPENWRTDIR)/bin/$(BOARD)/packages +BIN_DIR := $(GLUON_IMAGEDIR)/$(BOARD)/$(PROFILE) + +BOARD_BUILDDIR := $(GLUON_BUILDDIR)/$(BOARD) +PROFILE_BUILDDIR := $(BOARD_BUILDDIR)/$(PROFILE) + +TMP_DIR := $(PROFILE_BUILDDIR)/tmp +TARGET_DIR := $(PROFILE_BUILDDIR)/root + include $(INCLUDE_DIR)/debug.mk include $(INCLUDE_DIR)/depends.mk @@ -37,16 +48,16 @@ include $(INCLUDE_DIR)/package-ipkg.mk # override variables from rules.mk OPKG:= \ - IPKG_TMP="$(TOPDIR)/tmp/ipkgtmp" \ + IPKG_TMP="$(TMP_DIR)/ipkgtmp" \ IPKG_INSTROOT="$(TARGET_DIR)" \ - IPKG_CONF_DIR="$(TOPDIR)/tmp" \ + IPKG_CONF_DIR="$(TMP_DIR)" \ IPKG_OFFLINE_ROOT="$(TARGET_DIR)" \ $(STAGING_DIR_HOST)/bin/opkg \ - -f $(GLUONDIR)/build/opkg-$(BOARD).conf \ + -f $(BOARD_BUILDDIR)/opkg.conf \ --force-depends \ --force-overwrite \ --force-postinstall \ - --cache $(TOPDIR)/dl \ + --cache $(TMP_DIR)/dl \ --offline-root $(TARGET_DIR) \ --add-dest root:/ \ --add-arch all:100 \ @@ -55,8 +66,8 @@ OPKG:= \ define Profile $(eval $(call Profile/Default)) $(eval $(call Profile/$(1))) - ifeq ($(USER_PROFILE),) - USER_PROFILE:=$(1) + ifeq ($(PROFILE),) + PROFILE:=$(1) endif $(1)_NAME:=$(NAME) $(1)_PACKAGES:=$(PACKAGES) @@ -64,7 +75,7 @@ endef include $(INCLUDE_DIR)/target.mk -BUILD_PACKAGES:=$(sort $(DEFAULT_PACKAGES) $(USER_PACKAGES) $($(USER_PROFILE)_PACKAGES) kernel) +BUILD_PACKAGES:=$(sort $(DEFAULT_PACKAGES) $(USER_PACKAGES) $($(PROFILE)_PACKAGES) kernel) # "-pkgname" in the package list means remove "pkgname" from the package list BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES)) PACKAGES:= @@ -77,10 +88,10 @@ prepare: FORCE $(MAKE) package_index _call_image: - echo 'Building images for $(BOARD)$(if $($(USER_PROFILE)_NAME), - $($(USER_PROFILE)_NAME))' + echo 'Building images for $(BOARD)$(if $($(PROFILE)_NAME), - $($(PROFILE)_NAME))' echo 'Packages: $(BUILD_PACKAGES)' echo - rm -rf $(TARGET_DIR) + rm -rf $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(TARGET_DIR)/tmp $(OPKG) update $(MAKE) package_install @@ -140,16 +151,15 @@ build_image: FORCE @echo Building images... $(call Image/mkfs/prepare) $(NO_TRACE_MAKE) -C $(TOPDIR)/target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 IMG_PREFIX="gluon-$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))" \ - $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE)") + PROFILE="$(PROFILE)" TARGET_DIR="$(TARGET_DIR)" BIN_DIR="$(BIN_DIR)" TMP_DIR="$(TMP_DIR)" image: (unset PROFILE FILES PACKAGES MAKEFLAGS; \ $(MAKE) _call_image \ - $(if $(PROFILE),USER_PROFILE="$(PROFILE)") \ + $(if $(PROFILE),PROFILE="$(PROFILE)") \ $(if $(FILES),USER_FILES="$(FILES)") \ $(if $(PACKAGES),USER_PACKAGES="$(PACKAGES)") \ - BIN_DIR="$(GLUON_IMAGEDIR)" \ - $(if $(PACKAGE_DIR),PACKAGE_DIR="$(PACKAGE_DIR)")) + ) -.SILENT: kernel image +.SILENT: prepare image diff --git a/builder/rules.mk b/builder/rules.mk deleted file mode 100644 index e657eec7..00000000 --- a/builder/rules.mk +++ /dev/null @@ -1,307 +0,0 @@ -# -# Copyright (C) 2006-2010 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -ifneq ($(__rules_inc),1) -__rules_inc=1 - -ifeq ($(DUMP),) - -include $(TOPDIR)/.config -endif -include $(TOPDIR)/include/debug.mk -include $(TOPDIR)/include/verbose.mk - -TMP_DIR:=$(TOPDIR)/tmp - -GREP_OPTIONS= -export GREP_OPTIONS - -qstrip=$(strip $(subst ",,$(1))) -#")) - -empty:= -space:= $(empty) $(empty) -merge=$(subst $(space),,$(1)) -confvar=$(call merge,$(foreach v,$(1),$(if $($(v)),y,n))) -strip_last=$(patsubst %.$(lastword $(subst .,$(space),$(1))),%,$(1)) - -define sep - -endef - -_SINGLE=export MAKEFLAGS=$(space); -CFLAGS:= -ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) -ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) -BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) -TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) -TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX)) -BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX)) -SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) -export SHELL:=/usr/bin/env bash - -OPTIMIZE_FOR_CPU=$(subst i386,i486,$(ARCH)) - -ifeq ($(ARCH),powerpc) - FPIC:=-fPIC -else - FPIC:=-fpic -endif - -HOST_FPIC:=-fPIC - -ARCH_SUFFIX:= -GCC_ARCH:= - -ifneq ($(filter -march=armv%,$(TARGET_OPTIMIZATION)),) - ARCH_SUFFIX:=_$(patsubst -march=arm%,%,$(filter -march=armv%,$(TARGET_OPTIMIZATION))) - GCC_ARCH:=$(patsubst -march=%,%,$(filter -march=armv%,$(TARGET_OPTIMIZATION))) -endif -ifneq ($(findstring -mips32r2,$(TARGET_OPTIMIZATION)),) - ARCH_SUFFIX:=_r2 -endif -ifdef CONFIG_HAS_SPE_FPU - TARGET_SUFFIX:=$(TARGET_SUFFIX)spe -endif - -DL_DIR:=$(if $(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(TOPDIR)/dl) -BIN_DIR:=$(TOPDIR)/bin/$(BOARD) -INCLUDE_DIR:=$(TOPDIR)/include -SCRIPT_DIR:=$(TOPDIR)/scripts -BUILD_DIR_BASE:=$(TOPDIR)/build_dir -BUILD_DIR_HOST:=$(BUILD_DIR_BASE)/host -STAGING_DIR_HOST:=$(TOPDIR)/staging_dir/host -ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) - GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION)) - LIBC:=$(call qstrip,$(CONFIG_LIBC)) - LIBCV:=$(call qstrip,$(CONFIG_LIBC_VERSION)) - REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX)) - GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux - DIR_SUFFIX:=_$(LIBC)-$(LIBCV)$(if $(CONFIG_arm),_eabi) - BUILD_DIR:=$(BUILD_DIR_BASE)/target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) - STAGING_DIR:=$(TOPDIR)/staging_dir/target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) - BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX) - TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX) - PACKAGE_DIR:=$(BIN_DIR)/packages -else - ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) - GNU_TARGET_NAME=$(call qstrip,$(CONFIG_TARGET_NAME)) - else - GNU_TARGET_NAME=$(shell gcc -dumpmachine) - endif - REAL_GNU_TARGET_NAME=$(GNU_TARGET_NAME) - BUILD_DIR:=$(BUILD_DIR_BASE)/target-$(GNU_TARGET_NAME)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) - STAGING_DIR:=$(TOPDIR)/staging_dir/target-$(GNU_TARGET_NAME)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) - BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(GNU_TARGET_NAME) - TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(GNU_TARGET_NAME) - PACKAGE_DIR:=$(BIN_DIR)/packages -endif -STAMP_DIR:=$(BUILD_DIR)/stamp -STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp -TARGET_ROOTFS_DIR?=$(if $(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(BUILD_DIR)) -TARGET_DIR:=$(TARGET_ROOTFS_DIR)/root-$(BOARD) -STAGING_DIR_ROOT:=$(STAGING_DIR)/root-$(BOARD) -BUILD_LOG_DIR:=$(TOPDIR)/logs - -TARGET_PATH:=$(STAGING_DIR_HOST)/bin:$(subst $(space),:,$(filter-out .,$(filter-out ./,$(subst :,$(space),$(PATH))))) -TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3) -TARGET_CXXFLAGS = $(TARGET_CFLAGS) -TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include -TARGET_LDFLAGS:=-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib -ifneq ($(CONFIG_EXTERNAL_TOOLCHAIN),) -LIBGCC_S_PATH=$(realpath $(wildcard $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC)))) -LIBGCC_S=$(if $(LIBGCC_S_PATH),-L$(dir $(LIBGCC_S_PATH)) -lgcc_s) -LIBGCC_A=$(realpath $(wildcard $(dir $(LIBGCC_S_PATH))/gcc/*/*/libgcc.a)) -else -LIBGCC_A=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a) -LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-L$(TOOLCHAIN_DIR)/lib -lgcc_s,$(LIBGCC_A)) -endif -LIBRPC=-lrpc -LIBRPC_DEPENDS=+librpc - -ifneq ($(findstring $(ARCH) , mips64 x86_64 ),) - LIB_SUFFIX:=64 -endif - -ifndef DUMP - ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) - -include $(TOOLCHAIN_DIR)/info.mk - export GCC_HONOUR_COPTS:=0 - TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-) - TARGET_CFLAGS+= -fhonour-copts $(if $(CONFIG_GCC_VERSION_4_4)$(CONFIG_GCC_VERSION_4_5),,-Wno-error=unused-but-set-variable) - TARGET_CPPFLAGS+= -I$(TOOLCHAIN_DIR)/usr/include -I$(TOOLCHAIN_DIR)/include - TARGET_LDFLAGS+= -L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib - TARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(TARGET_PATH) - else - ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) - TARGET_CROSS:=$(call qstrip,$(CONFIG_TOOLCHAIN_PREFIX)) - TOOLCHAIN_ROOT_DIR:=$(call qstrip,$(CONFIG_TOOLCHAIN_ROOT)) - TOOLCHAIN_BIN_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_BIN_PATH))) - TOOLCHAIN_INC_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_INC_PATH))) - TOOLCHAIN_LIB_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_LIB_PATH))) - ifneq ($(TOOLCHAIN_BIN_DIRS),) - TARGET_PATH:=$(subst $(space),:,$(TOOLCHAIN_BIN_DIRS)):$(TARGET_PATH) - endif - ifneq ($(TOOLCHAIN_INC_DIRS),) - TARGET_CPPFLAGS+= $(patsubst %,-I%,$(TOOLCHAIN_INC_DIRS)) - endif - ifneq ($(TOOLCHAIN_LIB_DIRS),) - TARGET_LDFLAGS+= $(patsubst %,-L%,$(TOOLCHAIN_LIB_DIRS)) - endif - TARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(TARGET_PATH) - endif - endif -endif -TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(TARGET_PATH) - -ifeq ($(CONFIG_SOFT_FLOAT),y) - SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft - TARGET_CFLAGS+= -msoft-float -else - SOFT_FLOAT_CONFIG_OPTION:= -endif - -export PATH:=$(TARGET_PATH) -export STAGING_DIR -export SH_FUNC:=. $(INCLUDE_DIR)/shell.sh; - -PKG_CONFIG:=$(STAGING_DIR_HOST)/bin/pkg-config - -export PKG_CONFIG - -HOSTCC:=gcc -HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include -HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS) -HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib - -TARGET_CC:=$(TARGET_CROSS)gcc -TARGET_AR:=$(TARGET_CROSS)ar -TARGET_RANLIB:=$(TARGET_CROSS)ranlib -TARGET_CXX:=$(if $(CONFIG_INSTALL_LIBSTDCPP),$(TARGET_CROSS)g++,no) -KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh -SED:=$(STAGING_DIR_HOST)/bin/sed -i -e -CP:=cp -fpR -LN:=ln -sf - -INSTALL_BIN:=install -m0755 -INSTALL_DIR:=install -d -m0755 -INSTALL_DATA:=install -m0644 -INSTALL_CONF:=install -m0600 - -TARGET_CC_NOCACHE:=$(TARGET_CC) -TARGET_CXX_NOCACHE:=$(TARGET_CXX) -HOSTCC_NOCACHE:=$(HOSTCC) -export TARGET_CC_NOCACHE -export TARGET_CXX_NOCACHE -export HOSTCC_NOCACHE - -ifneq ($(CONFIG_CCACHE),) - TARGET_CC:= ccache_cc - TARGET_CXX:= ccache_cxx - HOSTCC:= ccache $(HOSTCC) -endif - -TARGET_CONFIGURE_OPTS = \ - AR=$(TARGET_CROSS)ar \ - AS="$(TARGET_CC) -c $(TARGET_CFLAGS)" \ - LD=$(TARGET_CROSS)ld \ - NM=$(TARGET_CROSS)nm \ - CC="$(TARGET_CC)" \ - GCC="$(TARGET_CC)" \ - CXX="$(TARGET_CXX)" \ - RANLIB=$(TARGET_CROSS)ranlib \ - STRIP=$(TARGET_CROSS)strip \ - OBJCOPY=$(TARGET_CROSS)objcopy \ - OBJDUMP=$(TARGET_CROSS)objdump \ - SIZE=$(TARGET_CROSS)size - -# strip an entire directory -ifneq ($(CONFIG_NO_STRIP),) - RSTRIP:=: - STRIP:=: -else - ifneq ($(CONFIG_USE_STRIP),) - STRIP:=$(TARGET_CROSS)strip $(call qstrip,$(CONFIG_STRIP_ARGS)) - else - ifneq ($(CONFIG_USE_SSTRIP),) - STRIP:=$(STAGING_DIR_HOST)/bin/sstrip - endif - endif - RSTRIP:= \ - export CROSS="$(TARGET_CROSS)" \ - $(if $(CONFIG_KERNEL_KALLSYMS),NO_RENAME=1) \ - $(if $(CONFIG_KERNEL_PROFILING),KEEP_SYMBOLS=1); \ - NM="$(TARGET_CROSS)nm" \ - STRIP="$(STRIP)" \ - STRIP_KMOD="$(SCRIPT_DIR)/strip-kmod.sh" \ - $(SCRIPT_DIR)/rstrip.sh -endif - -ifeq ($(CONFIG_ENABLE_LOCALE),true) - DISABLE_NLS:=--enable-nls -else - DISABLE_NLS:=--disable-nls -endif - -ifeq ($(CONFIG_IPV6),y) - DISABLE_IPV6:= -else - DISABLE_IPV6:=--disable-ipv6 -endif - -ifeq ($(CONFIG_TAR_VERBOSITY),y) - TAR_OPTIONS:=-xvf - -else - TAR_OPTIONS:=-xf - -endif - -ifeq ($(CONFIG_BUILD_LOG),y) - BUILD_LOG:=1 -endif - -define shvar -V_$(subst .,_,$(subst -,_,$(subst /,_,$(1)))) -endef - -define shexport -$(call shvar,$(1))=$$(call $(1)) -export $(call shvar,$(1)) -endef - -define include_mk -$(eval -include $(if $(DUMP),,$(STAGING_DIR)/mk/$(strip $(1)))) -endef - -# Execute commands under flock -# $(1) => The shell expression. -# $(2) => The lock name. If not given, the global lock will be used. -define locked - SHELL= \ - $(STAGING_DIR_HOST)/bin/flock \ - $(TMP_DIR)/.$(if $(2),$(strip $(2)),global).flock \ - -c '$(subst ','\'',$(1))' -endef - -# file extension -ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1))) - -all: -FORCE: ; -.PHONY: FORCE - -val.%: - @$(if $(filter undefined,$(origin $*)),\ - echo "$* undefined" >&2, \ - echo '$(subst ','"'"',$($*))' \ - ) - -var.%: - @$(if $(filter undefined,$(origin $*)),\ - echo "$* undefined" >&2, \ - echo "$*='"'$(subst ','"'\"'\"'"',$($*))'"'" \ - ) - -endif #__rules_inc