genode/repos/base-hw/src/kernel/spec/muen/target.mk

59 lines
2.5 KiB
Makefile

TARGET = muen
REQUIRES = x86_64 muen
MUEN_SRC_DIR = $(call select_from_ports,muen)/src/kernel/muen
MUEN_BUILD_DIR = $(BUILD_BASE_DIR)/kernel
MUEN_CONF_FILE = $(MUEN_BUILD_DIR)/muen.conf
MUEN_DST_DIR = $(MUEN_BUILD_DIR)/muen
MUEN_LOG = $(MUEN_BUILD_DIR)/build.log
MUEN_SYSTEM = $(shell sed -n "/^SYSTEM/s/^.*=\\s*//p" ${MUEN_CONF_FILE})
MUEN_HARDWARE = $(shell sed -n "/^HARDWARE/s/^.*=\\s*//p" ${MUEN_CONF_FILE})
MUEN_PLATFORM = $(shell sed -n "/^PLATFORM/s/^.*=\\s*//p" ${MUEN_CONF_FILE})
MUEN_COMPONENTS = $(shell sed -n "/^COMPONENTS/s/^.*=\\s*//p" ${MUEN_CONF_FILE})
GNAT_PATH = $(shell sed -n "/^GNAT_PATH/s/^.*=\\s*//p" ${MUEN_CONF_FILE})
SPARK_PATH = $(shell sed -n "/^SPARK_PATH/s/^.*=\\s*//p" ${MUEN_CONF_FILE})
BUILD_ENV = PATH=$(GNAT_PATH)/bin:$(SPARK_PATH)/bin:$$PATH
BUILD_OPTS = SYSTEM=$(MUEN_SYSTEM) HARDWARE=$(MUEN_HARDWARE) PLATFORM=$(MUEN_PLATFORM) NO_PROOF=true
ifneq ($(filter muen, $(SPECS)),)
$(TARGET): $(MUEN_DST_DIR)
$(MSG_BUILD)Muen policy
$(VERBOSE)$(BUILD_ENV) $(MAKE) -C $(MUEN_DST_DIR) $(BUILD_OPTS) policy-merge rts >> $(MUEN_LOG) 2>&1
$(MSG_BUILD)Muen components
$(VERBOSE)$(BUILD_ENV) $(MAKE) -C $(MUEN_DST_DIR)/components \
COMPONENTS=$(MUEN_COMPONENTS) $(BUILD_OPTS) >> $(MUEN_LOG) 2>&1
$(MSG_BUILD)Muen kernel
$(VERBOSE)$(BUILD_ENV) $(MAKE) -C $(MUEN_DST_DIR)/policy $(BUILD_OPTS) compile >> $(MUEN_LOG) 2>&1
$(VERBOSE)$(BUILD_ENV) $(MAKE) -C $(MUEN_DST_DIR)/kernel $(BUILD_OPTS) >> $(MUEN_LOG) 2>&1
$(VERBOSE)$(BUILD_ENV) $(MAKE) -C $(MUEN_DST_DIR)/components $(BUILD_OPTS) install-tau0 >> $(MUEN_LOG) 2>&1
$(MUEN_DST_DIR): download_contrib
$(VERBOSE)mkdir -p $(MUEN_DST_DIR)
$(VERBOSE)tar c -C $(MUEN_SRC_DIR) . | tar x -C $(MUEN_DST_DIR)
download_contrib: $(MUEN_SRC_DIR)
$(MSG_BUILD)Muen contrib
$(VERBOSE)cd $(MUEN_SRC_DIR) && git submodule update --init tools/mugenschedcfg > $(MUEN_LOG) 2>&1
$(VERBOSE)cd $(MUEN_SRC_DIR) && git submodule update --init components/libxhcidbg > $(MUEN_LOG) 2>&1
$(VERBOSE)$(BUILD_ENV) $(MAKE) -C $(MUEN_SRC_DIR)/contrib \
QUIET=true download >> $(MUEN_LOG) 2>&1
clean cleanall: clean_muen
#
# Make sure to execute the 'clean_muen' rule prior the generic clean
# rule in 'prg.mk' because the generic rule will attempt to remove $(TARGET)
# file, which is a directory in our case.
#
clean_prg_objects: clean_muen
clean_muen:
$(VERBOSE)rm -rf $(MUEN_DST_DIR)
$(VERBOSE)rm -f $(MUEN_CONF_FILE)
$(VERBOSE)rm -f $(MUEN_LOG)
endif
.PHONY: $(TARGET)