BSP Patch:

=========================================================
	The purpose of the BSP patch is to allow building
	several boards inside the same buildroot tree.
	For this to work, each board has to have its
	own "$(TARGET_DIR)" and all *configurable* packages
	must be rebuilt for each board.
	They are now built in the "$(PROJECT_BUILD_DIR)"
	All non configurable packages can and should still
	be built in the "$(BUILD_DIR)".
	If a package is built for one board, then when
	you build for a second board of the same architecture
	the build becomes a simple copy of the resulting
	binaries.

	-----
	Define BR2_PROJECT which will be used as the selector
	between different boards. Note that BR2_PROJECT allow
	you to build multiple root file systems for a single 
	board, and should not be confused with BR2_BOARD_NAME
	which relates to the H/W.

	-----
	Define PROJECT_BUILD_DIR as 	"PROJECT_BUILD_DIR/$(PROJECT)"
	Define BINARIES_DIR as 		"binaries/$(PROJECT)"
	Define TARGET_DIR as		"$(PROJECT_BUILD_DIR)/root"
	(some prefix/postfix may apply)

	Resulting images are stored in	"$(BINARIES_DIR)"

	-----
	Define a few new environment variables in Makefile

	PROJECT:	Stripped BR2_PROJECT
	DATE:		Date of build in YYYY-MM-DD format
	HOSTNAME:	Stripped BR2_HOSTNAME	=> /etc/hostname
	BANNER:		Stripped BR2_BANNER	=> /etc/issue

	Linux and Busybox will be built in $(PROJECT_BUILD_DIR)
	More patches will be needed later to ensure all
	configurable packages are built in this directory.
This commit is contained in:
Ulf Samuelsson 2007-07-12 13:11:03 +00:00
parent 7def55591d
commit 412ca2a4d4
8 changed files with 75 additions and 22 deletions

View File

@ -6,6 +6,8 @@ config BR2_HAVE_DOT_CONFIG
bool bool
default y default y
source "project/Config.in"
choice choice
prompt "Target Architecture" prompt "Target Architecture"
default BR2_i386 default BR2_i386

View File

