genode/tool/tool_chain_rump
Josef Söntgen 4c017900c8 tools: strip rumpkernel based tools
Until now, the rumpkernel based tools were installed with all symbols
included. This accounts for about 200MiB used space on 64Bit system.
Stripping the binaries prior to installation brings the space
requirements down to 20MiB.

Fixes #1245.
2014-08-28 12:35:56 +02:00

137 lines
4.1 KiB
Makefile
Executable File

#!/usr/bin/make -f
#
# \brief Build rumpkernel based tools for use within the Genode OS Framework
# tool chain
# \author Josef Soentgen
# \date 2014-04-24
help:
$(ECHO)
$(ECHO) "Build rump tools for the Genode OS Framework tool chain"
$(ECHO)
$(ECHO) "--- available commands ---"
$(ECHO) "build - build rump tools"
$(ECHO) "clean - clean everything except contrib sources"
$(ECHO) "cleanall - clean everything including contrib sources"
$(ECHO) "install - copy rump tools to '$(INSTALL_LOCATION)'"
$(ECHO)
.PHONY: build help install
.NOTPARALLEL: install
#
# Rump tool list
#
TOOLS = cat cgdconfig cp dd df disklabel fsck_ext2fs fsck_ffs \
fsck_msdos halt ln ls mkdir mount_ext2fs mount_ffs mv \
newfs newfs_ext2fs newfs_msdos rm rump_server umount \
vnconfig
#
# Source and install location
#
RUMPRUN_URL = https://github.com/cnuke/rumprun.git
INSTALL_LOCATION = /usr/local/genode-rump
CONTRIB_DIR = contrib/rumprun
BUILD_DIR = build/rumprun
TOOLS_LIST = $(addprefix $(BUILD_DIR)/bin/, $(TOOLS))
#
# Utilities
#
SHELL = bash
BRIGHT_COL = \033[01;33m
DEFAULT_COL = \033[0m
ECHO = @echo -e
VERBOSE = @
#
# Target rules
#
$(BUILD_DIR):
$(VERBOSE)mkdir -p $@
$(CONTRIB_DIR):
$(VERBOSE)mkdir -p $@
$(CONTRIB_DIR)/.checkout_sources.tag:
$(ECHO) "$(BRIGHT_COL)downloading rump sources...$(DEFAULT_COL)"
$(VERBOSE)git clone $(RUMPRUN_URL) $(CONTRIB_DIR) && \
cd $(CONTRIB_DIR) && git submodule update --init --recursive && \
./buildrump.sh/buildrump.sh -s rumpsrc checkout
@touch $@
$(CONTRIB_DIR)/.patch_sources.tag: $(CONTRIB_DIR)/.checkout_sources.tag
$(ECHO) "$(BRIGHT_COL)patching rump sources...$(DEFAULT_COL)"
$(VERBOSE)cd $(CONTRIB_DIR) && \
patch -N -d nbusersrc -p1 < updatesrc.sh.patch && \
patch -N -d buildrump.sh -p1 < buildrump.sh.patch && \
patch -N -d rumpsrc/usr.bin/rump_allserver -p0 < rump_allserver.c.patch
@touch $@
$(CONTRIB_DIR)/.prepare_sources.tag: $(CONTRIB_DIR)/.patch_sources.tag
$(ECHO) "$(BRIGHT_COL)preparing rump sources...$(DEFAULT_COL)"
$(VERBOSE)cd $(CONTRIB_DIR)/nbusersrc && \
sh updatesrc.sh && cd .. && mv nbusersrc nbusersrc_old && \
mv nbusersrc_old/newsrc nbusersrc && \
cp -Rp nbusersrc/* rumpsrc/
@touch $@
$(CONTRIB_DIR)/.compile.tag: $(CONTRIB_DIR)/.prepare_sources.tag
$(ECHO) "$(BRIGHT_COL)building rump tools...$(DEFAULT_COL)"
$(VERBOSE)cd $(CONTRIB_DIR) && \
./buildnb.sh && \
make
@touch $@
$(BUILD_DIR)/bin/rump_server: $(CONTRIB_DIR)/.compile.tag $(BUILD_DIR)
$(ECHO) "$(BRIGHT_COL)finished building rump tools.$(DEFAULT_COL)"
$(VERBOSE)cp -a $(CONTRIB_DIR)/rumpdyn/* $(BUILD_DIR) && \
cp -a $(CONTRIB_DIR)/bin $(BUILD_DIR)
@touch $@
build: $(CONTRIB_DIR) $(BUILD_DIR)/bin/rump_server
copy: $(CONTRIB_DIR) $(BUILD_DIR)/bin/rump_server
$(ECHO) "$(BRIGHT_COL)installing rump tools to '$(INSTALL_LOCATION)'...$(DEFAULT_COL)"
$(VERBOSE)sudo mkdir -p $(INSTALL_LOCATION)/bin >/dev/null 2>&1 || true
$(VERBOSE)sudo mkdir -p $(INSTALL_LOCATION)/share/man >/dev/null 2>&1 || true
$(VERBOSE)sudo cp -a $(TOOLS_LIST) $(INSTALL_LOCATION)/bin
$(VERBOSE)sudo cp -a $(BUILD_DIR)/lib/ $(INSTALL_LOCATION)
$(VERBOSE)sudo cp -a $(BUILD_DIR)/share/man/man* $(INSTALL_LOCATION)/share/man
#
# Since at least the libraries are installed with 444 permission by the
# NetBSD build framework and it requires some effort we strip the binaries
# manually by calling strip(1) with root permission prior to copying the
# binaries.
#
strip-binaries: $(CONTRIB_DIR) $(BUILD_DIR)/bin/rump_server
$(ECHO) "$(BRIGHT_COL)stripping binaries prior to installation...$(DEFAULT_COL)"
$(VERBOSE)sudo find $(BUILD_DIR)/bin -type f \
-exec strip --strip-all {} \; > /dev/null 2>&1
$(VERBOSE)sudo find $(BUILD_DIR)/lib -type f \
-exec strip --strip-all {} \; > /dev/null 2>&1
install: strip-binaries copy
#
# Clean rules
#
clean:
$(VERBOSE)rm -rf $(BUILD_DIR)
$(VERBOSE)cd $(CONTRIB_DIR) > /dev/null 2>&1 && \
rm .compile.tag > /dev/null 2>&1 && \
make cleanrump > /dev/null 2>&1 || true
cleanall: clean
$(VERBOSE)rm -rf $(CONTRIB_DIR)