]> git.ameliathe1st.gay Git - voyage-au-centre-des-fichiers.git/commitdiff
Made the build system work with guix (and my channel, which will be updated at some...
authorAmelia Coutard <eliottulio.coutard@gmail.com>
Thu, 23 Nov 2023 08:58:39 +0000 (09:58 +0100)
committerAmelia Coutard <eliottulio.coutard@gmail.com>
Thu, 23 Nov 2023 09:06:01 +0000 (10:06 +0100)
.gitignore
Makefile
configure [new file with mode: 0755]
grub.cfg
kernel/linker.ld
kernel/module.mk
test_module/module.mk
test_module_2/module.mk

index 7d7afd0c54ff890cb43800aeb5fdf0b6d0d572e3..064c840715807d253bcfc4b1cacad7c74388dc95 100644 (file)
@@ -2,3 +2,4 @@ out
 dep
 isodir
 isos.iso
+Makefile-conf
index d67df89cd9ec934795204278c18e1efc38eca67e..fadfa3193c7fdb87f06f0b9e5d21c9c83995b2a7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,14 +5,14 @@
 # You should have received a copy of the CC0 Public Domain Dedication along with
 # this file. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
 
-# So, about the license. I don't think I have a copyright on this file's code, but,
-# since I gave it the CC0 license in case I do, that doesn't matter either way.
+ifneq ($(MAKECMDGOALS),clean)
+        include Makefile-conf
+endif
 
 .PHONY: build qemu clean
 
 build: # Build as default target
 
-CXX := x86_64-elf-g++
 CXXFLAGS ?= -O2
 CXXFLAGS := $(CXXFLAGS) -std=c++20 -fno-strict-aliasing -Wall -Wextra -Werror -Wfatal-errors \
             -mgeneral-regs-only -fno-exceptions -fno-rtti -ffreestanding
@@ -27,8 +27,11 @@ include **/module.mk
 build: isos.iso
 qemu: build
        qemu-system-x86_64 -cdrom isos.iso -serial stdio -cpu qemu64,pdpe1gb -no-reboot $(QEMUFLAGS)
+check:
 clean:
        -rm -rf $(TO_CLEAN)
+install:
+       install -D isos.iso -t "$(PREFIX)"
 
 isos.iso: $(TO_ISO)
        grub-mkrescue -o "$@" isodir
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..50bab00
--- /dev/null
+++ b/configure
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+# Written in 2023 by Amélia COUTARD <eliottulio.coutard@gmail.com>
+# To the extent possible under law, the author(s) have dedicated all
+# copyright and related and neighboring rights to this file to the
+# public domain worldwide. This file is distributed without any warranty.
+# You should have received a copy of the CC0 Public Domain Dedication along
+# with this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
+
+printf '' > Makefile-conf
+
+TEMP=$(getopt -o 'h' --long 'prefix:,c++-includes-stdlib:,build:,enable-fast-install,help' -n 'download-playlist' -- "$@") || (echo 'Terminating.' >&2; exit 1)
+eval set -- "$TEMP"
+unset TEMP
+
+while true; do
+       case "$1" in
+               '--c++-includes-stdlib')
+                       INCLUDES="$2"
+                       shift 2
+                       continue
+                       ;;
+               '--prefix')
+                       PREFIX="$2"
+                       shift 2
+                       continue
+                       ;;
+               '--build') # Ignored, but accepted.
+                       shift 2
+                       continue
+                       ;;
+               '--enable-fast-install') # Ignored, but accepted.
+                       shift 1
+                       continue
+                       ;;
+               '-h'|'--help')
+                       echo '--prefix               Install prefix'
+                       echo '--c++-includes-stdlib  C++ standard library include files location'
+                       shift
+                       exit 0
+                       ;;
+               '--')
+                       shift
+                       break
+                       ;;
+       esac
+done
+
+if test "$PREFIX" = ""; then
+       echo 'Missing argument: --prefix.' >&2
+       echo 'See --help for more detail.' >&2
+       exit 1
+fi
+
+if test "$INCLUDES" = ""; then
+       echo 'Missing argument: --c++-includes-stdlib.' >&2
+       echo 'See --help for more detail.' >&2
+       exit 1
+fi
+
+echo "PREFIX = $PREFIX" >> Makefile-conf
+echo "INCLUDES = $INCLUDES" >> Makefile-conf
index fee147658c78b7c27e38e9a6888512602d8b346e..f71586aa20cb604471efabf1f2cddd92da3fec61 100644 (file)
--- a/grub.cfg
+++ b/grub.cfg
@@ -5,9 +5,6 @@
 # You should have received a copy of the CC0 Public Domain Dedication along with
 # this file. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
 