@ -155,6 +155,12 @@ TARGETS:=uclibc-configured binutils gcc uclibc-target-utils
else else
TARGETS:=uclibc TARGETS:=uclibc
endif endif
PROJECT:=$(strip $(subst ",, $(BR2_PROJECT)))
HOSTNAME:=$(strip $(subst ",, $(BR2_HOSTNAME)))
BANNER:=$(strip $(subst ",, $(BR2_BANNER)))
include toolchain/Makefile.in include toolchain/Makefile.in
include package/Makefile.in include package/Makefile.in
@ -183,12 +189,14 @@ TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS))
TARGETS_SOURCE:=$(patsubst %,%-source,$(TARGETS)) TARGETS_SOURCE:=$(patsubst %,%-source,$(TARGETS))
TARGETS_DIRCLEAN:=$(patsubst %,%-dirclean,$(TARGETS)) TARGETS_DIRCLEAN:=$(patsubst %,%-dirclean,$(TARGETS))
world: $(DL_DIR) $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) $(TARGETS) world: $(DL_DIR) $(BUILD_DIR) $(PROJECT_BUILD_DIR) \
dirs: $(DL_DIR) $(BUILD_DIR) $(STAGING_DIR) $(BINARIES_DIR) $(STAGING_DIR) $(TARGET_DIR) bsp $(TARGETS)
dirs: $(DL_DIR) $(BUILD_DIR) $(PROJECT_BUILD_DIR) $(STAGING_DIR)
.PHONY: all world dirs clean dirclean distclean source $(TARGETS) \ .PHONY: all world dirs clean dirclean distclean source bsp $(TARGETS) \
$(TARGETS_CLEAN) $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) \ $(TARGETS_CLEAN) $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) \
$(DL_DIR) $(BUILD_DIR) $(TOOL_BUILD_DIR) $(STAGING_DIR) $(DL_DIR) $(BUILD_DIR) $(TOOL_BUILD_DIR) $(STAGING_DIR) \
$(PROJECT_BUILD_DIR) $(BINARIES_DIR)
############################################################# #############################################################
# #
@ -196,7 +204,8 @@ dirs: $(DL_DIR) $(BUILD_DIR) $(STAGING_DIR)
# dependencies anywhere else # dependencies anywhere else
# #
############################################################# #############################################################
$(DL_DIR) $(BUILD_DIR) $(TOOL_BUILD_DIR): $(DL_DIR) $(BUILD_DIR) $(TOOL_BUILD_DIR) \
$(PROJECT_BUILD_DIR) $(BINARIES_DIR) :
@mkdir -p $@ @mkdir -p $@
$(STAGING_DIR): $(STAGING_DIR):
@ -221,6 +230,16 @@ $(TARGET_DIR):
-find $(TARGET_DIR) -type d -name CVS | xargs rm -rf -find $(TARGET_DIR) -type d -name CVS | xargs rm -rf
-find $(TARGET_DIR) -type d -name .svn | xargs rm -rf -find $(TARGET_DIR) -type d -name .svn | xargs rm -rf
bsp: $(TARGET_DIR)/etc/issue $(TARGET_DIR)/etc/hostname
$(TARGET_DIR)/etc/issue: $(TARGET_DIR) .config
echo "" > $(TARGET_DIR)/etc/issue
echo "" >> $(TARGET_DIR)/etc/issue
echo "$(BANNER)" >> $(TARGET_DIR)/etc/issue
$(TARGET_DIR)/etc/hostname: $(TARGET_DIR) .config
echo "$(HOSTNAME)" > $(TARGET_DIR)/etc/hostname
source: $(TARGETS_SOURCE) $(HOST_SOURCE) source: $(TARGETS_SOURCE) $(HOST_SOURCE)
.config.check: dependencies .config.check: dependencies
@ -245,12 +264,13 @@ distclean:
ifeq ($(DL_DIR),$(BASE_DIR)/dl) ifeq ($(DL_DIR),$(BASE_DIR)/dl)
rm -rf $(DL_DIR) rm -rf $(DL_DIR)
endif endif
rm -rf $(BUILD_DIR) $(LINUX_KERNEL) $(IMAGE) $(BASE_DIR)/include \ rm -rf $(BUILD_DIR) $(PROJECT_BUILD_DIR) $(BINARIES_DIR) \
$(LINUX_KERNEL) $(IMAGE) $(BASE_DIR)/include \
.config.cmd .config.cmd
$(MAKE) -C $(CONFIG) clean $(MAKE) -C $(CONFIG) clean
sourceball: sourceball:
rm -rf $(BUILD_DIR) rm -rf $(BUILD_DIR) $(PROJECT_BUILD_DIR) $(BINARIES_DIR)
set -e; \ set -e; \
cd ..; \ cd ..; \
rm -f buildroot.tar.bz2; \ rm -f buildroot.tar.bz2; \

View File

@ -69,7 +69,11 @@ DL_DIR:=$(BASE_DIR)/dl
endif endif
#PATCH_DIR=$(BASE_DIR)/sources/patches #PATCH_DIR=$(BASE_DIR)/sources/patches
BUILD_DIR:=$(BASE_DIR)/$(TOPDIR_PREFIX)build_$(ARCH)$(ARCH_FPU_SUFFIX)$(TOPDIR_SUFFIX) BUILD_DIR:=$(BASE_DIR)/$(TOPDIR_PREFIX)build_$(ARCH)$(ARCH_FPU_SUFFIX)$(TOPDIR_SUFFIX)
TARGET_DIR:=$(BUILD_DIR)/root
PROJECT_BUILD_DIR:=$(BASE_DIR)/$(TOPDIR_PREFIX)project_build_$(ARCH)$(ARCH_FPU_SUFFIX)$(TOPDIR_SUFFIX)/$(PROJECT)
BINARIES_DIR:=$(BASE_DIR)/binaries/$(PROJECT)
TARGET_DIR:=$(PROJECT_BUILD_DIR)/root
GNU_TARGET_SUFFIX:=-$(strip $(subst ",, $(BR2_GNU_TARGET_SUFFIX))) GNU_TARGET_SUFFIX:=-$(strip $(subst ",, $(BR2_GNU_TARGET_SUFFIX)))
#")) #"))
@ -81,7 +85,7 @@ TOOL_BUILD_DIR=$(BASE_DIR)/$(TOPDIR_PREFIX)toolchain_build_$(ARCH)$(ARCH_FPU_SUF
# Quotes are needed for spaces et al in path components. # Quotes are needed for spaces et al in path components.
TARGET_PATH="$(TOOL_BUILD_DIR)/bin:$(STAGING_DIR)/bin:$(STAGING_DIR)/usr/bin:$(PATH)" TARGET_PATH="$(TOOL_BUILD_DIR)/bin:$(STAGING_DIR)/bin:$(STAGING_DIR)/usr/bin:$(PATH)"
IMAGE:=$(BASE_DIR)/rootfs.$(ARCH)$(ARCH_FPU_SUFFIX) IMAGE:=$(BINARIES_DIR)/rootfs.$(ARCH)$(ARCH_FPU_SUFFIX)
GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-linux GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-linux
REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)$(GNU_TARGET_SUFFIX) REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)$(GNU_TARGET_SUFFIX)
TARGET_CROSS=$(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)- TARGET_CROSS=$(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-
@ -93,7 +97,7 @@ TOOLCHAIN_EXTERNAL_PATH:=$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_PATH)))
#")) #"))
TOOL_BUILD_DIR=$(BASE_DIR)/$(TOPDIR_PREFIX)toolchain_build_$(TOOLCHAIN_EXTERNAL_PREFIX) TOOL_BUILD_DIR=$(BASE_DIR)/$(TOPDIR_PREFIX)toolchain_build_$(TOOLCHAIN_EXTERNAL_PREFIX)
TARGET_PATH="$(STAGING_DIR)/bin:$(TOOL_BUILD_DIR)/bin:$(TOOLCHAIN_EXTERNAL_PATH)/bin:$(PATH)" TARGET_PATH="$(STAGING_DIR)/bin:$(TOOL_BUILD_DIR)/bin:$(TOOLCHAIN_EXTERNAL_PATH)/bin:$(PATH)"
IMAGE:=$(BASE_DIR)/rootfs.$(TOOLCHAIN_EXTERNAL_PREFIX) IMAGE:=$(BINARIES_DIR)/rootfs.$(TOOLCHAIN_EXTERNAL_PREFIX)
REAL_GNU_TARGET_NAME=$(TOOLCHAIN_EXTERNAL_PREFIX) REAL_GNU_TARGET_NAME=$(TOOLCHAIN_EXTERNAL_PREFIX)
GNU_TARGET_NAME=$(TOOLCHAIN_EXTERNAL_PREFIX) GNU_TARGET_NAME=$(TOOLCHAIN_EXTERNAL_PREFIX)
KERNEL_CROSS=$(TOOLCHAIN_EXTERNAL_PATH)/bin/$(TOOLCHAIN_EXTERNAL_PREFIX)- KERNEL_CROSS=$(TOOLCHAIN_EXTERNAL_PATH)/bin/$(TOOLCHAIN_EXTERNAL_PREFIX)-

