mirror of
https://github.com/usatiuk/ficus.git
synced 2025-10-28 16:17:51 +01:00
toolchain
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/toolchain
|
||||
6
env.sh
Executable file
6
env.sh
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$OS2_ROOT" ]; then
|
||||
echo OS2_ROOT is blank setting default!
|
||||
export OS2_ROOT=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
|
||||
fi
|
||||
35
toolchain_scripts/binutils-i686-elf.sh
Executable file
35
toolchain_scripts/binutils-i686-elf.sh
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
set -euxo pipefail
|
||||
|
||||
if [ -z "$OS2_ROOT" ]; then
|
||||
echo "$OS2_ROOT" is blank
|
||||
fi
|
||||
|
||||
mkdir -p $OS2_ROOT/toolchain || exit 1
|
||||
|
||||
pushd $OS2_ROOT/toolchain
|
||||
|
||||
mkdir -p binutils-i686-elf
|
||||
|
||||
pushd binutils-i686-elf
|
||||
|
||||
if [ ! -d "binutils-2.41" ]; then
|
||||
wget https://ftp.gnu.org/gnu/binutils/binutils-2.41.tar.xz
|
||||
tar xvf binutils-2.41.tar.xz
|
||||
rm binutils-2.41.tar.xz
|
||||
fi
|
||||
|
||||
mkdir -p build
|
||||
|
||||
pushd build
|
||||
|
||||
export PREFIX="$OS2_ROOT/toolchain/gcc-i686-elf-prefix/"
|
||||
export TARGET=i686-elf
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
|
||||
../binutils-2.41/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
|
||||
|
||||
make -j$(nproc)
|
||||
make install
|
||||
|
||||
touch -m ../done
|
||||
35
toolchain_scripts/binutils-x86_64-elf.sh
Executable file
35
toolchain_scripts/binutils-x86_64-elf.sh
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
set -euxo pipefail
|
||||
|
||||
if [ -z "$OS2_ROOT" ]; then
|
||||
echo "$OS2_ROOT" is blank
|
||||
fi
|
||||
|
||||
mkdir -p $OS2_ROOT/toolchain || exit 1
|
||||
|
||||
pushd $OS2_ROOT/toolchain
|
||||
|
||||
mkdir -p binutils-x86_64-elf
|
||||
|
||||
pushd binutils-x86_64-elf
|
||||
|
||||
if [ ! -d "binutils-2.41" ]; then
|
||||
wget https://ftp.gnu.org/gnu/binutils/binutils-2.41.tar.xz
|
||||
tar xvf binutils-2.41.tar.xz
|
||||
rm binutils-2.41.tar.xz
|
||||
fi
|
||||
|
||||
mkdir -p build
|
||||
|
||||
pushd build
|
||||
|
||||
export PREFIX="$OS2_ROOT/toolchain/gcc-x86_64-elf-prefix/"
|
||||
export TARGET=x86_64-elf
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
|
||||
../binutils-2.41/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
|
||||
|
||||
make -j$(nproc)
|
||||
make install
|
||||
|
||||
touch -m ../done
|
||||
18
toolchain_scripts/build-all.sh
Executable file
18
toolchain_scripts/build-all.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
set -euxo pipefail
|
||||
|
||||
if [ -z "$OS2_ROOT" ]; then
|
||||
echo "$OS2_ROOT" is blank
|
||||
fi
|
||||
|
||||
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
|
||||
|
||||
"$SCRIPT_DIR"/binutils-i686-elf.sh
|
||||
"$SCRIPT_DIR"/gcc-i686-elf.sh
|
||||
|
||||
"$SCRIPT_DIR"/binutils-x86_64-elf.sh
|
||||
"$SCRIPT_DIR"/gcc-x86_64-elf.sh
|
||||
"$SCRIPT_DIR"/libstdc++-x86_64-elf.sh
|
||||
|
||||
"$SCRIPT_DIR"/grub.sh
|
||||
"$SCRIPT_DIR"/limine.sh
|
||||
48
toolchain_scripts/gcc-i686-elf.sh
Executable file
48
toolchain_scripts/gcc-i686-elf.sh
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
set -euxo pipefail
|
||||
|
||||
if [ -z "$OS2_ROOT" ]; then
|
||||
echo "$OS2_ROOT" is blank
|
||||
fi
|
||||
|
||||
mkdir -p $OS2_ROOT/toolchain || exit 1
|
||||
|
||||
pushd $OS2_ROOT/toolchain
|
||||
|
||||
mkdir -p gcc-i686-elf
|
||||
|
||||
pushd gcc-i686-elf
|
||||
|
||||
if [ ! -d gcc-13.2.0 ]; then
|
||||
wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.xz
|
||||
tar xvf gcc-13.2.0.tar.xz
|
||||
rm gcc-13.2.0.tar.xz
|
||||
fi
|
||||
|
||||
mkdir -p build
|
||||
pushd build
|
||||
|
||||
export PREFIX="$OS2_ROOT/toolchain/gcc-i686-elf-prefix/"
|
||||
export TARGET=i686-elf
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
|
||||
if [ ! -f "$OS2_ROOT/toolchain/gcc-i686-elf-prefix/bin/i686-elf-as" ]; then
|
||||
echo "binutils not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HOMEBREW_LIBS="--with-gmp=/opt/homebrew --with-mpc=/opt/homebrew --with-mpfr=/opt/homebrew"
|
||||
|
||||
ADDONS=""
|
||||
|
||||
if [ ! -z "$USE_BREW_LIBS" ]; then
|
||||
ADDONS="$HOMEBREW_LIBS $ADDONS"
|
||||
fi
|
||||
|
||||
../gcc-13.2.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --with-newlib --without-headers --enable-version-specific-runtime-libs $ADDONS
|
||||
make -j$(nproc) all-gcc
|
||||
make -j$(nproc) all-target-libgcc
|
||||
make install-gcc
|
||||
make install-target-libgcc
|
||||
|
||||
touch -m ../done
|
||||
46
toolchain_scripts/gcc-libstdcpp.patch
Normal file
46
toolchain_scripts/gcc-libstdcpp.patch
Normal file
@@ -0,0 +1,46 @@
|
||||
--- gcc-13.2.0/libstdc++-v3/configure 2023-08-21 20:42:16
|
||||
+++ gcc-13.2.0/libstdc++-v3/configure 2023-08-21 20:42:20
|
||||
@@ -71180,21 +71180,7 @@
|
||||
done
|
||||
|
||||
|
||||
- # Check for the fcntl function.
|
||||
- if test -n "${with_target_subdir}"; then
|
||||
- case "${host}" in
|
||||
- *-*-mingw*) have_fcntl=no ;;
|
||||
- *) have_fcntl=yes ;;
|
||||
- esac
|
||||
- else
|
||||
- ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl"
|
||||
-if test "x$ac_cv_func_fcntl" = xyes; then :
|
||||
- have_fcntl=yes
|
||||
-else
|
||||
have_fcntl=no
|
||||
-fi
|
||||
-
|
||||
- fi
|
||||
if test "$have_fcntl" = "yes"; then
|
||||
BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DHAVE_FCNTL=1"
|
||||
fi
|
||||
@@ -71211,21 +71197,7 @@
|
||||
_ACEOF
|
||||
|
||||
|
||||
- # Check for getexecname function.
|
||||
- if test -n "${with_target_subdir}"; then
|
||||
- case "${host}" in
|
||||
- *-*-solaris2*) have_getexecname=yes ;;
|
||||
- *) have_getexecname=no ;;
|
||||
- esac
|
||||
- else
|
||||
- ac_fn_c_check_func "$LINENO" "getexecname" "ac_cv_func_getexecname"
|
||||
-if test "x$ac_cv_func_getexecname" = xyes; then :
|
||||
- have_getexecname=yes
|
||||
-else
|
||||
have_getexecname=no
|
||||
-fi
|
||||
-
|
||||
- fi
|
||||
if test "$have_getexecname" = "yes"; then
|
||||
BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DHAVE_GETEXECNAME=1"
|
||||
fi
|
||||
57
toolchain_scripts/gcc-x86_64-elf.sh
Executable file
57
toolchain_scripts/gcc-x86_64-elf.sh
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
set -euxo pipefail
|
||||
|
||||
if [ -z "$OS2_ROOT" ]; then
|
||||
echo "$OS2_ROOT" is blank
|
||||
fi
|
||||
|
||||
mkdir -p $OS2_ROOT/toolchain || exit 1
|
||||
|
||||
pushd $OS2_ROOT/toolchain
|
||||
|
||||
mkdir -p gcc-x86_64-elf
|
||||
|
||||
pushd gcc-x86_64-elf
|
||||
|
||||
if [ ! -d gcc-13.2.0 ]; then
|
||||
wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.xz
|
||||
tar xvf gcc-13.2.0.tar.xz
|
||||
rm gcc-13.2.0.tar.xz
|
||||
fi
|
||||
|
||||
mkdir -p build
|
||||
pushd build
|
||||
|
||||
export PREFIX="$OS2_ROOT/toolchain/gcc-x86_64-elf-prefix/"
|
||||
export TARGET=x86_64-elf
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
|
||||
if [ ! -f "$OS2_ROOT/toolchain/gcc-x86_64-elf-prefix/bin/x86_64-elf-as" ]; then
|
||||
echo "binutils not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HOMEBREW_LIBS="--with-gmp=/opt/homebrew --with-mpc=/opt/homebrew --with-mpfr=/opt/homebrew"
|
||||
|
||||
ADDONS=""
|
||||
|
||||
if [ ! -z "$USE_BREW_LIBS" ]; then
|
||||
ADDONS="$HOMEBREW_LIBS $ADDONS"
|
||||
fi
|
||||
|
||||
cat <<EOF >../gcc-13.2.0/gcc/config/i386/t-x86_64-elf
|
||||
# Add libgcc multilib variant without red-zone requirement
|
||||
|
||||
MULTILIB_OPTIONS += mno-red-zone
|
||||
MULTILIB_DIRNAMES += no-red-zone
|
||||
EOF
|
||||
|
||||
sed -i .bak 's/x86_64-\*-elf\*)/x86_64-\*-elf\*)\n\ttmake_file="\${tmake_file} i386\/t-x86_64-elf"/g' "../gcc-13.2.0/gcc/config.gcc"
|
||||
|
||||
../gcc-13.2.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --with-newlib --without-headers --enable-version-specific-runtime-libs $ADDONS
|
||||
make -j$(nproc) all-gcc
|
||||
make -j$(nproc) all-target-libgcc
|
||||
make install-gcc
|
||||
make install-target-libgcc
|
||||
|
||||
touch -m ../done
|
||||
46
toolchain_scripts/grub.sh
Executable file
46
toolchain_scripts/grub.sh
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
set -euxo pipefail
|
||||
|
||||
if [ -z "$OS2_ROOT" ]; then
|
||||
echo "$OS2_ROOT" is blank
|
||||
fi
|
||||
|
||||
mkdir -p $OS2_ROOT/toolchain || exit 1
|
||||
|
||||
pushd $OS2_ROOT/toolchain
|
||||
|
||||
mkdir -p grub
|
||||
|
||||
pushd grub
|
||||
|
||||
mkdir -p prefix
|
||||
|
||||
if [ ! -d "grub-2.06" ]; then
|
||||
wget https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz
|
||||
tar xvf grub-2.06.tar.xz
|
||||
rm grub-2.06.tar.xz
|
||||
fi
|
||||
|
||||
mkdir -p build
|
||||
|
||||
pushd build
|
||||
|
||||
if [ ! -f "$OS2_ROOT/toolchain/gcc-i686-elf-prefix/bin/i686-elf-gcc" ]; then
|
||||
echo "binutils not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export PATH="$OS2_ROOT/toolchain/gcc-i686-elf-prefix/bin":"$PATH"
|
||||
|
||||
export PREFIX="$OS2_ROOT/toolchain/grub/prefix"
|
||||
export TARGET=i686-elf
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
|
||||
../grub-2.06/configure --disable-werror TARGET_CC=i686-elf-gcc TARGET_AS=i686-elf-as TARGET_OBJCOPY=i686-elf-objcopy \
|
||||
TARGET_STRIP=i686-elf-strip TARGET_NM=i686-elf-nm TARGET_RANLIB=i686-elf-ranlib --target="$TARGET" \
|
||||
--prefix="$PREFIX"
|
||||
|
||||
make -j$(nproc)
|
||||
make install
|
||||
|
||||
touch -m ../done
|
||||
53
toolchain_scripts/libstdc++-x86_64-elf.sh
Executable file
53
toolchain_scripts/libstdc++-x86_64-elf.sh
Executable file
@@ -0,0 +1,53 @@
|
||||
#!/bin/bash
|
||||
set -euxo pipefail
|
||||
|
||||
if [ -z "$OS2_ROOT" ]; then
|
||||
echo "$OS2_ROOT" is blank
|
||||
fi
|
||||
|
||||
mkdir -p $OS2_ROOT/toolchain || exit 1
|
||||
|
||||
cd $OS2_ROOT/toolchain
|
||||
|
||||
cd gcc-x86_64-elf || exit 1
|
||||
|
||||
if [ ! -d gcc-13.2.0 ]; then
|
||||
echo "GCC Sources not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$OS2_ROOT/toolchain/gcc-x86_64-elf-prefix/bin/x86_64-elf-as" ]; then
|
||||
echo "binutils not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$OS2_ROOT/toolchain/gcc-x86_64-elf-prefix/bin/x86_64-elf-gcc" ]; then
|
||||
echo "gcc not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
|
||||
patch -u -i "$SCRIPT_DIR/gcc-libstdcpp.patch"
|
||||
|
||||
export PREFIX="$OS2_ROOT/toolchain/gcc-x86_64-elf-prefix/"
|
||||
export TARGET=x86_64-elf
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
|
||||
# Note that you might have to go into the configure script and remove tests for fcntl and maybe other errors
|
||||
mkdir -p libstdcppbuild
|
||||
cd libstdcppbuild
|
||||
../gcc-13.2.0/libstdc++-v3/configure \
|
||||
--host=$TARGET \
|
||||
--prefix="$PREFIX" \
|
||||
--disable-nls \
|
||||
--with-newlib \
|
||||
--without-headers \
|
||||
--disable-libstdcxx-threads \
|
||||
--disable-hosted-libstdcxx \
|
||||
--enable-version-specific-runtime-libs
|
||||
|
||||
make -j$(nproc) CFLAGS_FOR_TARGET='-g -O2 -mcmodel=large -mno-red-zone'
|
||||
make install
|
||||
|
||||
touch -m ../donelibstdcpp
|
||||
47
toolchain_scripts/limine.sh
Executable file
47
toolchain_scripts/limine.sh
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
set -euxo pipefail
|
||||
|
||||
if [ -z "$OS2_ROOT" ]; then
|
||||
echo "$OS2_ROOT" is blank
|
||||
fi
|
||||
|
||||
mkdir -p $OS2_ROOT/toolchain || exit 1
|
||||
|
||||
pushd $OS2_ROOT/toolchain
|
||||
|
||||
mkdir -p limine
|
||||
|
||||
pushd limine
|
||||
|
||||
mkdir -p prefix
|
||||
|
||||
if [ ! -d "limine-5.20230830.0" ]; then
|
||||
wget https://github.com/limine-bootloader/limine/releases/download/v5.20230830.0/limine-5.20230830.0.tar.xz
|
||||
tar xvf limine-5.20230830.0.tar.xz
|
||||
rm limine-5.20230830.0.tar.xz
|
||||
fi
|
||||
|
||||
mkdir -p build
|
||||
|
||||
pushd build
|
||||
|
||||
if [ ! -f "$OS2_ROOT/toolchain/gcc-i686-elf-prefix/bin/i686-elf-gcc" ]; then
|
||||
echo "binutils not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export PATH="$OS2_ROOT/toolchain/gcc-i686-elf-prefix/bin":"$PATH"
|
||||
export PATH="$OS2_ROOT/toolchain/gcc-x86_64-elf-prefix/bin":"$PATH"
|
||||
|
||||
export PREFIX="$OS2_ROOT/toolchain/limine/prefix"
|
||||
export PATH="$PREFIX/bin:$PATH"
|
||||
|
||||
# fix for old make
|
||||
grep -rl "define DEFAULT_VAR =" ../limine-5.20230830.0 | xargs sed -i "" -e 's/define DEFAULT_VAR =/define DEFAULT_VAR/g'
|
||||
|
||||
../limine-5.20230830.0/configure --disable-werror --enable-bios-cd --enable-bios --enable-uefi-ia32 --enable-uefi-x86-64 --enable-uefi-cd \
|
||||
--prefix="$PREFIX"
|
||||
|
||||
make -j$(nproc) install
|
||||
|
||||
touch -m ../done
|
||||
Reference in New Issue
Block a user