-# So, about the license. I don't think I have a copyright on this file's code, but,
-# since I gave it the CC0 license in case I do, that doesn't matter either way.
-
 menuentry "isos" {
        multiboot2 /boot/kernel.elf64
        module2 /boot/test-module.elf64 test-module
index 11aa47ed36118f6e8328369a0bf71a43982e570d..b99ff7049b821b668525e094b16066211cdf5a75 100644 (file)
@@ -4,9 +4,6 @@
  * This file is distributed without any warranty.
  * You should have received a copy of the CC0 Public Domain Dedication along with
  * this file. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
-
- * So, about the license. I don't think I have a copyright on this file's code, but,
- * since I gave it the CC0 license in case I do, that doesn't matter either way.
  */
 
 ENTRY(_start)
index a918f4f9ce51ac7681b355dd3d85e955dcc9196b..c86796968a575828bf42ed2b4de1457e7d85074d 100644 (file)
@@ -5,9 +5,6 @@
 # You should have received a copy of the CC0 Public Domain Dedication along with
 # this file. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
 
-# So, about the license. I don't think I have a copyright on this file's code, but,
-# since I gave it the CC0 license in case I do, that doesn't matter either way.
-
 SRC_DIR := kernel/src/
 OUT_DIR := kernel/out/
 DEP_DIR := kernel/dep/
@@ -16,10 +13,10 @@ EXEC_NAME := kernel.elf64
 TO_ISO   += isodir/boot/$(EXEC_NAME)
 TO_CLEAN += $(OUT_DIR) $(DEP_DIR)
 
+LOCAL_CXX := g++-system
 LOCAL_CXXFLAGS := $(CXXFLAGS) -mcmodel=kernel -mno-red-zone \
-       -isystem /usr/include -isystem /usr/include/c++/13.1.1 \
-       -isystem /usr/include/c++/13.1.1/x86_64-pc-linux-gnu
-       # The previous two lines are a dirty hack. But not that much, because it doesn't allow me to include non-freestanding headers anyways
+       -isystem $(INCLUDES) -isystem $(INCLUDES)/c++ -isystem $(INCLUDES)/c++/x86_64-unknown-linux-gnu
+       # The previous line is a dirty hack. But not that much, because it doesn't allow me to include non-freestanding headers anyways
 LOCAL_LDFLAGS := $(LDFLAGS) -T kernel/linker.ld -z max-page-size=0x1000 \
        -mno-red-zone -mcmodel=kernel
 
@@ -29,8 +26,8 @@ ASMSRCS := $(shell find $(SRC_DIR) -name '*.S' | grep -v crt)
 ASMOBJS := $(ASMSRCS:$(SRC_DIR)%=$(OUT_DIR)%.o)
 
 CRTI_OBJ     := $(OUT_DIR)/lib/crti.S.o
-CRTBEGIN_OBJ := $(shell $(CXX) $(LOCAL_LDFLAGS) -print-file-name=crtbegin.o)
-CRTEND_OBJ   := $(shell $(CXX) $(LOCAL_LDFLAGS) -print-file-name=crtend.o)
+CRTBEGIN_OBJ := $(shell $(LOCAL_CXX) $(LOCAL_LDFLAGS) -print-file-name=crtbegin.o)
+CRTEND_OBJ   := $(shell $(LOCAL_CXX) $(LOCAL_LDFLAGS) -print-file-name=crtend.o)
 CRTN_OBJ     := $(OUT_DIR)/lib/crtn.S.o
 
 OBJS := $(CRTI_OBJ) $(CRTBEGIN_OBJ) $(CPPOBJS) $(ASMOBJS) $(CRTEND_OBJ) $(CRTN_OBJ)
@@ -42,12 +39,14 @@ isodir/boot/$(EXEC_NAME): $(OUT_DIR)$(EXEC_NAME)
 $(OUT_DIR)$(EXEC_NAME): OBJS := $(OBJS)
 $(OUT_DIR)$(EXEC_NAME): LDLIBS := -nostdlib -lgcc
 $(OUT_DIR)$(EXEC_NAME): LDFLAGS := $(LOCAL_LDFLAGS)
+$(OUT_DIR)$(EXEC_NAME): CXX := $(LOCAL_CXX)
 $(OUT_DIR)$(EXEC_NAME): $(OBJS) kernel/linker.ld
        mkdir -p "$(@D)"
        $(CXX) $(LDFLAGS) -o "$@" $(OBJS) $(LDLIBS)
 
 $(OUT_DIR)%.o: DEP_DIR := $(DEP_DIR)
 $(OUT_DIR)%.o: CXXFLAGS := $(LOCAL_CXXFLAGS)
+$(OUT_DIR)%.o: CXX := $(LOCAL_CXX)
 $(OUT_DIR)%.o: $(SRC_DIR)%
        mkdir -p $(@D)
        mkdir -p $(dir $(DEP_DIR)$*)
index 194a4f02b65e9e5c1bd0cad736b7c6a5046021fa..a0d8d0b14acbb2dc3276da14c9e27e025b80a7c7 100644 (file)
@@ -5,9 +5,6 @@
 # You should have received a copy of the CC0 Public Domain Dedication along with
 # this file. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
 
-# So, about the license. I don't think I have a copyright on this file's code, but,
-# since I gave it the CC0 license in case I do, that doesn't matter either way.
-
 SRC_DIR := test_module/src/
 OUT_DIR := test_module/out/
 DEP_DIR := test_module/dep/
@@ -16,6 +13,7 @@ EXEC_NAME := test-module.elf64
 TO_ISO += isodir/boot/$(EXEC_NAME)
 TO_CLEAN += $(OUT_DIR) $(DEP_DIR)
 
+LOCAL_CXX := g++-user
 LOCAL_CXXFLAGS := $(CXXFLAGS)
 LOCAL_LDFLAGS := $(LDFLAGS)
 
@@ -32,12 +30,14 @@ isodir/boot/$(EXEC_NAME): $(OUT_DIR)$(EXEC_NAME)
 $(OUT_DIR)$(EXEC_NAME): OBJS := $(OBJS)
 $(OUT_DIR)$(EXEC_NAME): LDLIBS := -nostdlib -lgcc
 $(OUT_DIR)$(EXEC_NAME): LDFLAGS := $(LOCAL_LDFLAGS)
+$(OUT_DIR)$(EXEC_NAME): CXX := $(LOCAL_CXX)
 $(OUT_DIR)$(EXEC_NAME): $(OBJS)
        mkdir -p "$(@D)"
        $(CXX) $(LDFLAGS) -o "$@" $+ $(LDLIBS)
 
 $(OUT_DIR)%.o: DEP_DIR := $(DEP_DIR)
 $(OUT_DIR)%.o: CXXFLAGS := $(LOCAL_CXXFLAGS)
+$(OUT_DIR)%.o: CXX := $(LOCAL_CXX)
 $(OUT_DIR)%.o: $(SRC_DIR)%
        mkdir -p $(@D)
        mkdir -p $(dir $(DEP_DIR)$*)
index 9b928959159fd48109fffc7429ae134c50c2a145..159547f1c0973f78c29f8cb376c505563938342d 100644 (file)
@@ -5,9 +5,6 @@
 # You should have received a copy of the CC0 Public Domain Dedication along with
 # this file. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
 
-# So, about the license. I don't think I have a copyright on this file's code, but,
-# since I gave it the CC0 license in case I do, that doesn't matter either way.
-
 SRC_DIR := test_module_2/src/
 OUT_DIR := test_module_2/out/
 DEP_DIR := test_module_2/dep/
@@ -16,6 +13,7 @@ EXEC_NAME := test-module-2.elf64
 TO_ISO += isodir/boot/$(EXEC_NAME)
 TO_CLEAN += $(OUT_DIR) $(DEP_DIR)
 
+LOCAL_CXX := g++-user
 LOCAL_CXXFLAGS := $(CXXFLAGS)
 LOCAL_LDFLAGS := $(LDFLAGS)
 
@@ -32,12 +30,14 @@ isodir/boot/$(EXEC_NAME): $(OUT_DIR)$(EXEC_NAME)
 $(OUT_DIR)$(EXEC_NAME): OBJS := $(OBJS)
 $(OUT_DIR)$(EXEC_NAME): LDLIBS := -nostdlib -lgcc
 $(OUT_DIR)$(EXEC_NAME): LDFLAGS := $(LOCAL_LDFLAGS)
+$(OUT_DIR)$(EXEC_NAME): CXX := $(LOCAL_CXX)
 $(OUT_DIR)$(EXEC_NAME): $(OBJS)
        mkdir -p "$(@D)"
        $(CXX) $(LDFLAGS) -o "$@" $+ $(LDLIBS)
 
 $(OUT_DIR)%.o: DEP_DIR := $(DEP_DIR)
 $(OUT_DIR)%.o: CXXFLAGS := $(LOCAL_CXXFLAGS)
+$(OUT_DIR)%.o: CXX := $(LOCAL_CXX)
 $(OUT_DIR)%.o: $(SRC_DIR)%
        mkdir -p $(@D)
        mkdir -p $(dir $(DEP_DIR)$*)