View File

@ -7,13 +7,13 @@
ifeq ($(strip $(BR2_PACKAGE_BUSYBOX_SNAPSHOT)),y) ifeq ($(strip $(BR2_PACKAGE_BUSYBOX_SNAPSHOT)),y)
# Be aware that this changes daily.... # Be aware that this changes daily....
BUSYBOX_DIR:=$(BUILD_DIR)/busybox BUSYBOX_DIR:=$(PROJECT_BUILD_DIR)/busybox
BUSYBOX_SOURCE:=busybox-snapshot.tar.bz2 BUSYBOX_SOURCE:=busybox-snapshot.tar.bz2
BUSYBOX_SITE:=http://www.busybox.net/downloads/snapshots BUSYBOX_SITE:=http://www.busybox.net/downloads/snapshots
else else
BUSYBOX_VERSION=$(strip $(subst ",, $(BR2_BUSYBOX_VERSION))) BUSYBOX_VERSION=$(strip $(subst ",, $(BR2_BUSYBOX_VERSION)))
#")) #"))
BUSYBOX_DIR:=$(BUILD_DIR)/busybox-$(BUSYBOX_VERSION) BUSYBOX_DIR:=$(PROJECT_BUILD_DIR)/busybox-$(BUSYBOX_VERSION)
BUSYBOX_SOURCE:=busybox-$(BUSYBOX_VERSION).tar.bz2 BUSYBOX_SOURCE:=busybox-$(BUSYBOX_VERSION).tar.bz2
BUSYBOX_SITE:=http://www.busybox.net/downloads BUSYBOX_SITE:=http://www.busybox.net/downloads
endif endif
@ -31,7 +31,7 @@ $(DL_DIR)/$(BUSYBOX_SOURCE):
busybox-source: $(DL_DIR)/$(BUSYBOX_SOURCE) $(BUSYBOX_CONFIG_FILE) dependencies busybox-source: $(DL_DIR)/$(BUSYBOX_SOURCE) $(BUSYBOX_CONFIG_FILE) dependencies
$(BUSYBOX_DIR)/.unpacked: $(DL_DIR)/$(BUSYBOX_SOURCE) $(BUSYBOX_DIR)/.unpacked: $(DL_DIR)/$(BUSYBOX_SOURCE)
$(BUSYBOX_UNZIP) $(DL_DIR)/$(BUSYBOX_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) - $(BUSYBOX_UNZIP) $(DL_DIR)/$(BUSYBOX_SOURCE) | tar -C $(PROJECT_BUILD_DIR) $(TAR_OPTIONS) -
ifeq ($(BR2_PACKAGE_SYSKLOGD),y) ifeq ($(BR2_PACKAGE_SYSKLOGD),y)
# if we have external syslogd, force busybox to use it # if we have external syslogd, force busybox to use it
$(SED) "/#include.*busybox\.h/a#define CONFIG_SYSLOGD" $(BUSYBOX_DIR)/init/init.c $(SED) "/#include.*busybox\.h/a#define CONFIG_SYSLOGD" $(BUSYBOX_DIR)/init/init.c
@ -127,7 +127,7 @@ endif
busybox: uclibc $(TARGET_DIR)/bin/busybox busybox: uclibc $(TARGET_DIR)/bin/busybox
busybox-menuconfig: host-sed $(BUILD_DIR) busybox-source $(BUSYBOX_DIR)/.configured busybox-menuconfig: host-sed $(PROJECT_BUILD_DIR) busybox-source $(BUSYBOX_DIR)/.configured
$(MAKE) __TARGET_ARCH=$(ARCH) -C $(BUSYBOX_DIR) menuconfig $(MAKE) __TARGET_ARCH=$(ARCH) -C $(BUSYBOX_DIR) menuconfig
cp -f $(BUSYBOX_DIR)/.config $(BUSYBOX_CONFIG_FILE) cp -f $(BUSYBOX_DIR)/.config $(BUSYBOX_CONFIG_FILE)

