forked from Piraterna/aurix
149 lines
4.2 KiB
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/
|