#!/usr/bin/make -f # # \brief Prepare Genode build directory # \author Christian Helmuth, Norman Feske # \date 2008-08-14 # MAKEOVERRIDES = PLATFORM = $(MAKECMDGOALS) usage: @echo @echo "Tool for preparing Genode build directories" @echo @echo "usage:" @echo @echo " create_builddir [BUILD_DIR=]" @echo @echo " can be:" @echo " 'linux_x86'" @echo " 'linux_arm'" @echo " 'fiasco_x86'" @echo " 'pistachio_x86'" @echo " 'okl4_x86'" @echo " 'nova_x86_32'" @echo " 'nova_x86_64'" @echo " 'codezero_vpb926'" @echo " 'hw_panda'" @echo " 'hw_vea9x4'" @echo " 'hw_pbxa9'" @echo " 'hw_imx53'" @echo " 'hw_imx53_tz'" @echo " 'hw_arndale'" @echo " 'hw_odroid_xu'" @echo " 'hw_rpi'" @echo " 'foc_x86_32'" @echo " 'foc_x86_64'" @echo " 'foc_pbxa9'" @echo " 'foc_imx53'" @echo " 'foc_vea9x4'" @echo " 'foc_panda'" @echo " 'foc_arndale'" @echo " 'lx_hybrid_x86'" @echo @echo " The definition of BUILD_DIR is optional. If specified," @echo " is the location of the build directory to create." @echo " If not specified, the build directory will be created at" @echo " /build/." @echo # # Determine Genode base directory based on the known location of the # 'create_builddir' tool within the Genode source tree # GENODE_DIR ?= $(realpath $(dir $(MAKEFILE_LIST))/..) # # Define default location of the build directory if not explicitly specified # BUILD_DIR ?= $(GENODE_DIR)/build/$(PLATFORM) SHELL := bash ifneq ($(wildcard $(BUILD_DIR)),) $(PLATFORM):: build_dir_already_exists build_dir_already_exists: @echo "Directory $(BUILD_DIR) already exists." @false endif # # Convert GENODE_DIR to an absolute directory because the user # may have specified a '~'-relative location or a pwd-relative # location. # GENODE_ABS_DIR := $(realpath $(shell echo $(GENODE_DIR))) # # Define absolute path to the contrib directory as written to the # 'etc/build.conf' file. We use 'abs_path' instead of 'realpath' because the # contrib directory may not exist when the build directory is created. In this # case, 'realpath' would return an empty string. # ifeq ($(CONTRIB_DIR),) CONTRIB_ABS_DIR := $$(GENODE_DIR)/contrib else CONTRIB_ABS_DIR := $(abspath $(shell echo $(CONTRIB_DIR))) endif # # Generic build-directory preparation rules # BUILD_CONF = $(GENODE_ABS_DIR)/tool/builddir/etc/build.conf BUILD_CONF_PLATFORM = $(BUILD_CONF).$(PLATFORM) $(BUILD_DIR)/etc: @mkdir -p $@ $(BUILD_DIR)/etc/build.conf:: $(BUILD_CONF_PLATFORM) @echo "GENODE_DIR = $(GENODE_ABS_DIR)" > $@ @echo 'BASE_DIR = $$(GENODE_DIR)/repos/base' >> $@ @echo 'CONTRIB_DIR = $(CONTRIB_ABS_DIR)' >> $@ # # Supply -no-kvm argument to Qemu for kernels that are incompatible with KVM # ifeq ($(filter-out foc_x86_32 foc_x86_64 okl4_x86 nova_x86_32 nova_x86_64 pistachio_x86,$(PLATFORM)),) $(BUILD_DIR)/etc/build.conf:: @cat $(BUILD_CONF).qemu_no_kvm >> $@ endif # # Add 'base-' and generic repositories # $(BUILD_DIR)/etc/build.conf:: $(BUILD_CONF_PLATFORM) @echo >> $@ @echo "##" >> $@ @echo "## Kernel-specific base repository" >> $@ @echo "##" >> $@ @echo >> $@ @cat $< >> $@ @cat $(BUILD_CONF).generic >> $@ # # Add optional repositories for all platforms except for lx_hybrid # # Those repositories rely on Genode's libc or contain device drivers. # Both prerequisites are not available for hybrid Linux/Genode programs. # ifneq ($(PLATFORM),lx_hybrid_x86) $(BUILD_DIR)/etc/build.conf:: @cat $(BUILD_CONF).optional >> $@ endif $(BUILD_DIR)/Makefile: @ln -sf $(GENODE_ABS_DIR)/tool/builddir/build.mk $@ # # Add 'ports-foc' repository to Fiasco.OC build directory # ifeq ($(filter-out foc_x86_32 foc_imx53 foc_pbxa9 foc_vea9x4 foc_panda foc_arndale,$(PLATFORM)),) $(BUILD_DIR)/etc/build.conf:: @cat $(BUILD_CONF).ports-foc >> $@ endif # # Add x86 drivers repositories to x86 build directories # ifeq ($(filter-out foc_x86_32 foc_x86_64 okl4_x86 nova_x86_32 nova_x86_64 pistachio_x86 fiasco_x86,$(PLATFORM)),) $(BUILD_DIR)/etc/build.conf:: @cat $(BUILD_CONF).drivers_x86 >> $@ endif # # Add ARM drivers repositories to ARM build directories # ifeq ($(filter-out foc_panda foc_arndale hw_panda hw_arndale hw_odroid_xu foc_imx53,$(PLATFORM)),) $(BUILD_DIR)/etc/build.conf:: @cat $(BUILD_CONF).drivers_arm >> $@ endif # # Generic platform dependencies # $(PLATFORM):: $(BUILD_DIR)/etc $(PLATFORM):: $(BUILD_DIR)/etc/build.conf $(PLATFORM):: $(BUILD_DIR)/Makefile # # Platform-specific dependencies # codezero_vpb926:: @echo "SPECS += codezero_platform_vpb926" > $(BUILD_DIR)/etc/specs.conf foc_x86_32:: @echo "SPECS = genode foc_x86_32" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += acpi" >> $(BUILD_DIR)/etc/specs.conf foc_x86_64:: @echo "SPECS = genode foc_x86_64" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += acpi" >> $(BUILD_DIR)/etc/specs.conf nova_x86_32:: @echo "SPECS = genode nova_x86_32" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += acpi" >> $(BUILD_DIR)/etc/specs.conf nova_x86_64:: @echo "SPECS = genode nova_x86_64" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += acpi" >> $(BUILD_DIR)/etc/specs.conf foc_pbxa9:: @echo "SPECS = genode foc_pbxa9" > $(BUILD_DIR)/etc/specs.conf foc_vea9x4:: @echo "SPECS = genode foc_vea9x4" > $(BUILD_DIR)/etc/specs.conf foc_panda:: @echo "SPECS = genode foc_panda" > $(BUILD_DIR)/etc/specs.conf foc_imx53:: @echo "SPECS = genode foc_imx53" > $(BUILD_DIR)/etc/specs.conf foc_arndale:: @echo "SPECS = genode foc_arndale" > $(BUILD_DIR)/etc/specs.conf codezero_vpb926:: @echo "CODEZERO_DIR = $(GENODE_DIR)/repos/base-codezero/contrib" > $(BUILD_DIR)/etc/codezero.conf # # On all other platforms, the performance counter is assumed to be active by # default. On HW, its activation is done by an optional core lib. To be # conform to the other platforms, opt it in by default and, e.g. for security # reasons, allow users to opt it out. # hw_pbxa9:: @echo "SPECS = genode hw_pbxa9" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += perf_counter" >> $(BUILD_DIR)/etc/specs.conf hw_vea9x4:: @echo "SPECS = genode hw_vea9x4" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += perf_counter" >> $(BUILD_DIR)/etc/specs.conf hw_panda:: @echo "SPECS = genode hw_panda" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += perf_counter" >> $(BUILD_DIR)/etc/specs.conf hw_imx53:: @echo "SPECS = genode hw_imx53" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += perf_counter" >> $(BUILD_DIR)/etc/specs.conf hw_imx53_tz:: @echo "SPECS = genode hw_imx53_tz" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += perf_counter" >> $(BUILD_DIR)/etc/specs.conf hw_arndale:: @echo "SPECS = genode hw_arndale" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += perf_counter" >> $(BUILD_DIR)/etc/specs.conf hw_rpi:: @echo "SPECS = genode hw_rpi" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += perf_counter" >> $(BUILD_DIR)/etc/specs.conf hw_odroid_xu:: @echo "SPECS = genode hw_odroid_xu" > $(BUILD_DIR)/etc/specs.conf @echo "SPECS += perf_counter" >> $(BUILD_DIR)/etc/specs.conf lx_hybrid_x86:: @echo "CROSS_DEV_PREFIX =" > $(BUILD_DIR)/etc/tools.conf @echo "SPECS += always_hybrid" >> $(BUILD_DIR)/etc/specs.conf $(PLATFORM):: @echo "Successfully created build directory at $(BUILD_DIR)." @echo "Please adjust $(BUILD_DIR)/etc/build.conf according to your needs." .PHONY: $(PLATFORM)