genode/tool/tool_chain_rump

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)