diff options
| author | Raghuram Subramani <raghus2247@gmail.com> | 2024-12-29 04:32:06 -0500 |
|---|---|---|
| committer | Raghuram Subramani <raghus2247@gmail.com> | 2024-12-29 04:32:06 -0500 |
| commit | 6879ab18c79fc05c6b9da937e4645fe3c882b58c (patch) | |
| tree | af6328ba429d9d9e57b90716341da081e8ebfef4 | |
| parent | 956c1f581a7aabbef6735d103eb0f69a7966373e (diff) | |
build: Switch to CMake to handle the build system
| -rw-r--r-- | .gitignore | 4 | ||||
| -rw-r--r-- | CMakeLists.txt | 14 | ||||
| -rw-r--r-- | Makefile | 30 | ||||
| -rw-r--r-- | build/.keep | 0 | ||||
| -rw-r--r-- | cmake/toolchain.cmake (renamed from kernel/cmake/toolchain.cmake) | 0 | ||||
| -rw-r--r-- | env.sh | 5 | ||||
| -rw-r--r-- | kernel/CMakeLists.txt | 16 | ||||
| -rw-r--r-- | out/.keep | 0 | ||||
| -rw-r--r-- | toolchain/Makefile | 10 | ||||
| -rw-r--r-- | toolchain/constants.mk | 3 | ||||
| -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
@@ -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 @@ -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 |
