blob: 154b965b025f9ee64e7c1ae636b0fdccb99166a1 [file] [log] [blame]
SIMPLERAMFS_SITE_METHOD=null
SIMPLERAMFS_INSTALL_TARGET=NO
SIMPLERAMFS_INSTALL_IMAGES=YES
SIMPLERAMFS_DEPENDENCIES= \
dash \
toybox \
toolbox \
util-linux \
google_signing \
google_platform \
mtd
ifeq ($(BR2_PACKAGE_SIMPLERAMFS_FIRMWARE),y)
SIMPLERAMFS_DEPENDENCIES+=simpleramfs_firmware
endif
ifeq ($(BR2_PACKAGE_GOOGLE_HNVRAM),y)
SIMPLERAMFS_DEPENDENCIES+=google_hnvram
HNVRAM_BIN=$(TARGET_DIR)/usr/bin/hnvram
endif
ifeq ($(BR2_PACKAGE_MINDSPEED_DRIVERS),y)
SIMPLERAMFS_DEPENDENCIES+=mindspeed_drivers
endif
ifneq ($(BR2_TARGET_ROOTFS_RECOVERYFS),y)
ifeq ($(BR2_PACKAGE_GPTFDISK_SGDISK),y)
SIMPLERAMFS_DEPENDENCIES+=gptfdisk
SGDISK_BIN=$(TARGET_DIR)/usr/sbin/sgdisk
endif
endif
ifeq ($(BR2_PACKAGE_UTIL_LINUX_MOUNT),y)
SIMPLERAMFS_DEPENDENCIES+=util-linux
LOSETUP_BIN=$(TARGET_DIR)/sbin/losetup
endif
ifeq ($(BR2_PACKAGE_LVM2),y)
SIMPLERAMFS_DEPENDENCIES+=lvm2
DMSETUP_BIN=$(TARGET_DIR)/usr/sbin/dmsetup
endif
define SIMPLERAMFS_EXTRACT_CMDS
mkdir -p $(@D)
endef
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_GLIBC),y)
SIMPLERAMFS_LD_LINUX = $(TARGET_DIR)/lib/ld-linux.so.2
else
SIMPLERAMFS_LD_LINUX = $(TARGET_DIR)/lib/ld-uClibc.so.0
endif
define SIMPLERAMFS_BUILD_CMDS
rm -rf $(@D)/fs
for d in sbin bin lib proc dev sys rootfs mnt tmp vfat veritytmp etc; do \
mkdir -p $(@D)/fs/$$d; \
done
# the initramfs /init script, executed by the kernel by default
ln -f \
package/simpleramfs/init \
package/simpleramfs/recover \
package/simpleramfs/mounts-sys \
package/simpleramfs/mounts-root \
package/simpleramfs/helpers.sh \
fs/skeleton/sbin/preinit \
$(@D)/fs/
# needed to run pre-init
ln -f \
fs/skeleton/bin/update-mtd-links \
$(@D)/../google_platform-HEAD/hnvram/hnvram \
$(@D)/fs/sbin
ln -f package/simpleramfs/fstab $(@D)/fs/etc
ln -s lib $(@D)/fs/lib64
# toolbox/toybox symlinks
#TODO(apenwarr): not sure we're actually using toolbox in simpleramfs.
set -e; \
cat $(TOOLBOX_DIR)/symlinks.list | \
while read name; do \
echo toolbox: $$name; \
ln -sf toolbox $(@D)/fs/bin/$$name; \
done
set -e; \
$(TOYBOX_DIR)/generated/instlist | \
while read name; do \
echo toybox: $$name; \
ln -sf toybox $(@D)/fs/bin/$$name; \
done
# other required binaries.
ln -f $(TARGET_DIR)/bin/dash $(@D)/fs/bin/sh
ln -f $(TARGET_DIR)/bin/toolbox \
$(TARGET_DIR)/bin/toybox \
$(TARGET_DIR)/usr/sbin/nanddump \
$(TARGET_DIR)/usr/sbin/ubiattach \
$(TARGET_DIR)/usr/sbin/ubidetach \
$(TARGET_DIR)/usr/sbin/readverity \
$(TARGET_DIR)/sbin/switch_root \
$(HNVRAM_BIN) \
$(SGDISK_BIN) \
$(LOSETUP_BIN) \
$(DMSETUP_BIN) \
$(@D)/fs/bin/
# driver firmware and modules
ln -f fs/skeleton/sbin/hotplug $(@D)/fs/sbin/
ln -f fs/skeleton/etc/utils.sh $(@D)/fs/etc/
if [ "$(BR2_PACKAGE_MINDSPEED_DRIVERS)" = "y" ]; then \
mkdir -p $(@D)/fs/lib/modules $(@D)/fs/lib/firmware && \
ln -f $(TARGET_DIR)/lib/modules/*/extra/pfe.ko \
$(@D)/fs/lib/modules/ && \
ln -f $(TARGET_DIR)/lib/firmware/*c2000*.elf \
$(@D)/fs/lib/firmware/; \
fi
if [ "$(BR2_PACKAGE_SIMPLERAMFS_FIRMWARE)" = "y" ]; then \
mkdir -p $(@D)/fs/lib/firmware; \
tmp=$(BR2_PACKAGE_SIMPLERAMFS_FIRMWARE_FILENAMES); \
for d in $$tmp; do \
for dd in $(@D)/$$d; do \
dir=$$(dirname "$(@D)/fs/lib/firmware/$$d"); \
mkdir -p "$$dir"; \
ln -f $(TARGET_DIR)/lib/firmware/$$d $$dir; \
done; \
done; \
fi
# strip all the binaries
$(STRIPCMD) $(@D)/fs/bin/*
# except this one
ln -f fs/skeleton/bin/register_experiment $(@D)/fs/bin/
# without ld.so, nothing works
if [ "$(BR2_TOOLCHAIN_EXTERNAL_GLIBC)" = "y" ]; then \
cp --no-dereference --preserve=links $(TARGET_DIR)/lib/ld-* \
$(@D)/fs/lib/; \
else \
cp $(TARGET_DIR)/lib/ld-uClibc.so.0 \
$(@D)/fs/lib/; \
fi
# find required shared libs, including libraries pulled in by
# other libraries that were pulled in. Three iterations seems to
# be one more than we need at time of writing (2012/04/17) which
# gives us a slight safety margin.
set -e; \
for i in 1 2 3; do \
echo "Loop $$i:"; \
$(TARGET_MAKE_ENV) $(TARGET_CROSS)readelf -d \
$(@D)/fs/bin/* $(@D)/fs/lib/*.so* | \
perl -ne '/library:\s*\[([^\]]+)\]/i && print "$$1\n"' | \
sort | uniq | \
while read fn; do \
[ ! -e $(@D)/fs/lib/$$fn ] || continue; \
echo lib: $$fn; \
[ -e $(TARGET_DIR)/lib/$$fn ] && \
cp $(TARGET_DIR)/lib/$$fn $(@D)/fs/lib/ || \
cp $(TARGET_DIR)/usr/lib/$$fn $(@D)/fs/lib/; \
done; \
done
# strip all the libraries
# TODO(mka): the libraries should be already stripped, but for some reason
# sometimes (at least) libstdc++ is unstripped
$(STRIPCMD) $(@D)/fs/lib/*.so*
endef
define SIMPLERAMFS_INSTALL_IMAGES_CMDS
(cd $(@D)/fs && \
((find; echo /dev/console; echo /dev/kmsg) | cpio -oH newc)) \
>$(BINARIES_DIR)/simpleramfs.cpio.new
mv $(BINARIES_DIR)/simpleramfs.cpio.new \
$(BINARIES_DIR)/simpleramfs.cpio
endef
$(eval $(call GENTARGETS))