9880e0a5b2
Consolidate the active desktop path around redbear-full while landing the greeter/session stack and the runtime fixes needed to keep Wayland and KWin bring-up moving forward.
215 lines
6.1 KiB
Makefile
215 lines
6.1 KiB
Makefile
# Configuration file of the build system environment variables
|
|
|
|
-include .config
|
|
|
|
HOST_ARCH?=$(shell uname -m)
|
|
|
|
# Configuration
|
|
## Architecture to build Red Bear OS for (aarch64, i586, or x86_64). Defaults to a host one
|
|
ARCH?=$(HOST_ARCH)
|
|
## Sub-device type for aarch64 if needed
|
|
BOARD?=
|
|
## Enable to use binary prefix (much faster)
|
|
PREFIX_BINARY?=1
|
|
## Enable to use up-to-date rust compiler (experimental, only available to Tier 2 targets)
|
|
## Even more experimental, add -Zbuild-std to cookbook.toml to allow compilation to Tier 3 targets
|
|
PREFIX_USE_UPSTREAM_RUST_COMPILER?=0
|
|
## Enable to use binary packages (much faster)
|
|
REPO_BINARY?=0
|
|
## Name of the configuration to include in the image name e.g. desktop or server.
|
|
## Red Bear's tracked default desktop target is redbear-full. Runtime claims remain evidence-qualified
|
|
## until compositor/session proof is strong enough for broader support language.
|
|
CONFIG_NAME?=redbear-full
|
|
## Build appstream data for repo
|
|
REPO_APPSTREAM?=0
|
|
## Ignore errors when building the repo, attempt to build every package
|
|
REPO_NONSTOP?=0
|
|
## Do not update source repos, attempt to build in offline condition
|
|
REPO_OFFLINE?=0
|
|
## Do not strip debug info for local build
|
|
REPO_DEBUG?=0
|
|
## Old config value that need to be corrected
|
|
ifeq ($(ARCH),i686)
|
|
ARCH=i586
|
|
endif
|
|
## Select filesystem config
|
|
ifeq ($(BOARD),)
|
|
ifeq ($(wildcard config/$(ARCH)/$(CONFIG_NAME).toml),)
|
|
FILESYSTEM_CONFIG?=config/$(CONFIG_NAME).toml
|
|
else
|
|
FILESYSTEM_CONFIG?=config/$(ARCH)/$(CONFIG_NAME).toml
|
|
endif
|
|
else
|
|
FILESYSTEM_CONFIG?=config/$(ARCH)/$(BOARD)/$(CONFIG_NAME).toml
|
|
endif
|
|
HOST_CARGO=env -u RUSTUP_TOOLCHAIN -u CC -u TARGET cargo
|
|
## Filesystem size in MB (default comes from filesystem_size in the FILESYSTEM_CONFIG)
|
|
## FILESYSTEM_SIZE?=$(shell $(INSTALLER) --filesystem-size -c $(FILESYSTEM_CONFIG))
|
|
## Flags to pass to redoxfs-mkfs. Add --encrypt to set up disk encryption
|
|
REDOXFS_MKFS_FLAGS?=
|
|
## Set to 1 to enable Podman build, any other value will disable it
|
|
PODMAN_BUILD?=1
|
|
## Set to 1 to put filesystem tools inside podman, any other value will install it to host
|
|
FSTOOLS_IN_PODMAN?=0
|
|
## Set to 1 if FUSE is not available and we are running in a container
|
|
FSTOOLS_NO_MOUNT?=0
|
|
## Enable sccache to speed up cargo builds
|
|
## only do this by default if this is inside podman
|
|
SCCACHE_BUILD?=$(shell [ -f /run/.containerenv ] && echo 1 || echo 0)
|
|
## The containerfile to use for the Podman base image
|
|
CONTAINERFILE?=podman/redox-base-containerfile
|
|
|
|
# Per host variables
|
|
NPROC=nproc
|
|
SED=sed
|
|
FIND=find
|
|
REPO_BIN=./target/release/repo
|
|
|
|
ifneq ($(PODMAN_BUILD),1)
|
|
FSTOOLS_IN_PODMAN=0
|
|
HOST_TARGET := $(shell env -u RUSTUP_TOOLCHAIN rustc -vV | grep host | cut -d: -f2 | tr -d " ")
|
|
# x86_64 linux hosts have all toolchains
|
|
ifeq ($(PREFIX_BINARY),1)
|
|
ifeq ($(HOST_TARGET),aarch64-unknown-linux-gnu)
|
|
ifneq ($(ARCH),aarch64)
|
|
ifneq ($(ARCH),x86_64)
|
|
$(info The $(ARCH) binary prefix is only built for x86_64 Linux hosts)
|
|
PREFIX_BINARY=0
|
|
endif
|
|
endif
|
|
else ifeq ($(HOST_TARGET),x86_64-unknown-linux-gnu)
|
|
else
|
|
$(info The $(ARCH) binary prefix is only built for Linux hosts)
|
|
PREFIX_BINARY=0
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(SCCACHE_BUILD),1)
|
|
ifeq (,$(shell command -v sccache))
|
|
$(info sccache not found in PATH)
|
|
SCCACHE_BUILD=0
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(REPO_APPSTREAM),1)
|
|
export COOKBOOK_APPSTREAM=true
|
|
endif
|
|
ifeq ($(REPO_NONSTOP),1)
|
|
export COOKBOOK_NONSTOP=true
|
|
endif
|
|
ifeq ($(REPO_OFFLINE),1)
|
|
export COOKBOOK_OFFLINE=true
|
|
endif
|
|
ifeq ($(REPO_DEBUG),1)
|
|
export COOKBOOK_NOSTRIP=true
|
|
export COOKBOOK_DEBUG=true
|
|
#TODO: https://gitlab.redox-os.org/redox-os/relibc/-/issues/226
|
|
# export PROFILE=debug
|
|
# export RUSTCFLAGS="-Cdebuginfo=2"
|
|
endif
|
|
|
|
UNAME := $(shell uname)
|
|
ifeq ($(UNAME),Darwin)
|
|
FUMOUNT=umount
|
|
NPROC=sysctl -n hw.ncpu
|
|
SED=gsed
|
|
FIND=gfind
|
|
VB_AUDIO=coreaudio
|
|
VBM=/Applications/VirtualBox.app/Contents/MacOS/VBoxManage
|
|
else ifeq ($(UNAME),FreeBSD)
|
|
FIND=gfind
|
|
FUMOUNT=sudo umount
|
|
VB_AUDIO=pulse # To check, will probably be OSS on most setups
|
|
VBM=VBoxManage
|
|
else ifeq ($(UNAME),Redox)
|
|
PODMAN_BUILD=0
|
|
# TODO: allow overriding to cross compiler toolchain when build server have one prebuilt
|
|
HOSTED_REDOX=1
|
|
ifneq ($(shell which repo),)
|
|
REPO_BIN=repo
|
|
endif
|
|
else
|
|
# Detect which version of the fusermount binary is available.
|
|
ifneq (, $(shell which fusermount3))
|
|
FUMOUNT=fusermount3 -u
|
|
else
|
|
FUMOUNT=fusermount -u
|
|
endif
|
|
|
|
VB_AUDIO=pulse
|
|
VBM=VBoxManage
|
|
endif
|
|
|
|
# Automatic variables
|
|
ROOT=$(CURDIR)
|
|
export RUST_COMPILER_RT_ROOT=$(ROOT)/rust/src/llvm-project/compiler-rt
|
|
export TESTBIN?=
|
|
RUNNING_IN_PODMAN=$(shell [ -f /run/.containerenv ] && echo 1 || echo 0)
|
|
ifeq ($(PODMAN_BUILD),1)
|
|
ifeq ($(RUNNING_IN_PODMAN),1)
|
|
$(info Please unset PODMAN_BUILD=1 in .config!)
|
|
endif
|
|
endif
|
|
|
|
ALLOW_FSTOOLS?=0
|
|
ifeq ($(FSTOOLS_IN_PODMAN),0)
|
|
ifeq ($(RUNNING_IN_PODMAN),0)
|
|
ALLOW_FSTOOLS=1
|
|
endif
|
|
endif
|
|
|
|
## Userspace variables
|
|
ifeq ($(ARCH),riscv64gc)
|
|
export TARGET=riscv64gc-unknown-redox
|
|
export GNU_TARGET=riscv64-unknown-redox
|
|
else
|
|
export TARGET=$(ARCH)-unknown-redox
|
|
export GNU_TARGET=$(ARCH)-unknown-redox
|
|
endif
|
|
BUILD=build/$(ARCH)/$(CONFIG_NAME)
|
|
LIVE_BUILD=build/$(ARCH)
|
|
LIVE_IMAGE_NAME=$(CONFIG_NAME)
|
|
LIVE_ISO=$(LIVE_BUILD)/$(LIVE_IMAGE_NAME).iso
|
|
LIVE_IMG=$(LIVE_BUILD)/$(LIVE_IMAGE_NAME).img
|
|
LIVE_BOOTLOADER=$(LIVE_BUILD)/$(LIVE_IMAGE_NAME)-bootloader-live.efi
|
|
LIVE_IPXE=$(LIVE_BUILD)/$(LIVE_IMAGE_NAME).ipxe
|
|
MOUNT_DIR=$(BUILD)/filesystem
|
|
FSTOOLS=build/fstools
|
|
INSTALLER=$(FSTOOLS)/bin/redox_installer
|
|
REDOXFS=$(FSTOOLS)/bin/redoxfs
|
|
REDOXFS_MKFS=$(FSTOOLS)/bin/redoxfs-mkfs
|
|
INSTALLER_OPTS=--cookbook=.
|
|
INSTALLER_FEATURES=
|
|
REDOXFS_FEATURES=
|
|
COOKBOOK_OPTS="--filesystem=$(FILESYSTEM_CONFIG)"
|
|
ifeq ($(REPO_BINARY),1)
|
|
INSTALLER_OPTS+=--repo-binary
|
|
COOKBOOK_OPTS+=--repo-binary
|
|
endif
|
|
ifeq ($(FSTOOLS_NO_MOUNT),1)
|
|
INSTALLER_OPTS+=--no-mount
|
|
INSTALLER_FEATURES=--no-default-features --features installer
|
|
REDOXFS_FEATURES= --no-default-features --features std,log
|
|
endif
|
|
|
|
REPO_TAG=$(BUILD)/repo.tag
|
|
FSTOOLS_TAG=build/fstools.tag
|
|
export BOARD FIND
|
|
|
|
ifeq ($(SCCACHE_BUILD),1)
|
|
export CC_WRAPPER:=sccache
|
|
export RUSTC_WRAPPER:=$(CC_WRAPPER)
|
|
endif
|
|
|
|
ifeq ($(HOSTED_REDOX),1)
|
|
FSTOOLS_TAG=
|
|
endif
|
|
|
|
## If Podman is being used, a container is required
|
|
ifeq ($(PODMAN_BUILD),1)
|
|
CONTAINER_TAG=build/container.tag
|
|
else
|
|
CONTAINER_TAG=
|
|
endif
|