Files
moslab-code/Makefile
2025-09-12 15:55:45 +02:00

183 lines
8.7 KiB
Makefile

SHELL = env bash
all:
@if [ -d obj ]; then \
$(MAKE) build_all; \
else \
echo "Call 'make setup' once for initial setup." ; \
exit 1; \
fi
clean:
@$(RM) -r obj pre-built-images
setup:
@+if [ -d obj ]; then \
echo "Snapshot has already been setup. Proceed with 'make setup' or 'make clean'."; \
else \
export PATH=$$(pwd)/bin:$$PATH; \
chmod +x ./bin/setup.d/*; \
for binary in bin/setup.d/*; do \
./$$binary config || exit 1; \
done; \
for binary in bin/setup.d/*; do \
./$$binary setup || exit 1; \
done; \
echo ====================================================================; \
echo ; \
echo Your L4Re tree is set up now. Type 'make' to build the tree. This; \
echo will take some time \(depending on the speed of your host system, of; \
echo course\).; \
echo ; \
echo Boot-images for ARM targets will be placed into obj/l4/arm-*/images.; \
echo Boot-images for MIPS targets will be placed into obj/l4/mips32/images.; \
echo Check obj/l4/.../conf/Makeconf.boot for path configuration during image builds.; \
echo ; \
fi
build_all: build_fiasco build_l4re build_l4linux
#.NOTPARALLEL: build_fiasco build_l4re build_l4linux build_images build_all
build_fiasco: $(addsuffix /fiasco,$(wildcard obj/fiasco/*))
build_l4re: $(addsuffix /l4defs.mk.inc,$(wildcard obj/l4/*))
build_l4linux: $(addsuffix /vmlinux,$(wildcard obj/l4linux/*))
$(addsuffix /fiasco,$(wildcard obj/fiasco/*)):
$(MAKE) -C $(@D)
$(addsuffix /l4defs.mk.inc,$(wildcard obj/l4/*)):
$(MAKE) -C $(@D)
obj/l4linux/amd64/vmlinux: obj/l4/amd64/l4defs.mk.inc
$(MAKE) -C src/l4linux O=$(abspath $(@D)) x86_64-mp_vPCI_defconfig
src/l4linux/scripts/config --file $(@D)/.config \
--set-str L4_OBJ_TREE $(abspath obj/l4/amd64)
# temporary quick fix
src/l4linux/scripts/config --file $(@D)/.config -e PCI -e L4_VPCI
$(MAKE) -C $(@D) olddefconfig
$(MAKE) -C $(@D)
obj/l4linux/ux/vmlinux: obj/l4/x86/l4defs.mk.inc
$(MAKE) -C src/l4linux O=$(abspath $(@D)) x86_32-ux_defconfig
src/l4linux/scripts/config --file $(@D)/.config \
--set-str L4_OBJ_TREE $(abspath obj/l4/x86)
$(MAKE) -C $(@D)
obj/l4linux/arm-mp/vmlinux: obj/l4/arm-v7/l4defs.mk.inc
+. obj/.config && $(MAKE) -C src/l4linux L4ARCH=arm \
CROSS_COMPILE=$$CROSS_COMPILE_ARM \
O=$(abspath $(@D)) arm-mp_defconfig
src/l4linux/scripts/config --file $(@D)/.config \
--set-str L4_OBJ_TREE $(abspath obj/l4/arm-v7)
+. obj/.config && $(MAKE) -C $(@D) CROSS_COMPILE=$$CROSS_COMPILE_ARM
obj/l4linux/arm-up/vmlinux: obj/l4/arm-v7/l4defs.mk.inc
+. obj/.config && $(MAKE) -C src/l4linux L4ARCH=arm \
CROSS_COMPILE=$$CROSS_COMPILE_ARM \
O=$(abspath $(@D)) arm_defconfig
src/l4linux/scripts/config --file $(@D)/.config \
--set-str L4_OBJ_TREE $(abspath obj/l4/arm-v7)
+. obj/.config && $(MAKE) -C $(@D) CROSS_COMPILE=$$CROSS_COMPILE_ARM
obj/l4linux/arm64/vmlinux: obj/l4/arm64/l4defs.mk.inc
+. obj/.config && $(MAKE) -C src/l4linux L4ARCH=arm64 \
CROSS_COMPILE=$$CROSS_COMPILE_ARM64 \
O=$(abspath $(@D)) arm64_defconfig
src/l4linux/scripts/config --file $(@D)/.config \
--set-str L4_OBJ_TREE $(abspath obj/l4/arm64)
+. obj/.config && $(MAKE) -C $(@D) CROSS_COMPILE=$$CROSS_COMPILE_ARM64
build_images: build_l4linux build_l4re build_fiasco
@echo "=============== Building Images ==============================="
@+set -e; \
export PATH=$$(pwd)/bin:$$PATH; \
[ -e obj/.config ] && . obj/.config; \
cd obj/l4; \
for d in *; do \
if [ -d "$$d" -a -e $$d/.imagebuilds ]; then \
cat $$d/.imagebuilds | while read args; do \
# Do EFI first, because the EFI build process also generates \
# an ELF file which is PIE and linked to 0 despite of any target \
# link address. \
if [ "$$d" = "amd64" ]; then \
$(MAKE) -C $$d efiimage $$args; \
fi; \
if [ "$$d" = "arm64" ]; then \
case "$$args" in \
*PT=arm_sbsa*) $(MAKE) -C $$d efiimage $$args;; \
esac; \
fi; \
if [ "$$d" != "amd64" -a "$$d" != "x86" ]; then \
$(MAKE) -C $$d uimage $$args; \
fi; \
$(MAKE) -C $$d elfimage $$args; \
if [ "$$d" = "amd64" -o "$$d" = "x86" ]; then \
if [ -z "$(GRUB_INST_PATH)" ]; then \
echo "Need to specify GRUB_INST_PATH"; exit 1; \
fi; \
PATH=$(GRUB_INST_PATH)/efi/bin:$$PATH $(MAKE) -C $$d grub2iso ISONAME_SUFFIX=.efi.iso $$args; \
PATH=$(GRUB_INST_PATH)/pc/bin:$$PATH $(MAKE) -C $$d grub2iso ISONAME_SUFFIX=.pc.iso $$args; \
fi; \
done; \
fi; \
done
@echo "=============== Build done ===================================="
gen_prebuilt: copy_prebuilt pre-built-images/l4image
copy_prebuilt2: build_images
@echo "Creating pre-built image directory"
@set -e; \
@cd obj/l4; \
for arch in *; do \
for i in $$arch/images/*; do \
if [ "$$arch" = "amd64" -o "$$arch" = "x86" ]; then \
mkdir -p ../../pre-built-images/$$arch; \
if [ -d $$i ]; then \
for f in $$i/*.elf; do \
cp $$f ../../pre-built-images/$$arch; \
done; \
fi; \
else \
if [ -d $$i ]; then \
pt=$${i#$$arch/images/}; \
mkdir -p ../../pre-built-images/$$arch/$$pt; \
for f in $$i/*.elf $$i/*.uimage; do \
cp $$f ../../pre-built-images/$$arch/$$pt; \
done; \
fi; \
fi; \
done; \
done
copy_prebuilt: build_images
@echo "Creating pre-built image directory"
@set -e; \
cd obj/l4; \
for arch in *; do \
mkdir -p ../../pre-built-images/$$arch; \
for i in $$arch/images/l4re_*.elf \
$$arch/images/l4re_*.efi \
$$arch/images/l4re_*.uimage; do \
[ -e $$i ] || continue; \
cp $$i ../../pre-built-images/$$arch; \
done; \
done
pre-built-images/l4image:
@echo Creating $@
@src/l4/tool/bin/l4image --create-l4image-binary $@
help:
@echo "Targets:"
@echo " all"
@echo " setup"
@echo " build_images"
@echo " gen_prebuilt"
.PHONY: setup all build_all clean help \
build_images build_fiasco build_l4re build_l4linux