Core has been implemented.

This commit is contained in:
Charadon 2024-03-26 22:57:38 -04:00
commit cbfa04a9e8
14 changed files with 385 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
winbuild/
*.swp

21
bootstrap/core/00-7zip.sh Normal file
View File

@ -0,0 +1,21 @@
#!/bin/sh
set -eu
CHECKSUM="7e086cbfc9d1641733037ef384f984da30679acbfeea760a81e22e6811690409e6dd76a4d38ef24878cc73fbb3959928cd32678df9c0e6525051ea778f028aa2"
URL="https://ftp.iotib.net/Programs/7za/24.03/amd64/7za.exe"
WORKDIR="$TEMP/winbuild/7zip"
mkdir -p "$WORKDIR"
. ./functions.sh
# Download
download "$URL" "$WORKDIR/7z.exe" "$CHECKSUM"
# Install
cp "$WORKDIR/7z.exe" "../../winbuild/bin/7z.exe" || {
echo "Failed to copy 7z.exe to bin folder."
exit 1
}
# Cleanup
rm -rf "$WORKDIR"
echo "Done."

View File

@ -0,0 +1,48 @@
@echo off
setlocal
set "CHECKSUM=46d149c729331895487042290f99445c0f0a8188ba2eda1e0208f451e47663fbec1cb2f70188646626cb8d2b4a9c19dd100e2a5b3cc0a9a55826fc40aba35aec"
set URL="https://frippery.org/files/busybox/busybox-w64u-FRP-5301-gda71f7c57.exe"
set WORKDIR="%TEMP%\winbuild\coreutils"
:: Download
if not exist "..\..\winbuild\bin" (
mkdir ..\..\winbuild\bin || (
echo Failed to make winbuild prefix. Aborting.
exit /b 1
)
)
rmdir /S /Q "%WORKDIR%"
mkdir "%WORKDIR%" || (
echo Failed to make the work directory. Aborting.
exit /b 1
)
curl -o "%WORKDIR%\busybox.exe" -fL "%URL%" || (
echo Failed to download busybox. Aborting.
exit /b 1
)
:: Check download
echo Recorded Checksum: %CHECKSUM%
certutil -hashfile "%WORKDIR%\busybox.exe" sha512 | find /v "hash" > "%WORKDIR%\busybox.sha512"
set /p DOWNLOADED_CHECKSUM=<"%WORKDIR%\busybox.sha512"
echo Downloaded Checksum: %DOWNLOADED_CHECKSUM%
if not %CHECKSUM% == %DOWNLOADED_CHECKSUM% (
echo Checksums do not match. Aborting.
exit /b 1
)
:: Install
copy "%WORKDIR%\busybox.exe" "..\..\winbuild\bin\busybox.exe"
"..\..\winbuild\bin\busybox.exe" --install ..\..\winbuild\bin || (
echo Failed to install busybox. Aborting.
exit /b 1
)
:: Cleanup
rmdir /Q /S "%WORKDIR%"
endlocal
echo Done.
exit

View File

@ -0,0 +1,32 @@
#!/bin/sh
set -eu
CHECKSUM="51c54e851224c8e61990824e44faaff7c467023741e9488d5165502446c40fc2819ef3d03cd2af849b06b6be619a1206033ca4ed581e20edf2481e344a1ba232"
URL="https://github.com/mozilla/sccache/releases/download/v0.7.7/sccache-v0.7.7-x86_64-pc-windows-msvc.zip"
WORKDIR="$TEMP/winbuild/sccache"
mkdir -p "$WORKDIR"
. ./functions.sh
# Prep
printf "Downloading... "
download "$URL" "$WORKDIR/sccache.zip" "$CHECKSUM" || {
echo "Failed."
exit 1
}
echo "Success!"
# Extract and install
printf "Extracting and installing... "
'C:/Windows/System32/tar.exe' -C "$WORKDIR" --strip-components 1 -xf "$WORKDIR/sccache.zip"
cp "$WORKDIR/sccache.exe" "../../winbuild/bin/sccache.exe"
echo "Success!"
# Clean up
echo "Cleaning up... "
rm -rf "$WORKDIR" || {
echo "Failed."
exit 1
}
echo "Success!"
echo "Done."

View File

