tool: makefile for building rumpkernel tools

The rumpkernel tools are used within the Genode OS Framework tool chain
for preparing and populating disk images as well as creating cgd(4)
based cryptographic disk devices.

Execute 'tool/tool_chain_rump build' to build the tools and afterwards
'tool/tool_chain_rump install' to install the binaries. The default
install location is _/usr/local/genode-rump_.
This commit is contained in:
Josef Söntgen 2014-05-09 14:22:45 +02:00 committed by Norman Feske
parent c04ddbf6d8
commit a9e95e24fe
1 changed files with 116 additions and 0 deletions

116
tool/tool_chain_rump Executable file
View File

@ -0,0 +1,116 @@
#!/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
#
# 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
install: $(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
#
# Clean rules
#
clean:
$(VERBOSE)rm -rf $(BUILD_DIR)
$(VERBOSE)cd $(CONTRIB_DIR) && make cleanrump
cleanall: clean
$(VERBOSE)rm -rf $(CONTRIB_DIR)