26
project/Config.in Normal file
View File

@ -0,0 +1,26 @@
menu "Project Options"
config BR2_PROJECT
string "Project name"
default "uclibc"
help
The project name is used to define subdirectories
* where the Board Support Packages are built
(Linux,Root fs Bootmonitor,Utilities etc.)
* where the resulting binaries are stored.
Older targets may still build in the build_<arch>
and store binaries in the top directory.
config BR2_HOSTNAME
string "hostname"
default "uclibc"
help
The hostname string is stored in "/etc/hostname"
config BR2_BANNER
string "banner"
default "Welcome to the Erik's uClibc development environment."
help
The banner string is stored in "/etc/issue"
endmenu

View File

@ -15,6 +15,7 @@ CLOOP_DIR=$(BUILD_DIR)/cloop-$(CLOOP_VERSION)
CLOOP_SOURCE=cloop_$(CLOOP_VERSION)-5.tar.gz CLOOP_SOURCE=cloop_$(CLOOP_VERSION)-5.tar.gz
CLOOP_SITE=http://developer.linuxtag.net/knoppix/sources CLOOP_SITE=http://developer.linuxtag.net/knoppix/sources
CLOOP_TARGET:=$(IMAGE).cloop
### Note: not used yet! ck ### Note: not used yet! ck
### $(DL_DIR)/$(CLOOP_PATCH1): ### $(DL_DIR)/$(CLOOP_PATCH1):
### $(WGET) -P $(DL_DIR) $(CLOOP_PATCH1_URL)/$(CLOOP_PATCH1) ### $(WGET) -P $(DL_DIR) $(CLOOP_PATCH1_URL)/$(CLOOP_PATCH1)
@ -78,19 +79,19 @@ clooproot: cloop check-tools $(IMAGE).cramfs ### cramfsroot
@rm -rf $(TARGET_DIR)/usr/share/man @rm -rf $(TARGET_DIR)/usr/share/man
@rm -rf $(TARGET_DIR)/usr/info @rm -rf $(TARGET_DIR)/usr/info
@rmdir -p --ignore-fail-on-non-empty $(TARGET_DIR)/usr/share @rmdir -p --ignore-fail-on-non-empty $(TARGET_DIR)/usr/share
### $(CLOOP_DIR)/create_compressed_fs -q -D target/default/device_table.txt $(TARGET_DIR) $(IMAGE).cloop ### $(CLOOP_DIR)/create_compressed_fs -q -D target/default/device_table.txt $(TARGET_DIR) $(CLOOP_TARGET)
## mkisofs -r $(TARGET_DIR) | $(CLOOP_DIR)/create_compressed_fs - 65536 > $(IMAGE).cloop ## mkisofs -r $(TARGET_DIR) | $(CLOOP_DIR)/create_compressed_fs - 65536 > $(CLOOP_TARGET)
sudo /sbin/losetup -d /dev/loop1 sudo /sbin/losetup -d /dev/loop1
sudo /sbin/losetup /dev/loop1 $(IMAGE).cramfs sudo /sbin/losetup /dev/loop1 $(IMAGE).cramfs
sudo mkdir -p /mnt/compressed sudo mkdir -p /mnt/compressed
sudo mount -o ro -t cramfs /dev/loop1 /mnt/compressed sudo mount -o ro -t cramfs /dev/loop1 /mnt/compressed
mkisofs -r /mnt/compressed | $(CLOOP_DIR)/create_compressed_fs - 65536 > $(IMAGE).cloop mkisofs -r /mnt/compressed | $(CLOOP_DIR)/create_compressed_fs - 65536 > $(CLOOP_TARGET)
- symlinks -r /mnt/compressed - symlinks -r /mnt/compressed
sudo umount /mnt/compressed sudo umount /mnt/compressed
@echo "Mounting a compressed image:" @echo "Mounting a compressed image:"
@echo " sudo mkdir -p /mnt/compressed" @echo " sudo mkdir -p /mnt/compressed"
@echo " sudo /sbin/insmod cloop" @echo " sudo /sbin/insmod cloop"
@echo " sudo /sbin/losetup /dev/cloop1 $(IMAGE).cloop" @echo " sudo /sbin/losetup /dev/cloop1 $(CLOOP_TARGET)"
@echo " sudo mount -o ro -t iso9660 /dev/cloop1 /mnt/compressed" @echo " sudo mount -o ro -t iso9660 /dev/cloop1 /mnt/compressed"
clooproot-source: cloop-source clooproot-source: cloop-source