@ -0,0 +1,42 @@
#!/bin/sh
set -eu
PATH="../../winbuild/bin;$PATH"
. ./functions.sh
CHECKSUM="abc9d8df0580a3b5c18e412ff3986d2fa1f0af7738e41e806aa337d0bb9abe901b01fdc83ee090b14c93964f7bcbb6dbe8305a6b1c037a1b55e111d0fd17c8b2"
URL="https://github.com/niXman/mingw-builds-binaries/releases/download/13.2.0-rt_v11-rev0/x86_64-13.2.0-release-win32-seh-msvcrt-rt_v11-rev0.7z"
WORKDIR="$TEMP/winbuild/mingw64"
mkdir -p "$WORKDIR"
# Download
download "$URL" "$WORKDIR/mingw64.7z" "$CHECKSUM"
# Extract winlibs
echo "Extracting mingw..."
7z x -o"$WORKDIR/tmp" "$WORKDIR/mingw64.7z" || {
echo "Failed."
exit 1
}
printf "Moving files... "
cp -r "$WORKDIR"/tmp/mingw64/* "../../winbuild" || {
echo "Failed."
exit 1
}
echo "Success!"
# Copy mingw32-make to gmake
cp -v "../../winbuild/bin/mingw32-make.exe" "../../winbuild/bin/gmake.exe"
# Delete extra software
printf "Deleting /opt... "
rm -rf "../../winbuild/opt" || {
echo "Failed."
exit 1
}
echo "Success!"
# Cleanup
echo Cleaning up work files...
rm -rf "$WORKDIR"
echo Done!

View File

@ -0,0 +1,31 @@
#!/bin/sh
set -eu
PATH="../../winbuild:$PATH"
cd "$(dirname "$0")" || {
echo "Failed to change directory. Aborting."
exit 1
}
. ./functions.sh
CHECKSUM="033b232bc134a5af738dbc69362c0d3376bd9b490d6346699731e3584606b3fcc5082649b0d6c8c5be138ef91c9d834414d23c4036a4ae59d82adda69f1c22c7"
URL="https://github.com/Kitware/CMake/releases/download/v3.29.0/cmake-3.29.0-windows-x86_64.zip"
WORKDIR="$TEMP/winbuild/cmake"
mkdir -p "$WORKDIR"
# Download
download "$URL" "$WORKDIR/cmake.zip" "$CHECKSUM"
printf "Installing cmake... "
'C:/Windows/System32/tar.exe' -C '../../winbuild' --strip-components 1 -xf "$WORKDIR/cmake.zip" || {
echo Failed.
exit 1
}
echo Success!
# Cleanup
echo Cleaning up work files...
rm -rf "$WORKDIR"
echo Done.

View File

@ -0,0 +1,32 @@
#!/bin/bash
set -eu
PATH="../../winbuild/bin:$PATH"
cd "$(dirname "$0")" || {
echo "Failed to change directory. Aborting."
exit 1
}
. ./functions.sh
CHECKSUM="30f269ff414c8e7796aba3b8703b98c581986e86b8ad205f553a014b2326a65def722a0cf9b496ec1e55f081c782f15952e54ce8d6df19acfc4f74ca8464cbf1"
URL="https://github.com/indygreg/python-build-standalone/releases/download/20240224/cpython-3.12.2+20240224-x86_64-pc-windows-msvc-shared-install_only.tar.gz"
WORKDIR="$TEMP/winbuild/python"
mkdir -p "$WORKDIR"
# Download
download "$URL" "$WORKDIR/pythoninst.tar.gz" "$CHECKSUM"
# Install
mkdir -p '../../winbuild/opt/python3'
printf "Installing python... "
'C:/Windows/System32/tar.exe' -C '../../winbuild/opt/python3' --strip-components 1 -xf "$WORKDIR/pythoninst.tar.gz" || {
echo "Failed."
exit 1
}
echo "Success!"
# Cleanup
rm -rf "$WORKDIR"
echo Done.

25
bootstrap/core/04-pip.sh Normal file
View File

@ -0,0 +1,25 @@
#!/bin/bash
set -eu
PATH="../../winbuild/bin:../../winbuild/opt/python3:../../winbuild/opt/python3/Scripts:$PATH"
cd "$(dirname "$0")" || {
echo "Failed to change directory. Aborting."
exit 1
}
. ./functions.sh
CHECKSUM="bbff57368cfc59cd488bf942c53c83f857cdf60cf1beeffa0d4c8f04479d10536dda93f7e5abe94a7193d63b8a84ba646509eb684bf1b276233b79ae09371f3f"
URL="https://bootstrap.pypa.io/get-pip.py"
WORKDIR="$TEMP/pip"
mkdir -p "$WORKDIR"
# Download
download "$URL" "$WORKDIR/get-pip.py" "$CHECKSUM"
# Install
python "$WORKDIR/get-pip.py"
# Cleanup
rm -rf "$WORKDIR"
echo "Done."

View File

@ -0,0 +1,8 @@
#!/bin/sh
set -eu
PATH="../../winbuild/bin:../../winbuild/opt/python3:../../winbuild/opt/python3/Scripts:$PATH"
# Install meson via pip
pip install --force-reinstall -v "meson==1.4.0"
echo "Done."

34
bootstrap/core/06-perl.sh Normal file
View File

@ -0,0 +1,34 @@
#!/bin/sh
set -eu
PATH="$(realpath "../../winbuild/bin"):$PATH"
CHECKSUM="b5101a1278968c7cdb01a8e6c14f0ddd2825e518f4792fa8879c1fa2e5ed4685b1df21216efc657143a9156335036117c3ee05db90f2c38a4ec67a0235fb96b2"
URL="https://www.cpan.org/src/5.0/perl-5.38.2.tar.gz"
WORKDIR="$TEMP/winbuild/perl"
rm -rf "$WORKDIR" || true
mkdir -p "$WORKDIR"
. ./functions.sh
download "$URL" "$WORKDIR/perl.tar.gz" "$CHECKSUM"
# Extract
printf "Extracting perl... "
'C:/Windows/System32/tar.exe' -C "$WORKDIR" --strip-components 1 -xf "$WORKDIR/perl.tar.gz" || {
echo "Failed."
exit 1
}
echo "Success!"
# Build
mkdir -p "../../winbuild/opt/perl5"
cmd /C mingw32-make -j"$(nproc)" -C "$(path_dos "$WORKDIR/win32")" INST_TOP="$(path_dos "../../winbuild/opt/perl5")" CCHOME="$(path_dos "../../winbuild")"
cmd /C mingw32-make -j"$(nproc)" -C "$(path_dos "$WORKDIR/win32")" INST_TOP="$(path_dos "../../winbuild/opt/perl5")" CCHOME="$(path_dos "../../winbuild")" install
# Cleanup
printf "Cleaning up... "
rm -rf "$WORKDIR" || {
echo "Failed."
exit 1
}
echo "Success."
echo "Done."

26
bootstrap/core/07-git.sh Normal file
View File

@ -0,0 +1,26 @@
#!/bin/sh
set -eu
CHECKSUM="1431a3d28310e6a427c81ce489b9f9aa9e4ec8af87e499b8561d7a00edd29de23e5e84f6dc8db21f35564d32f873cc4efa556e4e21b1367649fa91b77669460d"
URL="https://github.com/git-for-windows/git/releases/download/v2.44.0.windows.1/MinGit-2.44.0-64-bit.zip"
WORKDIR="$TEMP/winbuild/git"
mkdir -p "$WORKDIR"
. ./functions.sh
# Prep
download "$URL" "$WORKDIR/git.zip" "$CHECKSUM"
# Install
printf "Installing git... "
mkdir -p "../../winbuild/opt/git"
'C:/Windows/System32/tar.exe' -C "../../winbuild/opt/git" -xf "$WORKDIR/git.zip" || {
echo "Failed."
exit 1
}
echo Success!
# Cleanup
echo "Cleaning up work files..."
rm -rf "$WORKDIR"
echo "Done."

View File

@ -0,0 +1,15 @@
#!/bin/sh
echo "Removing documentation, as it's not needed..."
rm -rf "../../winbuild/man"
rm -rf "../../winbuild/doc"
rm -rf "../../winbuild/licenses"
echo "Creating environment setup script."
cat > "../../winbuild/env.cmd" <<EOF
@echo off
set "SCRIPT_DIR=%~dp0"
set "PATH=%SCRIPT_DIR%\\bin;%SCRIPT_DIR%\\opt\\python3;%SCRIPT_DIR%\\opt\\python3\\Scripts;%SCRIPT_DIR%\\opt\\perl5\\bin;%SCRIPT_DIR%\\opt\\git\\cmd;%PATH%"
echo Activated winbuild environment!
EOF
echo "Done! Just run env.cmd found in $(realpath "../../winbuild") to use winbuild =)"

View File

@ -0,0 +1,20 @@
@echo off
setlocal
set SCRIPT_DIR="%~dp0"
call :getabsolute PREFIX "..\..\winbuild"
cd "%SCRIPT_DIR%"
start "" /WAIT /B ".\00-coreutils.cmd"
"%PREFIX%\bin\bash.exe" -c "for i in *.sh; do echo "$i"; ./"$i"; done" || (
echo Failed.
exit /b 1
)
endlocal
echo Done bootstrapping!
exit /b 0
:getabsolute
set "%1=%~f2"
exit /b

View File

@ -0,0 +1,49 @@
#!/bin/sh
set -eu
path_dos() {
printf "%s" "$(realpath "$1" | sed 's|/|\\|g')"
}
check_hashes() {
record="$1"
file="$2"
fileHash="$(sha512sum "$file" | awk '{ print $1 }')"
printf "Checksums... "
if [ ! "$record" = "$fileHash" ];
then
echo "Does not match."
echo "Recorded: $record"
echo "Downloaded: $fileHash"
exit 1
fi
echo "Match!"
return 0
}
speen() {
spin1='-'
spin2='\'
spin3='|'
spin4='/'
pid="$1"
while kill -0 "$pid" 2>/dev/null;
do
for i in $spin1 $spin2 $spin3 $spin4;
do
printf "\b$i"
sleep 0.1
done
done
printf "\bDone!\n"
}
download() {
url="$1"
output="$2"
hash="$3"
printf "Downloading $url... "
curl -s -o "$output" -fL "$url" &
speen "$!"
check_hashes "$hash" "$output"
}