mrubyvisor/Makefile

195 lines
4.2 KiB
Makefile
Raw Permalink Normal View History

2022-12-01 01:51:35 +00:00
include config.mk
2022-11-30 22:15:34 +00:00
############
# Programs #
############
2022-11-30 22:20:10 +00:00
# Toolchain
2022-11-27 11:21:26 +00:00
AR = $(CCPREFIX)ar
AS = $(CCPREFIX)as
CC = $(CCPREFIX)gcc
LD = $(CCPREFIX)ld
RANLIB = $(CCPREFIX)ranlib
2022-11-30 21:23:08 +00:00
2022-11-30 22:20:10 +00:00
# Common programs
2022-11-30 22:25:54 +00:00
CP = cp
2022-11-30 22:20:10 +00:00
MKDIR = mkdir
PWD = pwd
# Additional programs
2022-11-30 21:23:08 +00:00
GRUB_MKRESCUE = grub-mkrescue
RAKE = rake
QEMU = qemu-system-i386
2022-11-27 11:21:26 +00:00
2022-11-30 22:25:54 +00:00
#########
# Paths #
#########
2022-11-30 22:15:34 +00:00
2022-11-30 22:20:10 +00:00
ABS_REPO = $(shell $(PWD))
2022-11-27 11:21:26 +00:00
2022-11-29 13:44:28 +00:00
# Basic paths
2022-12-03 18:39:29 +00:00
MRUBY_CONF = build_config.rb
DEST_DIR = dest
IMAGE = image.iso
ROOTFS_DIR = rootfs
SRC_DIR = src
# Basic paths (dependencies)
2022-12-27 11:08:33 +00:00
LIBCLAYER_DIR = vendor/libclayer
2022-11-29 13:44:28 +00:00
LIBKERNAUX_DIR = vendor/libkernaux
2022-12-03 18:39:29 +00:00
DRIVERS_DIR = vendor/drivers
2022-11-29 13:44:28 +00:00
MRUBY_DIR = vendor/mruby
# Deeper paths
INCLUDE_DIR = $(DEST_DIR)/include
LIB_DIR = $(DEST_DIR)/lib
2022-12-27 11:08:33 +00:00
LIBCLAYER = $(LIB_DIR)/libc.a
2022-12-03 18:39:29 +00:00
LIBDRIVERS = $(LIB_DIR)/libdrivers.a
2022-11-28 21:56:25 +00:00
LIBKERNAUX = $(LIB_DIR)/libkernaux.a
LIBMRUBY = $(LIB_DIR)/libmruby.a
2022-11-29 13:44:28 +00:00
GRUBCFG = $(ROOTFS_DIR)/boot/grub/grub.cfg
MRUBYVISOR = $(ROOTFS_DIR)/boot/mrubyvisor.multiboot2
2022-11-27 11:21:26 +00:00
2022-12-27 11:08:33 +00:00
#############
# libclayer #
#############
LIBCLAYER_ARGS = \
--enable-libc \
--disable-libclayer \
--enable-freestanding
2022-12-27 13:52:47 +00:00
LIBCLAYER_VARS = \
AR='$(AR)' \
AS='$(AS)' \
CC='$(CC)' \
LD='$(LD)' \
RANLIB='$(RANLIB)'
2022-11-30 22:15:34 +00:00
##############
# libkernaux #
##############
2022-12-03 18:39:29 +00:00
LIBKERNAUX_ARGS = \
2022-11-28 21:29:06 +00:00
--enable-freestanding \
--enable-split-libc \
2022-11-28 21:32:05 +00:00
--enable-debug \
2022-12-27 13:52:47 +00:00
--disable-float
LIBKERNAUX_VARS = \
AR='$(AR)' \
AS='$(AS)' \
CC='$(CC)' \
LD='$(LD)' \
RANLIB='$(RANLIB)' \
2022-12-27 11:08:33 +00:00
CFLAGS='-I$(ABS_REPO)/$(INCLUDE_DIR)'
2022-11-28 21:29:06 +00:00
2022-12-03 18:39:29 +00:00
###########
# drivers #
###########
DRIVERS_CFLAGS = \
-nostdlib \
-ffreestanding \
-fno-pic \
-fno-stack-protector
2022-12-27 13:52:47 +00:00
DRIVERS_VARS = \
AR='$(AR)' \
AS='$(AS)' \
CC='$(CC)' \
LD='$(LD)' \
RANLIB='$(RANLIB)' \
CFLAGS='$(DRIVERS_CFLAGS)'
2022-11-30 22:15:34 +00:00
#########
# mruby #
#########
2022-11-30 22:20:10 +00:00
MRUBY_BUILD_NAME = mrubyvisor
2022-12-03 18:39:29 +00:00
MRUBY_FLAGS = \
2022-11-28 21:48:14 +00:00
-DMRB_NO_BOXING \
-DMRB_NO_FLOAT \
-DMRB_NO_STDIO
2022-12-27 13:52:47 +00:00
MRUBY_VARS = \
MRUBY_CONFIG='$(ABS_REPO)/$(MRUBY_CONF)' \
CROSS_AR='$(AR)' \
CROSS_CC='$(CC)' \
CROSS_LD='$(LD)' \
FLAGS='$(MRUBY_FLAGS)' \
BUILD_NAME='$(MRUBY_BUILD_NAME)' \
INCLUDE_DIR='$(ABS_REPO)/$(INCLUDE_DIR)' \
LIB_DIR='$(ABS_REPO)/$(LIB_DIR)'
2022-11-30 22:15:34 +00:00
#########
# Tasks #
#########
2022-11-27 12:10:32 +00:00
.PHONY: $(IMAGE) $(MRUBYVISOR)
2022-11-27 11:54:45 +00:00
all: runc
runc: $(IMAGE)
2022-11-27 12:10:32 +00:00
$(QEMU) -cdrom $< -serial stdio -display none
2022-11-27 11:54:45 +00:00
runw: $(IMAGE)
2022-11-27 12:10:32 +00:00
$(QEMU) -cdrom $< -serial stdio
2022-11-27 11:54:45 +00:00
2022-12-27 11:08:33 +00:00
clean: clean-src clean-dest clean-mruby clean-libkernaux clean-libclayer
2022-11-28 21:18:01 +00:00
clean-src:
2022-11-29 13:44:28 +00:00
$(MAKE) -C $(SRC_DIR) clean
2022-11-28 21:18:01 +00:00
clean-dest:
2022-11-29 13:44:28 +00:00
rm -rf $(MRUBYVISOR) $(DEST_DIR)/*
2022-11-28 21:18:01 +00:00
clean-mruby:
2022-11-29 13:44:28 +00:00
cd $(MRUBY_DIR) && $(RAKE) clean
2022-11-28 21:18:01 +00:00
2022-12-03 18:39:29 +00:00
clean-drivers:
$(MAKE) -C $(DRIVERS_DIR) distclean || true
2022-11-28 21:18:01 +00:00
clean-libkernaux:
2022-11-29 13:44:28 +00:00
$(MAKE) -C $(LIBKERNAUX_DIR) distclean || true
2022-11-27 11:54:45 +00:00
2022-12-27 11:08:33 +00:00
clean-libclayer:
$(MAKE) -C $(LIBCLAYER_DIR) distclean || true
2022-11-30 22:15:34 +00:00
##############
# File tasks #
##############
2022-11-27 11:54:45 +00:00
$(IMAGE): $(GRUBCFG) $(MRUBYVISOR)
2022-11-30 21:23:08 +00:00
$(GRUB_MKRESCUE) $(ROOTFS_DIR) -o $@
2022-11-27 11:54:45 +00:00
2022-12-27 11:08:33 +00:00
$(MRUBYVISOR): $(LIBCLAYER) $(LIBKERNAUX) $(LIBDRIVERS) $(LIBMRUBY)
2022-11-29 13:44:28 +00:00
$(MAKE) -C $(SRC_DIR) mrubyvisor.multiboot2 CCPREFIX='$(CCPREFIX)' DEST='$(ABS_REPO)/$(DEST_DIR)' MRUBY_FLAGS='$(MRUBY_FLAGS)'
2022-11-30 22:25:54 +00:00
$(CP) $(SRC_DIR)/mrubyvisor.multiboot2 $@
2022-11-27 11:21:26 +00:00
2022-12-27 11:08:33 +00:00
$(LIBCLAYER):
cd $(LIBCLAYER_DIR) && ./autogen.sh
2022-12-27 13:52:47 +00:00
cd $(LIBCLAYER_DIR) && ./configure --host='i386-elf' --prefix='$(ABS_REPO)/$(DEST_DIR)' $(LIBCLAYER_ARGS) $(LIBCLAYER_VARS)
2022-12-27 11:08:33 +00:00
cd $(LIBCLAYER_DIR) && $(MAKE)
cd $(LIBCLAYER_DIR) && $(MAKE) install
$(LIBKERNAUX): $(LIBCLAYER)
2022-11-29 13:44:28 +00:00
cd $(LIBKERNAUX_DIR) && ./autogen.sh
2022-12-27 13:52:47 +00:00
cd $(LIBKERNAUX_DIR) && ./configure --host='i386-elf' --prefix='$(ABS_REPO)/$(DEST_DIR)' $(LIBKERNAUX_ARGS) $(LIBKERNAUX_VARS)
2022-11-29 13:44:28 +00:00
cd $(LIBKERNAUX_DIR) && $(MAKE)
cd $(LIBKERNAUX_DIR) && $(MAKE) install
2022-11-27 11:21:26 +00:00
2022-12-03 18:39:29 +00:00
$(LIBDRIVERS):
cd $(DRIVERS_DIR) && ./autogen.sh
2022-12-27 13:52:47 +00:00
cd $(DRIVERS_DIR) && ./configure --host='i386-elf' --prefix='$(ABS_REPO)/$(DEST_DIR)' $(DRIVERS_VARS)
2022-12-03 18:39:29 +00:00
cd $(DRIVERS_DIR) && $(MAKE)
cd $(DRIVERS_DIR) && $(MAKE) install
2022-11-28 20:20:42 +00:00
$(LIBMRUBY): $(LIBKERNAUX) $(MRUBY_CONF)
2022-11-28 21:21:10 +00:00
$(MAKE) clean-mruby
2022-11-30 22:15:34 +00:00
$(MKDIR) -p $(INCLUDE_DIR) $(LIB_DIR)
2022-12-27 13:52:47 +00:00
cd $(MRUBY_DIR) && $(RAKE) $(MRUBY_VARS)
2022-11-30 22:25:54 +00:00
$(CP) -r $(MRUBY_DIR)/include/* $(INCLUDE_DIR)
$(CP) -r $(MRUBY_DIR)/build/$(MRUBY_BUILD_NAME)/include/* $(INCLUDE_DIR)
$(CP) $(MRUBY_DIR)/build/$(MRUBY_BUILD_NAME)/lib/libmruby.a $(LIB_DIR)