aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2024-12-29 04:32:06 -0500
committerRaghuram Subramani <raghus2247@gmail.com>2024-12-29 04:32:06 -0500
commit6879ab18c79fc05c6b9da937e4645fe3c882b58c (patch)
treeaf6328ba429d9d9e57b90716341da081e8ebfef4
parent956c1f581a7aabbef6735d103eb0f69a7966373e (diff)
build: Switch to CMake to handle the build system
-rw-r--r--.gitignore4
-rw-r--r--CMakeLists.txt14
-rw-r--r--Makefile30
-rw-r--r--build/.keep0
-rw-r--r--cmake/toolchain.cmake (renamed from kernel/cmake/toolchain.cmake)0
-rw-r--r--env.sh5
-rw-r--r--kernel/CMakeLists.txt16
-rw-r--r--out/.keep0
-rw-r--r--toolchain/Makefile10
-rw-r--r--toolchain/constants.mk3
-rw-r--r--toolchain/cross_binutils.mk (renamed from toolchain/cross/binutils.mk)9
-rw-r--r--toolchain/cross_gcc.mk (renamed from toolchain/cross/gcc.mk)11
-rw-r--r--toolchain/host_binutils.mk (renamed from toolchain/host/binutils.mk)2
-rw-r--r--toolchain/host_gcc.mk (renamed from toolchain/host/gcc.mk)2
-rw-r--r--toolchain/utils.mk (renamed from make/utils.mk)0
15 files changed, 50 insertions, 56 deletions
diff --git a/.gitignore b/.gitignore
index 4e5eb7a..78b2bb1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
.direnv/
build/*
-out/*
+toolchain/cross/
+toolchain/host/
+toolchain/build/
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..d7d1b85
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,14 @@
+set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/toolchain.cmake)
+set(CMAKE_C_COMPILER_WORKS TRUE)
+set(CMAKE_CXX_COMPILER_WORKS TRUE)
+
+cmake_minimum_required(VERSION 3.21)
+project(CMOS)
+
+add_subdirectory(kernel)
+
+set(QEMU_SYSTEM_CMD qemu-system-i386)
+
+add_custom_target(run
+ ${QEMU_SYSTEM_CMD} -kernel kernel/kernel
+)
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 5094bf0..0000000
--- a/Makefile
+++ /dev/null
@@ -1,30 +0,0 @@
-include config.mk
-
-ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
-
-export ROOT_DIR
-export BUILD_DIR
-export OUT_DIR
-export PARALLEL_CORES
-
-# TARGETS
-all: $(TARGETS)
-
-.PHONY: $(TARGETS)
-$(TARGETS):
- $(MAKE) -C $@
-
-# TOOLCHAINS
-toolchain: $(TOOLCHAIN_TARGETS)
-
-toolchain-clean:
- for target in $(TOOLCHAIN_TARGETS); do \
- $(MAKE) -f $$target clean; \
- done
-
-.PHONY: $(TOOLCHAIN_TARGETS)
-$(TOOLCHAIN_TARGETS):
- $(MAKE) -f $@
-
-clean:
- rm -rf $(BUILD_DIR)
diff --git a/build/.keep b/build/.keep
deleted file mode 100644
index e69de29..0000000
--- a/build/.keep
+++ /dev/null
diff --git a/kernel/cmake/toolchain.cmake b/cmake/toolchain.cmake
index 41067c3..41067c3 100644
--- a/kernel/cmake/toolchain.cmake
+++ b/cmake/toolchain.cmake
diff --git a/env.sh b/env.sh
new file mode 100644
index 0000000..9f52e3f
--- /dev/null
+++ b/env.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+export PATH="$PWD/toolchain/cross/bin:$PWD/toolchain/host/bin:$PATH"
+
+alias r="cd $PWD"
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt
index f7c85c1..7f9e7f4 100644
--- a/kernel/CMakeLists.txt
+++ b/kernel/CMakeLists.txt
@@ -1,18 +1,12 @@
-# CMakeLists.txt
-
-set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/toolchain.cmake)
-set(CMAKE_C_COMPILER_WORKS TRUE)
-set(CMAKE_CXX_COMPILER_WORKS TRUE)
-
cmake_minimum_required(VERSION 3.21)
-project(CMOS C ASM)
+project(kernel C ASM)
set(KERNEL_SRC
kernel/kernel.c
arch/x86/init/boot.s
)
-add_executable(cmos.bin ${KERNEL_SRC})
+add_executable(kernel ${KERNEL_SRC})
set(C_COMPILE_OPTIONS
-ffreestanding
@@ -22,13 +16,13 @@ set(C_COMPILE_OPTIONS
-pedantic
)
-target_compile_options(cmos.bin PRIVATE
+target_compile_options(kernel PRIVATE
$<$<COMPILE_LANGUAGE:C>: ${C_COMPILE_OPTIONS}>
)
-set(LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/arch/x86/link.ld")
+set(LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/arch/x86/link.ld")
set(LINKER_FLAGS
-T ${LINKER_SCRIPT}
-nostdlib
)
-target_link_options(cmos.bin PRIVATE ${LINKER_FLAGS})
+target_link_options(kernel PRIVATE ${LINKER_FLAGS})
diff --git a/out/.keep b/out/.keep
deleted file mode 100644
index e69de29..0000000
--- a/out/.keep
+++ /dev/null
diff --git a/toolchain/Makefile b/toolchain/Makefile
new file mode 100644
index 0000000..9a9b70f
--- /dev/null
+++ b/toolchain/Makefile
@@ -0,0 +1,10 @@
+export ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
+export BUILD_DIR := $(ROOT_DIR)/build
+export OUT_DIR := $(ROOT_DIR)
+export PARALLEL_CORES := 16
+
+all:
+ # $(MAKE) -f host_binutils.mk
+ # $(MAKE) -f host_gcc.mk
+ $(MAKE) -f cross_binutils.mk
+ $(MAKE) -f cross_gcc.mk
diff --git a/toolchain/constants.mk b/toolchain/constants.mk
deleted file mode 100644
index 7e89ab7..0000000
--- a/toolchain/constants.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-HOST_TOOLCHAIN := $(OUT_DIR)/toolchain/host/bin
-CROSS_TOOLCHAIN := $(OUT_DIR)/toolchain/cross/bin
-TOOLCHAIN_TARGET := i686-elf
diff --git a/toolchain/cross/binutils.mk b/toolchain/cross_binutils.mk
index b92edb2..721ec85 100644
--- a/toolchain/cross/binutils.mk
+++ b/toolchain/cross_binutils.mk
@@ -1,5 +1,4 @@
-include $(ROOT_DIR)/make/utils.mk
-include $(ROOT_DIR)/toolchain/constants.mk
+include utils.mk
VERSION := 2.42
URL := https://ftp.gnu.org/gnu/binutils/binutils-$(VERSION).tar.gz
@@ -7,14 +6,16 @@ URL := https://ftp.gnu.org/gnu/binutils/binutils-$(VERSION).tar.gz
DIR := $(BUILD_DIR)/toolchain/binutils-$(VERSION)
FILE := $(DIR)/binutils-$(VERSION).tar.gz
SRC := $(DIR)/binutils-$(VERSION)
-OUT := $(OUT_DIR)/toolchain/cross
+OUT := $(OUT_DIR)/cross
BUILD := $(DIR)/build_cross
+TOOLCHAIN_TARGET := i686-elf
+
all: install
.ONESHELL:
-$(call add-to-path,$(HOST_TOOLCHAIN))
+$(call add-to-path,$(shell pwd)/host/bin)
$(FILE):
mkdir -p $(DIR)
diff --git a/toolchain/cross/gcc.mk b/toolchain/cross_gcc.mk
index 49ba5de..35fa8de 100644
--- a/toolchain/cross/gcc.mk
+++ b/toolchain/cross_gcc.mk
@@ -1,5 +1,4 @@
-include $(ROOT_DIR)/make/utils.mk
-include $(ROOT_DIR)/toolchain/constants.mk
+include utils.mk
VERSION := 14.2.0
URL := https://ftp.gnu.org/gnu/gcc/gcc-$(VERSION)/gcc-$(VERSION).tar.gz
@@ -7,15 +6,17 @@ URL := https://ftp.gnu.org/gnu/gcc/gcc-$(VERSION)/gcc-$(VERSION).tar.gz
DIR := $(BUILD_DIR)/toolchain/gcc-$(VERSION)
FILE := $(DIR)/gcc-$(VERSION).tar.gz
SRC := $(DIR)/gcc-$(VERSION)
-OUT := $(OUT_DIR)/toolchain/cross
+OUT := $(OUT_DIR)/cross
BUILD := $(DIR)/build_cross
+TOOLCHAIN_TARGET := i686-elf
+
all: install
.ONESHELL:
-$(call add-to-path,$(CROSS_TOOLCHAIN))
-$(call add-to-path,$(HOST_TOOLCHAIN))
+$(call add-to-path,$(shell pwd)/cross/bin)
+$(call add-to-path,$(shell pwd)/host/bin)
$(FILE):
mkdir -p $(DIR)
diff --git a/toolchain/host/binutils.mk b/toolchain/host_binutils.mk
index 59f2669..f906238 100644
--- a/toolchain/host/binutils.mk
+++ b/toolchain/host_binutils.mk
@@ -4,7 +4,7 @@ URL := https://ftp.gnu.org/gnu/binutils/binutils-$(VERSION).tar.gz
DIR := $(BUILD_DIR)/toolchain/binutils-$(VERSION)
FILE := $(DIR)/binutils-$(VERSION).tar.gz
SRC := $(DIR)/binutils-$(VERSION)
-OUT := $(OUT_DIR)/toolchain/host
+OUT := $(OUT_DIR)/host
BUILD := $(DIR)/build_host
all: install
diff --git a/toolchain/host/gcc.mk b/toolchain/host_gcc.mk
index f0c206d..c30758c 100644
--- a/toolchain/host/gcc.mk
+++ b/toolchain/host_gcc.mk
@@ -4,7 +4,7 @@ URL := https://ftp.gnu.org/gnu/gcc/gcc-$(VERSION)/gcc-$(VERSION).tar.gz
DIR := $(BUILD_DIR)/toolchain/gcc-$(VERSION)
FILE := $(DIR)/gcc-$(VERSION).tar.gz
SRC := $(DIR)/gcc-$(VERSION)
-OUT := $(OUT_DIR)/toolchain/host
+OUT := $(OUT_DIR)/host
BUILD := $(DIR)/build_host
all: install
diff --git a/make/utils.mk b/toolchain/utils.mk
index db9d0a3..db9d0a3 100644
--- a/make/utils.mk
+++ b/toolchain/utils.mk