8acc73d774
Phase 1 (Runtime Substrate): 4 check binaries, --probe, POSIX tests Phase 2 (Wayland Compositor): bounded scaffold, zero warnings Phase 3 (KWin Session): preflight checker (KWin stub, gated on Qt6Quick) Phase 4 (KDE Plasma): 18 KF6 enabled, preflight checker Phase 5 (Hardware GPU): DRM/firmware/Mesa preflight checker Build: zero warnings, all scripts syntax-clean. Oracle-verified.
132 lines
4.8 KiB
Makefile
132 lines
4.8 KiB
Makefile
TARGET ?= x86_64-unknown-redox
|
|
LINKER ?= $(shell redoxer env which $(shell redoxer env printenv LD))
|
|
BOARD ?=
|
|
BUILD_TYPE ?= release
|
|
BUILD_FLAGS ?= --release
|
|
CARGO ?= redoxer
|
|
CARGO_HOST ?= env -u CARGO -u RUSTFLAGS cargo
|
|
|
|
SRC_DIR ?= $(CURDIR)
|
|
BUILD_DIR ?= $(shell pwd)/target/$(TARGET)/build
|
|
DESTDIR ?= ./sysroot
|
|
SYSROOT ?= $(shell pwd)/target/$(TARGET)/sysroot
|
|
TARGET_DIR = $(BUILD_DIR)/$(TARGET)/$(BUILD_TYPE)
|
|
BUILD_FLAGS += --target-dir $(BUILD_DIR)
|
|
|
|
INITFS_BINS = init logd ramfs randd zerod \
|
|
acpid fbbootlogd fbcond hwd inputd lived \
|
|
pcid pcid-spawner rtcd vesad
|
|
INITFS_DRIVERS_BINS = nvmed virtio-blkd virtio-gpud
|
|
BASE_BINS = inputd pcid pcid-spawner redoxerd audiod dhcpd ipcd ptyd netstack
|
|
DRIVERS_BINS = e1000d ihdad ihdgd ixgbed rtl8139d rtl8168d \
|
|
usbctl usbhidd usbhubd usbscsid virtio-netd xhcid
|
|
|
|
ifneq (,$(filter i586-unknown-redox i686-unknown-redox x86_64-unknown-redox,$(TARGET)))
|
|
INITFS_BINS += ps2d
|
|
INITFS_DRIVERS_BINS += ahcid ided
|
|
DRIVERS_BINS += ac97d sb16d vboxd
|
|
endif
|
|
|
|
ifeq ($(TARGET),aarch64-unknown-redox)
|
|
ifeq ($(BOARD),raspi3b)
|
|
INITFS_BINS += bcm2835-sdhcid
|
|
endif
|
|
endif
|
|
|
|
INITFS_CARGO_ARGS = $(foreach bin,$(INITFS_BINS),-p $(bin))
|
|
INITFS_DRIVERS_CARGO_ARGS = $(foreach bin,$(INITFS_DRIVERS_BINS),-p $(bin))
|
|
BASE_CARGO_ARGS = $(foreach bin,$(BASE_BINS),-p $(bin))
|
|
DRIVERS_CARGO_ARGS = $(foreach bin,$(DRIVERS_BINS),-p $(bin))
|
|
|
|
.PHONY: all base install install-base test
|
|
|
|
all: base
|
|
install: install-base
|
|
|
|
clean:
|
|
rm -rf $(SRC_DIR)/target $(SRC_DIR)/sysroot $(SYSROOT) $(TARGET_DIR)
|
|
|
|
# test if booting
|
|
test: all
|
|
$(MAKE) install
|
|
redoxer exec --folder ./sysroot/:/ true
|
|
|
|
# test with interactive gui
|
|
test-gui: all
|
|
$(MAKE) install
|
|
redoxer exec --gui --folder ./sysroot/:/ ion
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# base
|
|
# -----------------------------------------------------------------------------
|
|
$(SYSROOT)/bin/redoxfs:
|
|
REDOXER_SYSROOT=$(SYSROOT) redoxer pkg redoxfs
|
|
|
|
base:
|
|
@mkdir -pv "$(BUILD_DIR)"
|
|
# Build daemons and drivers
|
|
CARGO_PROFILE_RELEASE_OPT_LEVEL=s CARGO_PROFILE_RELEASE_PANIC=abort \
|
|
$(CARGO) build $(BUILD_FLAGS) \
|
|
--manifest-path "$(SRC_DIR)/Cargo.toml" \
|
|
$(BASE_CARGO_ARGS) $(DRIVERS_CARGO_ARGS)
|
|
# Build initfs daemons and drivers
|
|
# FIXME fix whatever issue (feature unification?) causes most logs to be omitted
|
|
# if this is merged with the above build command.
|
|
CARGO_PROFILE_RELEASE_OPT_LEVEL=s CARGO_PROFILE_RELEASE_PANIC=abort \
|
|
$(CARGO) build $(BUILD_FLAGS) \
|
|
--manifest-path "$(SRC_DIR)/Cargo.toml" \
|
|
$(INITFS_CARGO_ARGS) $(INITFS_DRIVERS_CARGO_ARGS)
|
|
# Build bootstrap
|
|
cd "$(SRC_DIR)/bootstrap" && $(CARGO) rustc $(BUILD_FLAGS) \
|
|
-- -Ctarget-feature=+crt-static -Clinker="$(LINKER)"
|
|
|
|
install-base: base $(SYSROOT)/bin/redoxfs
|
|
@mkdir -pv "$(DESTDIR)/usr/bin" "$(DESTDIR)/usr/lib/drivers"
|
|
# Distribute binaries
|
|
@for bin in $(BASE_BINS); do \
|
|
cp -v "$(TARGET_DIR)/$$bin" "$(DESTDIR)/usr/bin"; \
|
|
done
|
|
@for bin in $(DRIVERS_BINS); do \
|
|
cp -v "$(TARGET_DIR)/$$bin" "$(DESTDIR)/usr/lib/drivers"; \
|
|
done
|
|
# Copy configurations
|
|
@mkdir -pv "$(DESTDIR)/usr/lib/init.d/" "$(DESTDIR)/usr/lib/pcid.d/" "$(DESTDIR)/usr/lib/xhcid.d/"
|
|
@cp -v "$(SRC_DIR)/init.d"/* "$(DESTDIR)/usr/lib/init.d/"
|
|
@find "$(SRC_DIR)/drivers" -maxdepth 3 -type f -name 'config.toml' | while read -r conf; do \
|
|
driver=$$(basename "$$(dirname "$$conf")"); \
|
|
cp -v "$$conf" "$(DESTDIR)/usr/lib/pcid.d/$$driver.toml"; \
|
|
done
|
|
@cp -v "$(SRC_DIR)/drivers/usb/xhcid/drivers.toml" "$(DESTDIR)/usr/lib/xhcid.d/"
|
|
|
|
rm -rf "$(BUILD_DIR)/initfs"
|
|
# Distribute initfs binaries
|
|
@mkdir -pv "$(BUILD_DIR)/initfs/bin" "$(BUILD_DIR)/initfs/lib/drivers"
|
|
for bin in $(INITFS_BINS); do \
|
|
cp -v "$(TARGET_DIR)/$$bin" "$(BUILD_DIR)/initfs/bin"; \
|
|
done
|
|
for bin in $(INITFS_DRIVERS_BINS); do \
|
|
cp -v "$(TARGET_DIR)/$$bin" "$(BUILD_DIR)/initfs/lib/drivers"; \
|
|
done
|
|
cp "$(SYSROOT)/bin/redoxfs" "$(BUILD_DIR)/initfs/bin"
|
|
# Copy initfs config files
|
|
@mkdir -p "$(BUILD_DIR)/initfs/lib/init.d" "$(BUILD_DIR)/initfs/lib/pcid.d"
|
|
cp "$(SRC_DIR)/init.initfs.d"/* "$(BUILD_DIR)/initfs/lib/init.d/"
|
|
cp "$(SRC_DIR)/drivers/initfs.toml" "$(BUILD_DIR)/initfs/lib/pcid.d/initfs.toml"
|
|
# Build initfs
|
|
$(CARGO_HOST) run --manifest-path "$(SRC_DIR)/initfs/tools/Cargo.toml" --bin redox-initfs-ar -- \
|
|
"$(BUILD_DIR)/initfs" "$(TARGET_DIR)/bootstrap" -o "$(BUILD_DIR)/initfs.img"
|
|
# Distribute initfs
|
|
@mkdir -pv "$(DESTDIR)/usr/lib/boot"
|
|
cp -v "$(BUILD_DIR)/initfs.img" "$(DESTDIR)/usr/lib/boot/initfs"
|
|
|
|
# Device file symlinks
|
|
@mkdir -pv "$(DESTDIR)/dev"
|
|
ln -s /scheme/null $(DESTDIR)/dev/null
|
|
ln -s /scheme/rand $(DESTDIR)/dev/random
|
|
ln -s /scheme/rand $(DESTDIR)/dev/urandom
|
|
ln -s /scheme/zero $(DESTDIR)/dev/zero
|
|
ln -s libc:tty $(DESTDIR)/dev/tty
|
|
ln -s libc:stdin $(DESTDIR)/dev/stdin
|
|
ln -s libc:stdout $(DESTDIR)/dev/stdout
|
|
ln -s libc:stderr $(DESTDIR)/dev/stderr
|