diff --git a/repos/base-sel4/lib/mk/spec/arm/kernel-sel4.inc b/repos/base-sel4/lib/mk/spec/arm/kernel-sel4.inc new file mode 100644 index 0000000000..90a5fcc5ff --- /dev/null +++ b/repos/base-sel4/lib/mk/spec/arm/kernel-sel4.inc @@ -0,0 +1,34 @@ +SEL4_DIR := $(call select_from_ports,sel4)/src/kernel/sel4 +TOOLS_DIR := $(call select_from_ports,sel4_tools)/src/tool/sel4_tools + +# +# Execute the kernel build only at the second build stage when we know +# about the complete build settings (e.g., the 'CROSS_DEV_PREFIX') and the +# current working directory is the library location. +# +ifeq ($(called_from_lib_mk),yes) +all: build_kernel +else +all: +endif + +elfloader/elfloader.o: + $(VERBOSE)cp -r $(TOOLS_DIR)/elfloader-tool $(LIB_CACHE_DIR)/$(LIB)/elfloader + $(VERBOSE)mkdir -p $(LIB_CACHE_DIR)/$(LIB)/elfloader/tools/kbuild + $(VERBOSE)mkdir -p $(LIB_CACHE_DIR)/$(LIB)/elfloader/include/generated + $(VERBOSE)ln -s $(TOOLS_DIR)/common-tool/common.mk $(LIB_CACHE_DIR)/$(LIB)/elfloader/ + $(VERBOSE)ln -s $(TOOLS_DIR)/common-tool/files_to_obj.sh $(LIB_CACHE_DIR)/$(LIB)/elfloader/ + $(VERBOSE)ln -s $(TOOLS_DIR)/kbuild-tool/Kbuild.include $(LIB_CACHE_DIR)/$(LIB)/elfloader/tools/kbuild/ + $(VERBOSE)ln -s $(SEL4_DIR)/configs/$(PLAT)/$(BOARD)/autoconf.h $(LIB_CACHE_DIR)/$(LIB)/elfloader/include/generated/ + $(VERBOSE)$(MAKE) -C $(LIB_CACHE_DIR)/$(LIB)/elfloader \ + TOOLPREFIX=$(CROSS_DEV_PREFIX) \ + ARCH=arm PLAT=$(PLAT) ARMV=armv7-a __ARM_32__="y" \ + CPU=$(CPU) ASFLAGS="-march=armv7-a" \ + CFLAGS="-march=armv7-a -D__KERNEL_32__ -fno-builtin" \ + SEL4_COMMON=. SOURCE_DIR=. STAGE_DIR=. srctree=. + +build_kernel: elfloader/elfloader.o + $(VERBOSE)$(MAKE) \ + TOOLPREFIX=$(CROSS_DEV_PREFIX) \ + BOARD=$(BOARD) ARCH=arm PLAT=$(PLAT) CPU=$(CPU) ARMV=armv7-a DEBUG=1 \ + SOURCE_ROOT=$(SEL4_DIR) -f$(SEL4_DIR)/Makefile diff --git a/repos/base-sel4/lib/mk/spec/imx6q_sabrelite/kernel-sel4.mk b/repos/base-sel4/lib/mk/spec/imx6q_sabrelite/kernel-sel4.mk index fd8cbaa526..370fbab880 100644 --- a/repos/base-sel4/lib/mk/spec/imx6q_sabrelite/kernel-sel4.mk +++ b/repos/base-sel4/lib/mk/spec/imx6q_sabrelite/kernel-sel4.mk @@ -1,32 +1,5 @@ -SEL4_DIR := $(call select_from_ports,sel4)/src/kernel/sel4 -ELFLOADER_DIR := $(call select_from_ports,sel4_elfloader)/src/tool/elfloader - -# -# Execute the kernel build only at the second build stage when we know -# about the complete build settings (e.g., the 'CROSS_DEV_PREFIX') and the -# current working directory is the library location. -# -ifeq ($(called_from_lib_mk),yes) -all: build_kernel -else -all: -endif - -elfloader/elfloader.o: - $(VERBOSE)cp -rf $(ELFLOADER_DIR) elfloader && \ - cd elfloader && \ - $(MAKE) \ - TOOLPREFIX=$(CROSS_DEV_PREFIX) \ - NK_ASFLAGS=-DARMV7_A \ - ARCH=arm PLAT=imx6 ARMV=armv7-a \ - SEL4_COMMON=$(LIB_CACHE_DIR)/$(LIB)/elfloader \ - SOURCE_DIR=$(LIB_CACHE_DIR)/$(LIB)/elfloader \ - STAGE_DIR=$(LIB_CACHE_DIR)/$(LIB)/elfloader \ - srctree=$(LIB_CACHE_DIR)/$(LIB)/elfloader - -build_kernel: elfloader/elfloader.o - $(VERBOSE)$(MAKE) \ - TOOLPREFIX=$(CROSS_DEV_PREFIX) \ - BOARD=imx6q_sabrelite ARCH=arm PLAT=imx6 CPU=cortex-a9 ARMV=armv7-a DEBUG=1 \ - SOURCE_ROOT=$(SEL4_DIR) -f$(SEL4_DIR)/Makefile +PLAT := imx6 +CPU := cortex-a9 +BOARD := imx6q_sabrelite +-include $(REP_DIR)/lib/mk/spec/arm/kernel-sel4.inc diff --git a/repos/base-sel4/ports/sel4_elfloader.hash b/repos/base-sel4/ports/sel4_elfloader.hash deleted file mode 100644 index 3c9bd134d4..0000000000 --- a/repos/base-sel4/ports/sel4_elfloader.hash +++ /dev/null @@ -1 +0,0 @@ -cf90c5aba6d10a0582d53ada6aed06c96ec585b5 diff --git a/repos/base-sel4/ports/sel4_elfloader.port b/repos/base-sel4/ports/sel4_elfloader.port deleted file mode 100644 index bd389839ae..0000000000 --- a/repos/base-sel4/ports/sel4_elfloader.port +++ /dev/null @@ -1,12 +0,0 @@ -LICENSE := GPLv2 -VERSION := git -DOWNLOADS := sel4_elfloader.git - -URL(sel4_elfloader) := https://github.com/alex-ab/elfloader-tool.git -# genode branch -REV(sel4_elfloader) := 5a12b40ef6be2e71a005e822d17a0b3af8c309bd -DIR(sel4_elfloader) := src/tool/elfloader - -$(call check_tool,python) - -PATCHES := $(wildcard $(REP_DIR)/patches/elfloader/*.patch) diff --git a/repos/base-sel4/ports/sel4_tools.hash b/repos/base-sel4/ports/sel4_tools.hash new file mode 100644 index 0000000000..08bae2e110 --- /dev/null +++ b/repos/base-sel4/ports/sel4_tools.hash @@ -0,0 +1 @@ +3b20dfecead271767ede321161ef471396c800f2 diff --git a/repos/base-sel4/ports/sel4_tools.port b/repos/base-sel4/ports/sel4_tools.port new file mode 100644 index 0000000000..e6cf256326 --- /dev/null +++ b/repos/base-sel4/ports/sel4_tools.port @@ -0,0 +1,10 @@ +LICENSE := GPLv2 +VERSION := git +DOWNLOADS := sel4_tools.git + +URL(sel4_tools) := https://github.com/skalk/seL4_tools.git +# Rev 9.0.x genode branch +REV(sel4_tools) := dd8068bfd4acfa2c3142398521c40bea093bbe04 +DIR(sel4_tools) := src/tool/sel4_tools + +$(call check_tool,python) diff --git a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/content.mk b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/content.mk index 79fcfb2979..4bcfd8679e 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/content.mk +++ b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/content.mk @@ -18,7 +18,7 @@ content: lib/import etc include/sel4 lib/import etc include/sel4: $(mirror_from_rep_dir) -content: src/tool/elfloader +content: src/tool/sel4_tools src/kernel: $(mirror_from_rep_dir) @@ -27,10 +27,10 @@ KERNEL_PORT_DIR := $(call port_dir,$(REP_DIR)/ports/sel4) src/kernel/sel4: src/kernel cp -r $(KERNEL_PORT_DIR)/src/kernel/sel4/* $@ -ELFLOADER_PORT_DIR := $(call port_dir,$(REP_DIR)/ports/sel4_elfloader) -src/tool/elfloader: src/kernel/sel4 +ELFLOADER_PORT_DIR := $(call port_dir,$(REP_DIR)/ports/sel4_tools) +src/tool/sel4_tools: src/kernel/sel4 mkdir -p $@ - cp -r $(ELFLOADER_PORT_DIR)/src/tool/elfloader/* $@ + cp -r $(ELFLOADER_PORT_DIR)/src/tool/sel4_tools/* $@ content: mv lib/mk/spec/arm/ld-sel4.mk lib/mk/spec/arm/ld.mk; diff --git a/tool/run/boot_dir/sel4 b/tool/run/boot_dir/sel4 index 76b79d4105..73440aa99b 100644 --- a/tool/run/boot_dir/sel4 +++ b/tool/run/boot_dir/sel4 @@ -98,11 +98,14 @@ proc run_boot_dir {binaries} { } # keep Genode image.elf as genode.elf exec mv [run_dir]/boot/image.elf [run_dir]/boot/genode.elf + exec mv [run_dir]/boot/sel4 [run_dir]/boot/kernel.elf # call seL4 elfloader tool to generate image.elf bootable by uboot with 'bootelf' command + set ::env(COMMON_PATH) [sel4_elfloader_dir] + set ::env(CPPFLAGS) -I[sel4_elfloader_dir]/include set ::env(PLAT) imx6 set ::env(TOOLPREFIX) [cross_dev_prefix] - exec [sel4_elfloader_dir]/gen_boot_image.sh [run_dir]/boot/sel4 [run_dir]/boot/genode.elf [run_dir]/boot/image.elf + exec [sel4_elfloader_dir]/gen_boot_image.sh [pwd]/[run_dir]/boot/kernel.elf [pwd]/[run_dir]/boot/genode.elf [pwd]/[run_dir]/boot/image.elf } run_image [run_dir]/boot/image.elf