summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2024-06-04 13:41:11 -0400
committerIan Moffett <ian@osmora.org>2024-06-04 13:45:31 -0400
commit98ccb3a2d41015b42d46d8b382decc755a003c3f (patch)
tree4e514830880a4deabebb60c38055792695314ae6 /tools
project: Initial commit
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/cross.sh164
-rw-r--r--tools/kconf/.gitignore4
-rw-r--r--tools/kconf/Makefile9
-rw-r--r--tools/kconf/grammer.y86
-rw-r--r--tools/kconf/scan.l60
-rwxr-xr-xtools/ksyms12
-rwxr-xr-xtools/update-copyright11
7 files changed, 346 insertions, 0 deletions
diff --git a/tools/cross.sh b/tools/cross.sh
new file mode 100644
index 0000000..52e7b1b
--- /dev/null
+++ b/tools/cross.sh
@@ -0,0 +1,164 @@
+#!/bin/bash
+
+#
+# Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. Neither the name of Hyra nor the names of its contributors may be used
+# to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+################################################################
+# Toolchain configuration
+################################################################
+
+set -e
+
+if [ "$1" == "amd64" ]
+then
+ TARGET="x86_64-hyra"
+else
+ TARGET="$1-elf"
+fi
+
+BINUTILS_VERSION=2.42
+GCC_VERSION=13.2.0
+BINUTILS_NAME="binutils-$BINUTILS_VERSION"
+BINUTILS_TARBALL="$BINUTILS_NAME.tar.xz"
+BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/$BINUTILS_TARBALL"
+GCC_NAME="gcc-$GCC_VERSION"
+GCC_TARBALL="$GCC_NAME.tar.xz"
+GCC_URL="https://ftp.gnu.org/gnu/gcc/gcc-$GCC_VERSION/$GCC_TARBALL"
+
+# Remove debugging information, it takes up a lot of space
+export CFLAGS="-g0"
+export CXXFLAGS="-g0"
+
+# System-dependent configuration
+SYSTEM_NAME="$(uname -s)"
+MAKE="make"
+NPROC="nproc"
+if [ "$SYSTEM_NAME" = "OpenBSD" ]; then
+ MAKE="gmake"
+ NPROC="sysctl -n hw.ncpuonline"
+elif [ "$SYSTEM_NAME" = "FreeBSD" ]; then
+ MAKE="gmake"
+ NPROC="sysctl -n hw.ncpu"
+elif [ "$SYSTEM_NAME" = "Darwin" ]; then
+ NPROC="sysctl -n hw.ncpu"
+fi
+CORES="$($NPROC)"
+
+# Set build paths
+PREFIX="$(pwd)/cross"
+export PATH="$PREFIX/bin:$PATH"
+
+# Create build directory
+mkdir -p "$PREFIX/build"
+cd "$PREFIX/build"
+
+################################################################
+# Download and extract sources
+################################################################
+
+if [ ! -f $BINUTILS_TARBALL ]; then
+ echo "Downloading binutils..."
+ curl $BINUTILS_URL -o $BINUTILS_TARBALL
+fi
+if [ ! -f $GCC_TARBALL ]; then
+ echo "Downloading gcc..."
+ curl $GCC_URL -o $GCC_TARBALL
+fi
+
+echo "Extracting binutils..."
+rm -rf $BINUTILS_NAME
+tar -xf $BINUTILS_TARBALL
+echo "Extracting gcc..."
+rm -rf $GCC_NAME
+tar -xf $GCC_TARBALL
+
+################################################################
+# Build packages
+################################################################
+
+echo "Removing previous builds..."
+rm -rf build-gcc build-binutils
+
+# Binutils build
+clear
+mkdir build-binutils
+
+echo "Applying binutils patch"
+cp -r $BINUTILS_NAME $BINUTILS_NAME-copy
+patch -s -p0 < ../../builddeps/binutils.patch
+rm -rf $BINUTILS_NAME-copy
+
+echo "Configuring $BINUTILS_NAME..."
+cd build-binutils
+../$BINUTILS_NAME/configure --target="$TARGET" --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror --enable-targets=all
+echo "Building $BINUTILS_NAME..."
+$MAKE -j$CORES
+echo "Installing $BINUTILS_NAME..."
+$MAKE install
+echo "Cleaning $BINUTILS_NAME..."
+cd ..
+rm -rf $BINUTILS_NAME build-binutils
+
+# GCC build
+clear
+echo "Downloading prerequisites for $GCC_NAME..."
+cd $GCC_NAME
+contrib/download_prerequisites
+cd ..
+
+echo "Applying GCC patch"
+cp -r $GCC_NAME $GCC_NAME-copy
+patch -s -p0 < ../../builddeps/gcc.patch
+rm -rf $GCC_NAME-copy
+
+echo "Configuring $GCC_NAME..."
+mkdir build-gcc
+cd build-gcc
+../$GCC_NAME/configure --target="$TARGET" --with-sysroot=/ --prefix="$PREFIX" --disable-nls --enable-languages=c,c++,lto --disable-multilib
+echo "Building all-gcc..."
+$MAKE all-gcc -j"$CORES"
+echo "Building all-target-libgcc..."
+$MAKE all-target-libgcc -j"$CORES"
+echo "Installing $GCC_NAME..."
+$MAKE install-gcc
+echo "Installing target-libgcc..."
+$MAKE install-target-libgcc
+echo "Cleaning $GCC_NAME..."
+cd ..
+rm -rf $GCC_NAME build-gcc
+
+################################################################
+# Cleanup
+################################################################
+
+clear
+"$TARGET"-ld -v
+"$TARGET"-gcc --version | head -n1
+echo "Build complete, binaries are in $PREFIX"
+echo "Finished in $(($SECONDS / 60)) minutes and $(($SECONDS % 60)) seconds"
diff --git a/tools/kconf/.gitignore b/tools/kconf/.gitignore
new file mode 100644
index 0000000..4b51a2a
--- /dev/null
+++ b/tools/kconf/.gitignore
@@ -0,0 +1,4 @@
+*.tab.c
+*.tab.h
+*.yy.c
+kconf
diff --git a/tools/kconf/Makefile b/tools/kconf/Makefile
new file mode 100644
index 0000000..c6df7ee
--- /dev/null
+++ b/tools/kconf/Makefile
@@ -0,0 +1,9 @@
+kconf:
+ bison -d grammer.y
+ flex scan.l
+ gcc lex.yy.c grammer.tab.c -lfl -o kconf
+
+clean:
+ rm grammer.tab.*
+ rm lex.yy.c
+ rm kconf
diff --git a/tools/kconf/grammer.y b/tools/kconf/grammer.y
new file mode 100644
index 0000000..2f131fc
--- /dev/null
+++ b/tools/kconf/grammer.y
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Hyra nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+%{
+#include <stdio.h>
+#include <stdlib.h>
+
+int yylex();
+int yyerror(char *s);
+%}
+
+%union {
+ char *str;
+ int num;
+}
+
+%token OPTION SETVAL
+%token <str> IDENTIFIER
+%token YES NO
+%token NUMBER STRING
+
+%type <str> str STRING
+%type <num> yes_or_no YES NO
+%type <num> num NUMBER
+
+%%
+
+input:
+ | line input
+ ;
+
+line: OPTION IDENTIFIER yes_or_no {
+ printf("-D__%s=%d ", $2, $3);
+ free($2);
+ }
+ | SETVAL IDENTIFIER num {
+ printf("-D__%s=%d " , $2, $3);
+ free($2);
+ }
+ | SETVAL IDENTIFIER str {
+ printf("-D__%s=%s ", $2, $3);
+ free($2);
+ free($3);
+ }
+
+yes_or_no: YES { $$ = 1; }
+ | NO { $$ = 0; }
+ ;
+
+num: NUMBER { $$ = $1; }
+str: STRING { $$ = $1; }
+
+%%
+
+int
+main(void)
+{
+ yyparse();
+ printf("\n");
+}
diff --git a/tools/kconf/scan.l b/tools/kconf/scan.l
new file mode 100644
index 0000000..e416241
--- /dev/null
+++ b/tools/kconf/scan.l
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Hyra nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+%{
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include "grammer.tab.h"
+
+ int yyerror(char *e);
+%}
+
+%%
+
+"option" { return OPTION; }
+"setval" { return SETVAL; }
+"yes" { return YES; }
+"no" { return NO; }
+\"([^\"])*\" { yylval.str = strdup(yytext); return STRING; }
+[a-zA-Z_][a-zA-Z0-9_]+ { yylval.str = strdup(yytext); return IDENTIFIER; }
+[0-9]+ { yylval.num = atoi(yytext); return NUMBER; }
+[ \t] { /* Ignore */ }
+[\/\/.*] { /* Ignore */ }
+\n { /* IGnore */ }
+"//".* { /* Ignore */ }
+. { /* Ignore */ }
+
+%%
+
+int
+yyerror(char *e)
+{
+ printf("\n** kconf: %s **", e);
+ return 0;
+}
diff --git a/tools/ksyms b/tools/ksyms
new file mode 100755
index 0000000..643c3e1
--- /dev/null
+++ b/tools/ksyms
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+
+rm -f $1
+printf "#ifndef _KSYMS_H_\n" > $1
+printf "#define _KSYMS_H_\n\n" >> $1
+printf "#include <sys/types.h>\n\nstruct kernel_symbol" >> $1
+printf " {\n\tuint64_t addr;\n\tchar* name;\n};\n\n" >> $1
+printf "const struct kernel_symbol g_ksym_table[] = {\n" >> $1
+nm $2 | grep " [tT] " | awk '{ print " { .addr = 0x"$1", .name = \""$3"\" }," }' | sort >> $1
+printf " { .addr = (size_t)-1, .name = \"\" }\n};\n\n" >> $1
+printf "const int ksym_elem_count = sizeof(g_ksym_table) / sizeof(*g_ksym_table);\n" >> $1
+printf "\n#endif /* !_KSYMS_H_ */\n" >> $1
diff --git a/tools/update-copyright b/tools/update-copyright
new file mode 100755
index 0000000..0f2ba80
--- /dev/null
+++ b/tools/update-copyright
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Set the current year as a variable
+current_year=$(date +"%Y")
+
+# Find all files in the sys/ directory and its subdirectories
+find . -type f -print0 | while read -d $'\0' file
+do
+ # Replace the old copyright notice with the new one
+ sed -i "s/\(Copyright (c) \)2023-[0-9]\{4\}\(.*\)/\12023-${current_year}\2/g" "${file}"
+done