mirror of
https://github.com/mmueller41/genode.git
synced 2026-01-21 12:32:56 +01:00
This commit fixes two issues with the timeout lib and the base-hw src recipe: * Add source files of timeout lib to recipe content. The files weren't copied to the depot until now. However, the archive nonetheless built successfully because of the second issue that is described below. * Get rid of the usage of the BASE_DIR variable in the timeout lib. The BASE_DIR variable always resolves to the repos/base directory even when building in a depot. That said, the use of BASE_DIR in make-files that are not part of the build system itself must be avoided. Instead, REP_DIR, REP_INC_DIR, and $(call select_from_repositories, ...) should be used. Ref #4209
207 lines
6.7 KiB
PHP
207 lines
6.7 KiB
PHP
#
|
|
# Before including this file, the CONTENT variable may contain a list of
|
|
# repository-relative paths of content to include in the src archive in
|
|
# addition to the default content inferred for the given board.
|
|
#
|
|
|
|
|
|
#
|
|
# Determine board name from the path to the src recipe's content.mk file
|
|
#
|
|
|
|
# obtain directory name of src recipe w/o trailing slash
|
|
_BOARD := $(CONTENT_MK:/content.mk=)
|
|
|
|
# strip all leading path elements, keeping only the src-recipe name
|
|
_BOARD := $(notdir $(_BOARD))
|
|
|
|
# remove "base-hw-" part of the src-recipe name, keeping only the board name
|
|
BOARD := $(patsubst base-hw-%,%,$(_BOARD))
|
|
|
|
|
|
#
|
|
# Selection of ARCH-specific subdirectories and files
|
|
#
|
|
|
|
LIB_MK_SPECS(arm_v6) := arm arm_v6
|
|
LIB_MK_SPECS(arm_v7a) := arm arm_v7 cortex_a8 cortex_a9 cortex_a15
|
|
LIB_MK_SPECS(arm_v8a) := arm_64 arm_v8
|
|
LIB_MK_SPECS(x86_64) := x86_64
|
|
LIB_MK_SPECS(riscv) := riscv
|
|
|
|
SRC_BOOTSTRAP_SPECS(arm_v6) := arm
|
|
SRC_BOOTSTRAP_SPECS(arm_v7a) := arm
|
|
SRC_BOOTSTRAP_SPECS(arm_v8a) := arm_64 arm
|
|
SRC_BOOTSTRAP_SPECS(x86_64) := x86_64
|
|
SRC_BOOTSTRAP_SPECS(riscv) := riscv
|
|
|
|
SRC_CORE_SPECS(arm_v6) := arm arm_v6
|
|
SRC_CORE_SPECS(arm_v7a) := arm arm_v7 cortex_a8 cortex_a9 cortex_a15
|
|
SRC_CORE_SPECS(arm_v8a) := arm arm_v8
|
|
SRC_CORE_SPECS(x86_64) := x86 x86_64
|
|
SRC_CORE_SPECS(riscv) := riscv
|
|
|
|
SRC_INCLUDE_HW_SPECS(arm_v6) := arm
|
|
SRC_INCLUDE_HW_SPECS(arm_v7a) := arm
|
|
SRC_INCLUDE_HW_SPECS(arm_v8a) := arm arm_64
|
|
SRC_INCLUDE_HW_SPECS(x86_64) := x86_64
|
|
SRC_INCLUDE_HW_SPECS(riscv) := riscv
|
|
|
|
SRC_LIB_BASE_SPECS(arm_v6) := arm
|
|
SRC_LIB_BASE_SPECS(arm_v7a) := arm
|
|
SRC_LIB_BASE_SPECS(arm_v8a) := arm_64
|
|
SRC_LIB_BASE_SPECS(x86_64) := x86_64
|
|
SRC_LIB_BASE_SPECS(riscv) := riscv
|
|
|
|
SRC_LIB_STARTUP_SPECS(arm_v6) := arm
|
|
SRC_LIB_STARTUP_SPECS(arm_v7a) := arm
|
|
SRC_LIB_STARTUP_SPECS(arm_v8a) := arm_64
|
|
SRC_LIB_STARTUP_SPECS(x86_64) := x86_64
|
|
SRC_LIB_STARTUP_SPECS(riscv) := riscv
|
|
|
|
# location of hw-ld.mk file
|
|
LD_MK_DIRS(arm_v6) := lib/mk/spec/arm
|
|
LD_MK_DIRS(arm_v7a) := lib/mk/spec/arm
|
|
LD_MK_DIRS(arm_v8a) := lib/mk/spec/arm_v8
|
|
LD_MK_DIRS(x86_64) := lib/mk/spec/x86_64
|
|
LD_MK_DIRS(riscv) := lib/mk/spec/riscv
|
|
|
|
|
|
#
|
|
# Defermine CPU architecture for the given BOARD
|
|
#
|
|
|
|
BOARD_ARCH_PATH := $(REP_DIR)/board/$(BOARD)/arch
|
|
|
|
ifeq ($(wildcard $(BOARD_ARCH_PATH)),)
|
|
content: arch_undefined
|
|
arch_undefined:
|
|
echo -n "\nError: CPU architecure for board $(BOARD) undefined\n\n" \
|
|
" missing file $(BOARD_ARCH_PATH)\n\n"
|
|
false
|
|
else
|
|
SHELL := bash
|
|
ARCHS := $(sort $(shell cat $(BOARD_ARCH_PATH)))
|
|
endif
|
|
|
|
|
|
#
|
|
# Enumeration of package content
|
|
#
|
|
|
|
#
|
|
# Function to obtain the content for the board's supported architectures
|
|
#
|
|
# The parameter is the variable name for one of the subdirectories defined
|
|
# above. The 'sort' is merely used to remove duplicates.
|
|
#
|
|
selected_content = $(sort $(foreach A,$(ARCHS),${$1($A)}))
|
|
|
|
BASE_DIR := $(GENODE_DIR)/repos/base
|
|
BASE_HW_DIR := $(GENODE_DIR)/repos/base-hw
|
|
|
|
SRC_TIMER := target.inc include hw main.cc
|
|
|
|
SRC_INCLUDE_HW += $(notdir $(wildcard $(BASE_HW_DIR)/src/include/hw/*.h)) \
|
|
$(addprefix spec/,${call selected_content,SRC_INCLUDE_HW_SPECS}) \
|
|
uart
|
|
|
|
SRC_BOOTSTRAP += hw env.cc init.cc lock.cc log.cc thread.cc \
|
|
platform.cc platform.h \
|
|
$(addprefix spec/,${call selected_content,SRC_BOOTSTRAP_SPECS}) \
|
|
$(addprefix board/,$(BOARD))
|
|
|
|
SRC_LIB_BASE += $(notdir $(wildcard $(BASE_HW_DIR)/src/lib/base/*.cc)) \
|
|
$(notdir $(wildcard $(BASE_DIR)/src/lib/base/*.cc)) \
|
|
${call selected_content,SRC_LIB_BASE_SPECS}
|
|
|
|
SRC_LIB_TIMEOUT += duration.cc \
|
|
hw/timer_connection_timestamp.cc \
|
|
timeout.cc \
|
|
timer_connection.cc \
|
|
timer_connection_time.cc
|
|
|
|
SRC_LIB_STARTUP += init_main_thread.cc _main.cc \
|
|
$(addprefix spec/,${call selected_content,SRC_LIB_STARTUP_SPECS})
|
|
|
|
SRC_CORE += $(notdir $(wildcard $(BASE_HW_DIR)/src/core/*.cc)) \
|
|
$(notdir $(wildcard $(BASE_HW_DIR)/src/core/*.h)) \
|
|
$(notdir $(wildcard $(BASE_DIR)/src/core/*.cc)) \
|
|
$(addprefix spec/,${call selected_content,SRC_CORE_SPECS}) \
|
|
$(addprefix board/,$(BOARD)) \
|
|
version.inc target.inc include hw kernel
|
|
|
|
# names of the lib/mk/ files to consider for inclusion in the src archive
|
|
LIB_MK_FILES := base-common.inc base-hw-common.mk \
|
|
base.inc base-hw.mk \
|
|
bootstrap-hw.inc bootstrap-hw-$(BOARD).inc bootstrap-hw-$(BOARD).mk \
|
|
core-hw.inc core-hw-$(BOARD).inc core-hw-$(BOARD).mk \
|
|
startup.inc startup-hw.mk \
|
|
timeout-hw.mk cxx.mk ld-hw.mk syscall-hw.mk
|
|
|
|
LIB_MK_DIRS := lib/mk $(addprefix lib/mk/spec/,${call selected_content,LIB_MK_SPECS})
|
|
|
|
CONTENT += $(foreach D,$(LIB_MK_DIRS),$(addprefix $D/,$(LIB_MK_FILES)))
|
|
|
|
CONTENT += $(addprefix src/timer/,$(SRC_TIMER)) \
|
|
$(addprefix src/include/hw/,$(SRC_INCLUDE_HW)) \
|
|
$(addprefix src/bootstrap/,$(SRC_BOOTSTRAP)) \
|
|
$(addprefix lib/mk/,$(LIB_MK)) \
|
|
$(addprefix src/lib/base/,$(SRC_LIB_BASE)) \
|
|
$(addprefix src/lib/timeout/,$(SRC_LIB_TIMEOUT)) \
|
|
$(addprefix src/lib/startup/,$(SRC_LIB_STARTUP)) \
|
|
$(addprefix src/core/,$(SRC_CORE)) \
|
|
src/lib/hw src/lib/ld src/lib/cxx \
|
|
src/include/base/internal src/include/pager \
|
|
src/include/hw_native_vcpu \
|
|
include/drivers/uart
|
|
|
|
# remove duplicates
|
|
CONTENT := $(sort $(CONTENT))
|
|
|
|
|
|
#
|
|
# Utilities to aggregate content from base, base-hw, and rep directories
|
|
#
|
|
|
|
_try_mirror_from = $(if $(wildcard $1/$2),mkdir -p $(dir $2); cp -r $1/$2 $(dir $2))
|
|
|
|
mirror_from_base_dir = $(call _try_mirror_from,$(GENODE_DIR)/repos/base,$@)
|
|
mirror_from_base_hw_dir = $(call _try_mirror_from,$(GENODE_DIR)/repos/base-hw,$@)
|
|
mirror_from_rep_dir = $(call _try_mirror_from,$(REP_DIR),$@)
|
|
|
|
|
|
#
|
|
# Rules
|
|
#
|
|
|
|
content: $(CONTENT)
|
|
|
|
$(CONTENT):
|
|
$(mirror_from_base_dir)
|
|
$(mirror_from_base_hw_dir)
|
|
$(mirror_from_rep_dir)
|
|
|
|
content: LICENSE
|
|
LICENSE:
|
|
cp $(GENODE_DIR)/LICENSE $@
|
|
|
|
content: etc/specs.conf
|
|
etc/specs.conf:
|
|
$(mirror_from_base_hw_dir)
|
|
|
|
content: generalize_target_names
|
|
generalize_target_names: $(CONTENT)
|
|
# apply kernel-agnostic convention of naming the timer and ld.lib.so
|
|
for subdir in ${call selected_content,LD_MK_DIRS}; do \
|
|
mv $$subdir/ld-hw.mk $$subdir/ld.mk; done
|
|
sed -i "s/hw_timer_drv/timer/" src/timer/hw/target.mk
|
|
# supplement BOARD definition that normally comes form the build dir
|
|
sed -i "s/\?= unknown/:= $(BOARD)/" src/core/hw/target.mk
|
|
sed -i "s/\?= unknown/:= $(BOARD)/" src/bootstrap/hw/target.mk
|
|
# discharge targets when building for mismatching architecture
|
|
sed -i "1aREQUIRES := $(ARCH)" src/core/hw/target.mk
|
|
sed -i "1aREQUIRES := $(ARCH)" src/bootstrap/hw/target.mk
|
|
sed -i "/REQUIRES/s/hw/hw $(ARCH)/" src/timer/hw/target.mk
|
|
|