View File

@ -66,7 +66,7 @@ ifneq ($(TARGET_DEVICE_TABLE),)
>> $(STAGING_DIR)/_fakeroot.$(notdir $(JFFS2_TARGET)) >> $(STAGING_DIR)/_fakeroot.$(notdir $(JFFS2_TARGET))
endif endif
# Use fakeroot so mkfs.jffs2 believes the previous fakery # Use fakeroot so mkfs.jffs2 believes the previous fakery
echo "$(MKFS_JFFS2) $(JFFS2_OPTS) -d $(BUILD_DIR)/root -o $(JFFS2_TARGET)" \ echo "$(MKFS_JFFS2) $(JFFS2_OPTS) -d $(TARGET_DIR) -o $(JFFS2_TARGET)" \
>> $(STAGING_DIR)/_fakeroot.$(notdir $(JFFS2_TARGET)) >> $(STAGING_DIR)/_fakeroot.$(notdir $(JFFS2_TARGET))
chmod a+x $(STAGING_DIR)/_fakeroot.$(notdir $(JFFS2_TARGET)) chmod a+x $(STAGING_DIR)/_fakeroot.$(notdir $(JFFS2_TARGET))
$(STAGING_DIR)/usr/bin/fakeroot -- $(STAGING_DIR)/_fakeroot.$(notdir $(JFFS2_TARGET)) $(STAGING_DIR)/usr/bin/fakeroot -- $(STAGING_DIR)/_fakeroot.$(notdir $(JFFS2_TARGET))

