aurix/Makefile

149 lines
4.2 KiB
Makefile

###################################################################################
## Module Name: Makefile ##
## Project: AurixOS ##
## ##
## Copyright (c) 2024-2025 Jozef Nagy ##
## ##
## This source is subject to the MIT License. ##
## See License.txt in the root of this repository. ##
## All other rights reserved. ##
## ##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ##
## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ##
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ##
## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ##
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ##
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ##
## SOFTWARE. ##
###################################################################################
.DEFAULT_GOAL := all
##
# Build configuration
#
export ARCH ?= x86_64
export PLATFORM ?= generic-pc
export BUILD_TYPE ?= debug
export ROOT_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
export BUILD_DIR ?= $(ROOT_DIR)/build
export SYSROOT_DIR ?= $(ROOT_DIR)/sysroot
export RELEASE_DIR ?= $(ROOT_DIR)/release
NOUEFI ?= n
##
# Image generation and running
#
LIVECD := $(RELEASE_DIR)/aurix-$(GITREV)-livecd_$(ARCH)-$(PLATFORM).iso
LIVEHDD := $(RELEASE_DIR)/aurix-$(GITREV)-livehdd_$(ARCH)-$(PLATFORM).img
LIVESD := $(RELEASE_DIR)/aurix-$(GITREV)-livesd_$(ARCH)-$(PLATFORM).img
QEMU_FLAGS := -m 2G -smp 4 -serial stdio
##
# General info
#
export CODENAME := "Matterhorn"
export VERSION := "0.1"
export GITREV := $(shell git rev-parse --short HEAD)
export DEFINES := AURIX_CODENAME=$(CODENAME) \
AURIX_VERSION=$(VERSION) \
AURIX_GITREV=$(GITREV) \
BUILD_TYPE=$(BUILD_TYPE)
ifeq ($(BUILD_TYPE),debug)
DEFINES += BUILD_DEBUG
else
DEFINES += BUILD_RELEASE
endif
##
# Recipes
#
.PHONY: all
all: boot kernel
@:
.PHONY: boot
boot:
@printf ">>> Building bootloader...\n"
ifneq (,$(filter $(ARCH),i686 x86_64))
@$(MAKE) -C boot PLATFORM=pc-bios
else
@$(MAKE) -C boot
endif
ifneq (,$(filter $(ARCH),i686 x86_64 arm32 aarch64))
ifeq ($(NOUEFI),n)
@$(MAKE) -C boot PLATFORM=uefi
endif
endif
.PHONY: kernel
kernel:
@printf ">>> Building kernel...\n"
@$(MAKE) -C kernel
.PHONY: install
install: boot kernel
@printf ">>> Building sysroot...\n"
@mkdir -p $(SYSROOT_DIR)
ifneq (,$(filter $(ARCH),i686 x86_64))
@$(MAKE) -C boot install PLATFORM=pc-bios
else
@$(MAKE) -C boot install
endif
ifneq (,$(filter $(ARCH),i686 x86_64 arm32 aarch64))
ifeq ($(NOUEFI),n)
@$(MAKE) -C boot install PLATFORM=uefi
endif
endif
@$(MAKE) -C kernel install
ovmf:
@printf ">>> Downloading OVMF images...\n"
@utils/download-ovmf.sh
.PHONY: livecd
livecd: install
@printf ">>> Generating Live CD..."
@mkdir -p $(RELEASE_DIR)
@utils/arch/$(ARCH)/generate-iso.sh $(LIVECD)
.PHONY: livehdd
livehdd: install
@printf ">>> Generating Live HDD..."
@mkdir -p $(RELEASE_DIR)
@utils/arch/$(ARCH)/generate-hdd.sh $(LIVEHDD)
.PHONY: livesd
livesd: install
@$(error SD Card Generation is not supported yet!)
@printf ">>> Generating Live SD Card..."
@mkdir -p $(RELEASE_DIR)
@utils/arch/$(ARCH)/generate-sd.sh $(LIVESD)
.PHONY: run
run: livecd
@printf ">>> Running QEMU...\n"
@qemu-system-$(ARCH) $(QEMU_FLAGS) $(QEMU_MACHINE_FLAGS) -cdrom $(LIVECD)
.PHONY: run-uefi
run-uefi: livecd ovmf
@printf ">>> Running QEMU (UEFI)...\n"
@qemu-system-$(ARCH) $(QEMU_FLAGS) $(QEMU_MACHINE_FLAGS) -bios ovmf/ovmf-$(ARCH).fd -cdrom $(LIVECD)
.PHONY: clean
clean:
@rm -rf $(BUILD_DIR) $(SYSROOT_DIR)
.PHONY: distclean
distclean:
@rm -rf $(BUILD_DIR) $(SYSROOT_DIR) $(RELEASE_DIR) ovmf/