View File

@ -58,7 +58,7 @@ endif
LINUX26_KERNEL=linux-kernel-$(LINUX26_VERSION)-$(KERNEL_ARCH) LINUX26_KERNEL=linux-kernel-$(LINUX26_VERSION)-$(KERNEL_ARCH)
# Version of Linux AFTER patches # Version of Linux AFTER patches
LINUX26_DIR=$(BUILD_DIR)/linux-$(LINUX26_VERSION) LINUX26_DIR=$(PROJECT_BUILD_DIR)/linux-$(LINUX26_VERSION)
# for packages that need it # for packages that need it
LINUX_VERSION:=$(LINUX_VERSION) LINUX_VERSION:=$(LINUX_VERSION)
@ -89,10 +89,10 @@ $(DL_DIR)/$(LINUX26_SOURCE):
$(LINUX26_DIR)/.unpacked: $(DL_DIR)/$(LINUX26_SOURCE) $(LINUX26_DIR)/.unpacked: $(DL_DIR)/$(LINUX26_SOURCE)
rm -rf $(LINUX26_DIR) rm -rf $(LINUX26_DIR)
$(LINUX26_BZCAT) $(DL_DIR)/$(LINUX26_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) - $(LINUX26_BZCAT) $(DL_DIR)/$(LINUX26_SOURCE) | tar -C $(PROJECT_BUILD_DIR) $(TAR_OPTIONS) -
ifneq ($(DOWNLOAD_LINUX26_VERSION),$(LINUX26_VERSION)) ifneq ($(DOWNLOAD_LINUX26_VERSION),$(LINUX26_VERSION))
# Rename the dir from the downloaded version to the AFTER patch version # Rename the dir from the downloaded version to the AFTER patch version
mv -f $(BUILD_DIR)/linux-$(DOWNLOAD_LINUX26_VERSION) $(LINUX26_DIR) mv -f $(PROJECT_BUILD_DIR)/linux-$(DOWNLOAD_LINUX26_VERSION) $(LINUX26_DIR)
endif endif
touch $@ touch $@