From 439d4ef8ac7b78b5462a4413829b106512906fda Mon Sep 17 00:00:00 2001 From: Kieron Morris Date: Mon, 5 Jul 2021 19:07:33 +0100 Subject: [PATCH 01/10] Tidied out comments for docgen. Added some documentation to Asuro.pas & ProgManager. --- compile_vergen.sh | 36 +++++++++++++++++++--------------- src/driver/storage/AHCI.pas | 14 +++++-------- src/driver/storage/ATA_ISR.pas | 14 +++++-------- src/driver/storage/asfs.pas | 15 +++++--------- src/progmanager.pas | 6 ++++++ 5 files changed, 41 insertions(+), 44 deletions(-) diff --git a/compile_vergen.sh b/compile_vergen.sh index f25df4b9..e5a8cd9d 100644 --- a/compile_vergen.sh +++ b/compile_vergen.sh @@ -24,26 +24,30 @@ nasmversion=$(nasm -v | awk '{print $3'}) compiledate=$(date +"%d/%m/%y") compiletime=$(date +"%T") checksum=$(md5sum checksums.md5 | awk '{print $1}') -echo "unit asuro;" > $outfile +echo "{" > $outfile +echo " asuro.pas - Constants generated during pipeline/compilation for use at runtime." >> $outfile +echo " @author(Autogenerated)" >> $outfile +echo "}" >> $outfile +echo "unit asuro;" >> $outfile echo " " >> $outfile echo "interface" >> $outfile echo " " >> $outfile echo "const" >> $outfile -echo " VERSION = '$major.$minor.$sub-$revision$release';" >> $outfile -echo " VERSION_MAJOR = '$major';" >> $outfile -echo " VERSION_MINOR = '$minor';" >> $outfile -echo " VERSION_SUB = '$sub';" >> $outfile -echo " REVISION = '$revision';" >> $outfile -echo " RELEASE = '$release';" >> $outfile -echo " LINE_COUNT = $linecount;" >> $outfile -echo " FILE_COUNT = $sourcecount;" >> $outfile -echo " DRIVER_COUNT = $drivercount;" >> $outfile -echo " FPC_VERSION = '$fpcversion';" >> $outfile -echo " NASM_VERSION = '$nasmversion';" >> $outfile -echo " MAKE_VERSION = '$makeversion';" >> $outfile -echo " COMPILE_DATE = '$compiledate';" >> $outfile -echo " COMPILE_TIME = '$compiletime';" >> $outfile -echo " CHECKSUM = '$checksum';" >> $outfile +echo " VERSION = '$major.$minor.$sub-$revision$release'; //The current full version as a string." >> $outfile +echo " VERSION_MAJOR = '$major'; // Current major version as a string." >> $outfile +echo " VERSION_MINOR = '$minor'; // Current minor version as a string." >> $outfile +echo " VERSION_SUB = '$sub'; // Current sub version as a string." >> $outfile +echo " REVISION = '$revision'; // Current revision as a string." >> $outfile +echo " RELEASE = '$release'; // Current release as a string." >> $outfile +echo " LINE_COUNT = $linecount; // Project line count as compiled as a string." >> $outfile +echo " FILE_COUNT = $sourcecount; // Project line count as compiled as a string." >> $outfile +echo " DRIVER_COUNT = $drivercount; // Number of baked drivers in the current binary." >> $outfile +echo " FPC_VERSION = '$fpcversion'; // Version of the FreePascal Compiler used to compile the current binary." >> $outfile +echo " NASM_VERSION = '$nasmversion'; // Version of the Netwide Assembler used to compile the multiboot stub." >> $outfile +echo " MAKE_VERSION = '$makeversion'; // Version of MAKE used to link the current binary." >> $outfile +echo " COMPILE_DATE = '$compiledate'; // Date in which the current binary was compiled." >> $outfile +echo " COMPILE_TIME = '$compiletime'; // Time in which the current binary was compiled." >> $outfile +echo " CHECKSUM = '$checksum'; // MD5 pseduo-checksum of all of the sourcefiles together." >> $outfile echo " " >> $outfile echo "implementation" >> $outfile echo " " >> $outfile diff --git a/src/driver/storage/AHCI.pas b/src/driver/storage/AHCI.pas index 027d4167..3cac039f 100644 --- a/src/driver/storage/AHCI.pas +++ b/src/driver/storage/AHCI.pas @@ -12,15 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -{ ************************************************ - * Asuro - * Unit: Drivers/AHCI - * Description: AHCI SATA Driver - ************************************************ - * Author: Aaron Hance - * Contributors: - ************************************************ } - +{ + Drivers->Storage->AHCI - AHCI SATA Driver. + + @author(Aaron Hance ) +} unit AHCI; interface diff --git a/src/driver/storage/ATA_ISR.pas b/src/driver/storage/ATA_ISR.pas index b6422d9b..a3bd1cb3 100644 --- a/src/driver/storage/ATA_ISR.pas +++ b/src/driver/storage/ATA_ISR.pas @@ -12,15 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -{ ************************************************ - * Asuro - * Unit: Drivers/ISR46 - * Description: Primary ATA IRQ - ************************************************ - * Author: Aaron Hance - * Contributors: - ************************************************ } - +{ + Drivers->Storage->ATA_ISR - Primary ATA IRQ. + + @author(Aaron Hance ) +} unit ATA_ISR; interface diff --git a/src/driver/storage/asfs.pas b/src/driver/storage/asfs.pas index 2bafd9a9..8c458993 100644 --- a/src/driver/storage/asfs.pas +++ b/src/driver/storage/asfs.pas @@ -12,16 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -{ ************************************************ - * Asuro - * Unit: Drivers/storage/asfs - * Description: asfs file system driver - * - ************************************************ - * Author: Aaron Hance - * Contributors: - ************************************************ } - +{ + Drivers->Storage->ASFS - Asuro Filesystem Driver. + + @author(Aaron Hance ) +} unit asfs; interface diff --git a/src/progmanager.pas b/src/progmanager.pas index 842ac6c4..24563758 100644 --- a/src/progmanager.pas +++ b/src/progmanager.pas @@ -12,6 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. +{ + ProgManager - Central initialization for terminal registered, baked-in programs. + + @author(Kieron Morris ) +} unit progmanager; interface @@ -23,6 +28,7 @@ uses edit, netlog, themer, memview, udpcat, dhclient, vbeinfo; +{ Initialize all baked-in programs } procedure init(); implementation From 33cb042b8c4dd941af670aa83276ae366f8d389e Mon Sep 17 00:00:00 2001 From: Kieron Morris Date: Mon, 5 Jul 2021 19:18:32 +0100 Subject: [PATCH 02/10] Changed comments in Asuro.pas when generated Changed the Asuro.pas comment to be the standard format in terms of Directory->File (no .pas) for PasDoc gen. --- compile_vergen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compile_vergen.sh b/compile_vergen.sh index e5a8cd9d..b12cbe7d 100644 --- a/compile_vergen.sh +++ b/compile_vergen.sh @@ -25,7 +25,7 @@ compiledate=$(date +"%d/%m/%y") compiletime=$(date +"%T") checksum=$(md5sum checksums.md5 | awk '{print $1}') echo "{" > $outfile -echo " asuro.pas - Constants generated during pipeline/compilation for use at runtime." >> $outfile +echo " Include->Asuro - Constants generated during pipeline/compilation for use at runtime." >> $outfile echo " @author(Autogenerated)" >> $outfile echo "}" >> $outfile echo "unit asuro;" >> $outfile From 2939afa729900bb73bf17f8b524934b0b084d93b Mon Sep 17 00:00:00 2001 From: Jinux Date: Tue, 6 Jul 2021 19:18:23 +0000 Subject: [PATCH 03/10] 3 time the charm --- .gitlab-ci.yml | 82 +++++++++++---------------------- Dockerfile | 22 +++++---- compile.sh | 57 +++++++++-------------- compile_checksum.sh | 2 +- compile_docs.sh | 5 +-- compile_finish.sh | 4 +- compile_isogen.sh | 2 +- compile_link.sh | 2 +- compile_sourcelist.sh | 2 +- compile_sources.sh | 2 +- compile_stub.sh | 3 +- compile_sumgen.sh | 2 +- compile_vergen.sh | 102 +++++++++++++++++++++++------------------- 13 files changed, 126 insertions(+), 161 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e3feb40e..a47b6d0c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,25 +1,23 @@ stages: - - Generate Stub and Versions - - Generate Version Files + - Compile Versions - Compile Sources - Link - - Generate ISO - - Generate Sources List - Generate Documentation + - Deploy -compile_stub: - stage: Generate Stub and Versions - script: - - chmod +x ./compile_stub.sh - - ./compile_stub.sh - artifacts: +cache: + - key: ${CI_COMMIT_REF_SLUG} paths: - - lib/stub.o + - lib/*.o + - bin/kernel.bin + - doc -vergen: - stage: Generate Stub and Versions - script: - - chmod +x ./compile_vergen.sh +before_script: + - chmod +x *.sh + +versions: + stage: Compile Versions + script: - ./compile_vergen.sh artifacts: paths: @@ -29,71 +27,45 @@ vergen: compile_sources: stage: Compile Sources script: - - chmod +x ./compile_sources.sh + - rm -f lib/*.so - ./compile_sources.sh - artifacts: - paths: - - lib/*.o - dependencies: - - compile_stub - - vergen needs: - - vergen - - compile_stub + - versions link: stage: Link script: - - chmod +x ./compile_link.sh + - ./compile_stub.sh - ./compile_link.sh - artifacts: - paths: - - bin/kernel.bin - dependencies: - - compile_sources needs: + - versions - compile_sources isogen: - stage: Generate ISO + stage: Deploy script: - - chmod +x ./compile_isogen.sh - ./compile_isogen.sh - - chmod +x ./compile_sumgen.sh - ./compile_sumgen.sh artifacts: paths: - ./Asuro.iso - ./release/checksum.svg - dependencies: - - link needs: - link -sourcelist: - stage: Generate Sources List - script: - - chmod +x ./compile_sourcelist.sh - - ./compile_sourcelist.sh - artifacts: - paths: - - ./sources.list - dependencies: - - vergen - needs: - - vergen - docgen: stage: Generate Documentation + only: + - master + - develop script: - - chmod +x ./compile_docs.sh + - ./compile_sourcelist.sh - ./compile_docs.sh + - ln -s doc public + allow_failure: true artifacts: paths: - - ./doc/* - dependencies: - - vergen - - sourcelist + - public + - ./sources.list needs: - - vergen - - sourcelist \ No newline at end of file + - versions diff --git a/Dockerfile b/Dockerfile index 6b345c26..a366a1a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,18 +2,22 @@ FROM ubuntu:latest VOLUME ["/code"] +ENV DEBIAN_FRONTEND=noninteractive RUN dpkg --add-architecture i386 -RUN apt-get update -RUN apt-get install nasm curl make:i386 binutils:i386 xorriso grub-pc-bin dos2unix -y -RUN apt-get clean -RUN curl https://sourceforge.net/projects/freepascal/files/Linux/2.6.4/fpc-2.6.4.i386-linux.tar/download --output fpc.tar -L && \ - tar -xf fpc.tar +RUN apt-get update && apt-get install -y \ + curl dos2unix wget git make nasm binutils:i386 xorriso grub-pc-bin && \ + apt-get clean my room -WORKDIR ./fpc-2.6.4.i386-linux -RUN ./install.sh +SHELL ["/bin/bash", "-c"] +ARG FPC_VERSION=2.6.4 +RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSION/fpc-$FPC_VERSION.i386-linux.tar/download | tar -xf - && \ + pushd fpc-$FPC_VERSION.i386-linux && ./install.sh && popd && \ + rm -rf fpc-$FPC_VERSION.i386-linux COPY compile.sh /compile.sh -RUN mkdir /code +ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /usr/bin/semver +RUN mkdir /code && chmod +x /usr/bin/semver WORKDIR /code RUN find . -type f -print0 | xargs -0 dos2unix -ENTRYPOINT ["/bin/bash", "/compile.sh"] \ No newline at end of file +ENTRYPOINT ["/bin/bash", "-c"] +CMD ["/compile.sh"] \ No newline at end of file diff --git a/compile.sh b/compile.sh index 20a282a2..c55accb7 100755 --- a/compile.sh +++ b/compile.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash ERRCOUNT=0 echo " " echo "=======================" @@ -7,49 +7,32 @@ echo "Asuro Compilation" echo " " #Compile Stub.asm -./compile_stub.sh -if [ $? -ne 0 ] -then - echo "Failed to compile stub!" - ERRCOUNT=$((ERRCOUNT+1)) -else - echo "Success." -fi +rm lib/* + +runOrFail() { + local binary=$1 + local errorText=$2 + if $binary; then + echo "Success." + else + echo "$errorText" + ERRCOUNT=$((ERRCOUNT+1)) + fi +} + +runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!" #Generate .pas with versioning headers. -./compile_vergen.sh +runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile" #Compile all .pas sources -./compile_sources.sh -if [ $? -ne 0 ] -then - echo " " - echo "Failed to compile FPC Sources!" - ERRCOUNT=$((ERRCOUNT+1)) -else - echo " " - echo "Success." -fi +runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!" #Link into a binary. -./compile_link.sh -if [ $? -ne 0 ] -then - echo "Failed linking!" - ERRCOUNT=$((ERRCOUNT+1)) -else - echo "Success." -fi +runOrFail $(pwd)/compile_link.sh "Failed linking!" #Generate an ISO with GRUB as the Bootloader. -./compile_isogen.sh -if [ $? -ne 0 ] -then - echo "Failed to create ISO!" - ERRCOUNT=$((ERRCOUNT+1)) -else - echo "Success." -fi +runOrFail ./compile_isogen.sh "Failed to create ISO!" #Call generate final artifacts based on failure or success of the above. if [ "$ERRCOUNT" -ne "0" ] @@ -59,4 +42,4 @@ else ./compile_finish.sh "success" fi -cd .. +cd .. \ No newline at end of file diff --git a/compile_checksum.sh b/compile_checksum.sh index c0594d70..8ace0722 100644 --- a/compile_checksum.sh +++ b/compile_checksum.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash echo > checksums.md5 for directory in $(find src/ -maxdepth 10 -type d); do for filename in $directory/*.pas; do diff --git a/compile_docs.sh b/compile_docs.sh index 4edbc951..5a7910a0 100644 --- a/compile_docs.sh +++ b/compile_docs.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash echo " " echo "=======================" echo " " @@ -14,5 +14,4 @@ echo "Removing old docs" rm -rf ./doc/* echo "Generating Docs..." ./pasdoc/bin/pasdoc -N "Asuro" -T "Asuro OS Documentation" -O "html" -E ./doc/ -S sources.list --use-tipue-search -echo "Docgen finished." -exit 0 \ No newline at end of file +echo "Docgen finished." \ No newline at end of file diff --git a/compile_finish.sh b/compile_finish.sh index 206895fb..0e9f3c09 100644 --- a/compile_finish.sh +++ b/compile_finish.sh @@ -1,8 +1,8 @@ -#/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " -if [ "$1" == "failed" ] +if [[ "$1" == "failed" ]] then echo "Errors Occurred, please review." wget -q https://img.shields.io/badge/build-failed-red.svg -O release/build.svg 2>/dev/null diff --git a/compile_isogen.sh b/compile_isogen.sh index efec801d..4af8522b 100644 --- a/compile_isogen.sh +++ b/compile_isogen.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_link.sh b/compile_link.sh index f8611920..cc9998c2 100644 --- a/compile_link.sh +++ b/compile_link.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_sourcelist.sh b/compile_sourcelist.sh index 9d6b9539..7001cb77 100644 --- a/compile_sourcelist.sh +++ b/compile_sourcelist.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_sources.sh b/compile_sources.sh index aedefff5..c8f6db32 100644 --- a/compile_sources.sh +++ b/compile_sources.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_stub.sh b/compile_stub.sh index 3f834379..72c829a7 100644 --- a/compile_stub.sh +++ b/compile_stub.sh @@ -1,8 +1,7 @@ -#!/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " echo "Compiling Stub..." echo " " -rm lib/* nasm -f elf src/stub/stub.asm -o lib/stub.o \ No newline at end of file diff --git a/compile_sumgen.sh b/compile_sumgen.sh index f0f961d1..42d4d228 100644 --- a/compile_sumgen.sh +++ b/compile_sumgen.sh @@ -1,4 +1,4 @@ -#/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_vergen.sh b/compile_vergen.sh index b12cbe7d..cb9ae513 100644 --- a/compile_vergen.sh +++ b/compile_vergen.sh @@ -1,4 +1,5 @@ -#!/bin/bash +#!/usr/bin/env bash +set -e echo " " echo "=======================" echo " " @@ -8,60 +9,67 @@ chmod +x ./compile_checksum.sh ./compile_checksum.sh outfile="src/include/asuro.pas" file="version" -while IFS=: read -r line;do - major=$(echo $line | awk '{print $1}') - minor=$(echo $line | awk '{print $2}') - sub=$(echo $line | awk '{print $3}') - release=$(echo $line | awk '{print $4}') -done <"$file" +{ + # this script requires semver tool + wget -q https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver -O bin/semver && chmod +x bin/semver + export PATH="$(pwd)/bin:$PATH" +} +tagref=$(git describe --tags) +revision=$(git rev-parse --short=8 HEAD) +major=$(semver get major $tagref) +minor=$(semver get minor $tagref) +sub=$(semver get patch $tagref) +version=$(semver get release $tagref) +release=$(semver get prerel $tagref) +build=$(semver get build $tagref) linecount=$(./loc.sh | awk '{print $1}') sourcecount=$(find src -type f | wc -l) drivercount=$(find src/driver -type f | wc -l) -revision=$(git rev-list --all --count) fpcversion=$(fpc -h | grep -m 1 version | awk '{print $5}') makeversion=$(make -v | grep GNU | awk '{print $3}' | grep -v GNU) nasmversion=$(nasm -v | awk '{print $3'}) compiledate=$(date +"%d/%m/%y") compiletime=$(date +"%T") checksum=$(md5sum checksums.md5 | awk '{print $1}') -echo "{" > $outfile -echo " Include->Asuro - Constants generated during pipeline/compilation for use at runtime." >> $outfile -echo " @author(Autogenerated)" >> $outfile -echo "}" >> $outfile -echo "unit asuro;" >> $outfile -echo " " >> $outfile -echo "interface" >> $outfile -echo " " >> $outfile -echo "const" >> $outfile -echo " VERSION = '$major.$minor.$sub-$revision$release'; //The current full version as a string." >> $outfile -echo " VERSION_MAJOR = '$major'; // Current major version as a string." >> $outfile -echo " VERSION_MINOR = '$minor'; // Current minor version as a string." >> $outfile -echo " VERSION_SUB = '$sub'; // Current sub version as a string." >> $outfile -echo " REVISION = '$revision'; // Current revision as a string." >> $outfile -echo " RELEASE = '$release'; // Current release as a string." >> $outfile -echo " LINE_COUNT = $linecount; // Project line count as compiled as a string." >> $outfile -echo " FILE_COUNT = $sourcecount; // Project line count as compiled as a string." >> $outfile -echo " DRIVER_COUNT = $drivercount; // Number of baked drivers in the current binary." >> $outfile -echo " FPC_VERSION = '$fpcversion'; // Version of the FreePascal Compiler used to compile the current binary." >> $outfile -echo " NASM_VERSION = '$nasmversion'; // Version of the Netwide Assembler used to compile the multiboot stub." >> $outfile -echo " MAKE_VERSION = '$makeversion'; // Version of MAKE used to link the current binary." >> $outfile -echo " COMPILE_DATE = '$compiledate'; // Date in which the current binary was compiled." >> $outfile -echo " COMPILE_TIME = '$compiletime'; // Time in which the current binary was compiled." >> $outfile -echo " CHECKSUM = '$checksum'; // MD5 pseduo-checksum of all of the sourcefiles together." >> $outfile -echo " " >> $outfile -echo "implementation" >> $outfile -echo " " >> $outfile -echo "end." >> $outfile + +[[ -n "$release" ]] && version="$version-$release" +cat > $outfile </dev/null -wget -q https://img.shields.io/badge/revision-$revision-blue.svg -O release/revision.svg 2>/dev/null -wget -q https://img.shields.io/badge/release-$release-blue.svg -O release/release.svg 2>/dev/null -wget -q https://img.shields.io/badge/lines-$linecount-blueviolet.svg -O release/lines.svg 2>/dev/null -wget -q https://img.shields.io/badge/files-$sourcecount-blueviolet.svg -O release/files.svg 2>/dev/null -wget -q https://img.shields.io/badge/drivers-$drivercount-blueviolet.svg -O release/drivers.svg 2>/dev/null -wget -q https://img.shields.io/badge/FPC_version-$fpcversion-lightgrey.svg -O release/fpcversion.svg 2>/dev/null -wget -q https://img.shields.io/badge/NASM_version-$nasmversion-lightgrey.svg -O release/nasmversion.svg 2>/dev/null -wget -q https://img.shields.io/badge/MAKE_version-$makeversion-lightgrey.svg -O release/makeversion.svg 2>/dev/null -wget -q https://img.shields.io/badge/release_date-$compiledate-lightgrey.svg -O release/date.svg 2>/dev/null -wget -q https://img.shields.io/badge/fingerprint-$checksum-important.svg -O release/fingerprint.svg 2>/dev/null +set +e # These can fail on branches and such, for now +wget -q https://img.shields.io/badge/version-$major.$minor.$sub--$revision$release-blue.svg -O release/version.svg +wget -q https://img.shields.io/badge/revision-$revision-blue.svg -O release/revision.svg +wget -q https://img.shields.io/badge/release-$release-blue.svg -O release/release.svg +wget -q https://img.shields.io/badge/lines-$linecount-blueviolet.svg -O release/lines.svg +wget -q https://img.shields.io/badge/files-$sourcecount-blueviolet.svg -O release/files.svg +wget -q https://img.shields.io/badge/drivers-$drivercount-blueviolet.svg -O release/drivers.svg +wget -q https://img.shields.io/badge/FPC_version-$fpcversion-lightgrey.svg -O release/fpcversion.svg +wget -q https://img.shields.io/badge/NASM_version-$nasmversion-lightgrey.svg -O release/nasmversion.svg +wget -q https://img.shields.io/badge/MAKE_version-$makeversion-lightgrey.svg -O release/makeversion.svg +wget -q https://img.shields.io/badge/release_date-$compiledate-lightgrey.svg -O release/date.svg +wget -q https://img.shields.io/badge/fingerprint-$checksum-important.svg -O release/fingerprint.svg echo "Done versioning." From 34d6873a6aa1bd86152ce3366ea7d72e716971fd Mon Sep 17 00:00:00 2001 From: Kieron Morris Date: Tue, 6 Jul 2021 20:35:26 +0100 Subject: [PATCH 04/10] Docgen changes Changed docgen job to create doc folder, not public for now. --- .gitlab-ci.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a47b6d0c..5613dcbb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -61,11 +61,13 @@ docgen: script: - ./compile_sourcelist.sh - ./compile_docs.sh - - ln -s doc public + # Remove comments when we want to use gitlab pages. + #- cp doc public allow_failure: true artifacts: paths: - - public - - ./sources.list + - doc + #- public/* + #- ./sources.list needs: - versions From b2eee58df4f74e871fa1ca50e09dbd73848cc6e1 Mon Sep 17 00:00:00 2001 From: Kieron Date: Sat, 29 Jan 2022 12:46:35 +0000 Subject: [PATCH 05/10] Update readme.md --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 6ec79d39..0f1f1865 100644 --- a/readme.md +++ b/readme.md @@ -31,11 +31,11 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f 7. Clone this repository. 8. Run the following command in the root of the repo to build the docker image: ```powershell - docker-compose build builder + docker compose build builder ``` 9. Run the following command to compile Asuro: ```powershell - docker-compose run builder + docker compose run builder ``` 10. Create a new virtual machine in Virtualbox and mount the `Asuro.iso` generated in step 9 as a boot image. 11. Add the virtualbox installation directory to your `%PATH%` environment variable, usually: @@ -78,4 +78,4 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f 14. Congratulations! You can now play with Asuro! ### Gotchas -- It was noted that Windows builds above `20H2` seem to have issues installing WSL2. We may have to wait for a patch from Microsoft to fix this. Our devs are currently using build `20H2`. \ No newline at end of file +- It was noted that Windows builds above `20H2` seem to have issues installing WSL2. We may have to wait for a patch from Microsoft to fix this. Our devs are currently using build `20H2`. From 98481ea1ce9b6f4c4f9ba440e278c63c4eb6b987 Mon Sep 17 00:00:00 2001 From: aaronhance Date: Mon, 31 Jan 2022 00:34:38 +0000 Subject: [PATCH 06/10] Added new String functions (cherry picked from commit 24c371cab18a9aecb9fe792dcefacbffd847622a) --- src/include/strings.pas | 93 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/src/include/strings.pas b/src/include/strings.pas index 485dbb24..8c231233 100644 --- a/src/include/strings.pas +++ b/src/include/strings.pas @@ -16,6 +16,7 @@ Include->Strings - String Manipulation. @author(Kieron Morris ) + @author(Aaron Hance ) } unit strings; @@ -33,6 +34,10 @@ function stringCopy(str : pchar) : pchar; function stringNew(size : uint32) : pchar; function stringSize(str : pchar) : uint32; function stringConcat(str1, str2 : pchar) : pchar; +function stringTrim(str : pchar; length : uint32) : pchar; +function stringSub(str : pchar; start, size : uint32) : pchar; +function stringReplace(str, find, replace : pchar) : pchar; +function stringIndexOf(str, find : pchar) : sint32; function stringContains(str : pchar; sub : pchar) : boolean; function stringToInt(str : pchar) : uint32; function hexStringToInt(str : pchar) : uint32; @@ -151,6 +156,94 @@ begin stringConcat:= result; end; +// Trim the string to the specified length. +function stringTrim(str : pchar; length : uInt32) : pchar; +var + result : pchar; +begin + result:= stringNew(length); + memcpy(uint32(str), uint32(result), length); + stringTrim:= result; +end; + +// Return a substring of the string. +function stringSub(str : pchar; start, size : uint32) : pchar; +var + result : pchar; +begin + result:= stringNew(size); + memcpy(uint32(str)+start, uint32(result), size); + stringSub:= result; +end; + +// Replace first instance of a string with another. +function stringReplace(str, find, replace : pchar) : pchar; +var + result : pchar; + i, j, k : uint32; + found : boolean; +begin + + // Find the first instance of the find string. + i:= 0; + found:= false; + while (i < stringSize(str)) and (not found) do begin + if stringEquals(str+i, find) then begin + found:= true; + end else begin + inc(i); + end; + end; + + // If we found the find string, replace it. + if found then begin + result:= stringNew(stringSize(str) - stringSize(find) + stringSize(replace)); + j:= 0; + k:= 0; + while i < stringSize(str) do begin + if stringEquals(str+i, find) then begin + memcpy(uint32(replace), uint32(result+j), stringSize(replace)); + j:= j + stringSize(replace); + inc(i, stringSize(find)); + end else begin + result[j]:= str[i]; + inc(j); + inc(i); + end; + end; + stringReplace:= result; + end else begin + stringReplace:= stringCopy(str); + end; + + // Return the result. + stringReplace:= result; + +end; + + +// Find the index of the first instance of a string. +function stringIndexOf(str, find : pchar) : sint32; +var + i : uint32; + found : boolean; +begin + i:= 0; + found:= false; + while (i < stringSize(str)) and (not found) do begin + if stringEquals(str+i, find) then begin + found:= true; + end else begin + inc(i); + end; + end; + if found then begin + stringIndexOf:= i; + end else begin + stringIndexOf:= -1; + end; +end; + function stringContains(str : pchar; sub : pchar) : boolean; var strEnd, subEnd, i, j, count : uint32; From 208bda92c807d8028d356e8406ccd2fa82704ab4 Mon Sep 17 00:00:00 2001 From: Kieron Morris Date: Sun, 6 Feb 2022 13:29:29 +0000 Subject: [PATCH 07/10] Kernel Size Awareness Modified the linker script + Added an init function to System.pas to be called at system boot, this allows tracking of the Kernel start & end addresses, and thus, allows us to calculate the kernel size. --- linker.script | 3 ++- src/include/system.pas | 16 ++++++++++++++++ src/kernel.pas | 3 +++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/linker.script b/linker.script index 875bfc95..91a7a72a 100644 --- a/linker.script +++ b/linker.script @@ -2,7 +2,7 @@ ENTRY(loader) SECTIONS { . = 0xC0100000; - + kernel_start = .; .text : AT(ADDR(.text) - 0xC0000000) { text = .; _text = .; __text = .; @@ -33,4 +33,5 @@ SECTIONS . = ALIGN(4096); } end = .; _end = .; __end = .; + kernel_end = .; } diff --git a/src/include/system.pas b/src/include/system.pas index dd4354a0..977ddead 100644 --- a/src/include/system.pas +++ b/src/include/system.pas @@ -143,6 +143,22 @@ type PText = ^Text; +var + AK_START : uint32; external name 'kernel_start'; + AK_END : uint32; external name 'kernel_end'; + ASURO_KERNEL_START : uint32; + ASURO_KERNEL_END : uint32; + ASURO_KERNEL_SIZE : uint32; + +procedure init(); + implementation +procedure init(); +begin + ASURO_KERNEL_START := uint32(@AK_START); + ASURO_KERNEL_END := uint32(@AK_END); + ASURO_KERNEL_SIZE:= ASURO_KERNEL_END - ASURO_KERNEL_START; +end; + end. diff --git a/src/kernel.pas b/src/kernel.pas index 9b40accc..ace9f2a1 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -125,6 +125,9 @@ var HM : PHashMap; begin + { Init the base system unit } + System.init(); + { Serial Init } serial.init(); From ba6d8037d2415048fc6b35867a875c12de1cc497 Mon Sep 17 00:00:00 2001 From: Kieron Morris Date: Sun, 6 Feb 2022 13:32:57 +0000 Subject: [PATCH 08/10] Compile Script Improvements Improved the compile script (compile_sources.sh) to show line numbers on error and generally compile faster. --- compile_sources.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compile_sources.sh b/compile_sources.sh index c8f6db32..f93d93b3 100644 --- a/compile_sources.sh +++ b/compile_sources.sh @@ -4,4 +4,4 @@ echo "=======================" echo " " echo "Compiling FPC Sources..." echo " " -fpc -Aelf -gw -n -va -O3 -Op3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ -Fusrc/* -Fusrc/driver/* -Fusrc/driver/net/* src/kernel.pas \ No newline at end of file +fpc -Aelf -gw -g -gl -n -vlewn -O3 -Op3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ -Fusrc/* -Fusrc/driver/* -Fusrc/driver/net/* src/kernel.pas \ No newline at end of file From 25df2761011fc0554642191d8d417fde307882ae Mon Sep 17 00:00:00 2001 From: Kieron Morris Date: Sat, 8 Mar 2025 18:59:12 +0000 Subject: [PATCH 09/10] VirtualBox 7 Compatability Changes - Created a PowerShell script `virtualbox-wrapper.ps1` to wrap calls to vboxmanage and only exit once the virtual machine has been terminated. - Updated launch.json to use the PowerShell launch type to launch `virtualbox-wrapper.ps1` with the machine name supplied as an argument. - Updated `readme.md` to reflect these changes. --- .vscode/launch.json | 13 +++---------- readme.md | 22 ++++++++-------------- virtualbox-wrapper.ps1 | 16 ++++++++++++++++ 3 files changed, 27 insertions(+), 24 deletions(-) create mode 100644 virtualbox-wrapper.ps1 diff --git a/.vscode/launch.json b/.vscode/launch.json index c945c666..56f57f0f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,18 +3,11 @@ { "name":"Run", "request": "launch", - "type": "coreclr", + "type": "PowerShell", "preLaunchTask": "Build", - "program": "VBoxSDL", - "args": [ - "--comment", - "Asuro", - "--startvm", - "7d395c96-891c-4139-b77d-9b6b144b0b93" - ], + "script": "${workspaceFolder}/virtualbox-wrapper.ps1", + "args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"], "cwd": "${workspaceFolder}", - "console": "internalConsole", - "internalConsoleOptions": "neverOpen" } ] } \ No newline at end of file diff --git a/readme.md b/readme.md index 0f1f1865..afb9b984 100644 --- a/readme.md +++ b/readme.md @@ -13,8 +13,8 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f I don't think this needs an explaination. * [VSCode (Optional, but highly recommended)](https://code.visualstudio.com/) Visual Studio code is our IDE of choice, and we have a number of recommended plugins. - * [C# Plugin by Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) - This plugin gives you the ability to use the 'coreclr' task type, allowing the automatic launching of virtualbox with the resulting image generated during compilation of Asuro. + * [PowerShell Plugin by Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-vscode.powershell) + This plugin gives you the ability to use the 'PowerShell' task type, allowing the automatic launching of virtualbox with the resulting image generated during compilation of Asuro. * [VirtualBox](https://www.virtualbox.org/) Virtualbox is our Virtualisation environment of choice, don't ask why, it just is. @@ -27,7 +27,7 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f 3. Install Docker for Windows. 4. Install Git for Windows. 5. Install VSCode & the listed plugins. -6. Install VirtualBox. +6. Install VirtualBox (v7+). 7. Clone this repository. 8. Run the following command in the root of the repo to build the docker image: ```powershell @@ -57,18 +57,11 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f { "name":"Run", "request": "launch", - "type": "coreclr", + "type": "PowerShell", "preLaunchTask": "Build", - "program": "VBoxSDL", - "args": [ - "--comment", - "Asuro", - "--startvm", - "" - ], + "script": "${workspaceFolder}/virtualbox-wrapper.ps1", + "args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"], "cwd": "${workspaceFolder}", - "console": "internalConsole", - "internalConsoleOptions": "neverOpen" } ] } @@ -77,5 +70,6 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f 13. Open your project folder in VSCode, use CTRL+SHIFT+B to build & F5 to build + run in VBox. 14. Congratulations! You can now play with Asuro! -### Gotchas +### Notes & Gotchas +- The above process has been updated to be compatible with VirtualBox 7+, in which VBoxSDL was removed and vboxmanage should be used in its place. A small wrapper powershell script is used to achieve this. - It was noted that Windows builds above `20H2` seem to have issues installing WSL2. We may have to wait for a patch from Microsoft to fix this. Our devs are currently using build `20H2`. diff --git a/virtualbox-wrapper.ps1 b/virtualbox-wrapper.ps1 new file mode 100644 index 00000000..fdd460f2 --- /dev/null +++ b/virtualbox-wrapper.ps1 @@ -0,0 +1,16 @@ +param ( + $MachineName +) + +VBoxManage.exe startvm $MachineName + +$running=$true +while($running) { + Start-Sleep -Seconds 1 + $status=(VBoxManage.exe list runningvms) + if($status) { + $running=$status.contains($MachineName) + } else { + $running=$false + } +} \ No newline at end of file From 5f3de290f343cdaa64834357248077b64f9e7ac1 Mon Sep 17 00:00:00 2001 From: Kieron Morris Date: Sun, 9 Mar 2025 13:01:10 +0000 Subject: [PATCH 10/10] DevOps Workflow Improvements - `VirtualBox-Wrapper.ps1` now takes 'up' or 'down' as opposed to a machine name. This allows start/stop of a virtualmachine. - `VirtualBox-Wrapper.ps1` now relies on a gitignored `localenv.json` to work. - `VirtualBox-Wrapper.ps1` can also optionally monitor the log file generated from the serial adapter in VirtualBox. - `readme.md` updated to provide instructions on how to populate the `localenv.json` file. - `tasks.json` updated to have a "Clean" task to --remove-orphans, the Build task depends on this. - `tasks.json` updated to have a "Close VirtualBox" task, this runs the `virtualbox-wrapper.ps1` in 'down' mode. The Build task depends on this. - `launch.json` updated to run the `VirtualBox-Wrapper.ps1` with the "-Command up" argument, instead of machine name. - .gitignore updated to ignore any instances of `localenv.json`. --- .gitignore | 3 +- .vscode/launch.json | 2 +- .vscode/tasks.json | 26 ++++++++++++++++-- docker-compose.yml | 1 - readme.md | 27 ++++++++++-------- virtualbox-wrapper.ps1 | 62 +++++++++++++++++++++++++++++++++++------- 6 files changed, 93 insertions(+), 28 deletions(-) diff --git a/.gitignore b/.gitignore index 99ad6b47..25406f93 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,4 @@ /*.sh~ /*.img src/include/asuro.pas -.vscode/launch.json -.vscode +localenv.json diff --git a/.vscode/launch.json b/.vscode/launch.json index 56f57f0f..5178fc41 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,7 +6,7 @@ "type": "PowerShell", "preLaunchTask": "Build", "script": "${workspaceFolder}/virtualbox-wrapper.ps1", - "args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"], + "args": ["-Command", "up"], "cwd": "${workspaceFolder}", } ] diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 3f74eb24..9cb0382a 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -9,14 +9,18 @@ "command": "docker-compose", "args": [ "run", - "builder" + "builder", ], "type": "shell", "problemMatcher": [], "group": { "kind": "build", "isDefault": true - } + }, + "dependsOn": [ + "Close VirtualBox", + "Clean" + ] }, { "label": "Build (Builder)", @@ -26,6 +30,24 @@ "builder" ], "type": "shell" + }, + { + "label": "Clean", + "command": "docker-compose", + "args": [ + "down", + "--remove-orphans" + ], + "type": "shell" + }, + { + "label": "Close VirtualBox", + "command": "./virtualbox-wrapper.ps1", + "args": [ + "-Command", + "down" + ], + "type": "shell" } ] } \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index b5c19202..845189bd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,3 @@ -version: "3.9" services: builder: build: . diff --git a/readme.md b/readme.md index afb9b984..1ab8b627 100644 --- a/readme.md +++ b/readme.md @@ -50,23 +50,26 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f ```xml ``` - Copy the uuid, in our case `7d395c96-891c-4139-b77d-9b6b144b0b93` and replace the uuid found in `.vscode\launch.json` under `args`, so that it looks something like this: + Copy the uuid, in our case `7d395c96-891c-4139-b77d-9b6b144b0b93` & create a `localenv.json` file in the project root with the following content: ```json { - "configurations": [ - { - "name":"Run", - "request": "launch", - "type": "PowerShell", - "preLaunchTask": "Build", - "script": "${workspaceFolder}/virtualbox-wrapper.ps1", - "args": ["-MachineName", "7d395c96-891c-4139-b77d-9b6b144b0b93"], - "cwd": "${workspaceFolder}", - } - ] + "VirtualBox":{ + "MachineName":"" + } } ``` This will allow VSCode to automatically launch VirtualBox once Asuro has been compiled. + + You can also enable the serial adapter "COM1" in mode "Raw File", give it a path, and provide this path in the `localenv.json` as follows: + ```json + { + "VirtualBox" : { + "MachineName": "", + "LogLocation": "Fully\\Qualified\\Path\\To\\Your\\Log\\File" + } + } + ``` + This will allow you to see the console output from Asuro in your host terminal. 13. Open your project folder in VSCode, use CTRL+SHIFT+B to build & F5 to build + run in VBox. 14. Congratulations! You can now play with Asuro! diff --git a/virtualbox-wrapper.ps1 b/virtualbox-wrapper.ps1 index fdd460f2..7fd2bf04 100644 --- a/virtualbox-wrapper.ps1 +++ b/virtualbox-wrapper.ps1 @@ -1,16 +1,58 @@ +<# +You need a local git-ignored localenv.json file with the following content: +{ + "virtualbox": { + "MachineName": "your-machine-name or guid" + } +} +#> + param ( - $MachineName + [Parameter(Mandatory=$true)] + [ValidateSet('up', 'down')] + [String]$Command ) -VBoxManage.exe startvm $MachineName +$Config = Get-Content .\localenv.json | ConvertFrom-Json +$MachineName = $Config.virtualbox.MachineName +$LogLocation = $Config.virtualbox.LogLocation +$LogOutputEnabled = $LogLocation -ne $null -$running=$true -while($running) { - Start-Sleep -Seconds 1 - $status=(VBoxManage.exe list runningvms) - if($status) { - $running=$status.contains($MachineName) - } else { - $running=$false +if ($Command -eq 'up') { + + if($LogOutputEnabled) { + Clear-Content $LogLocation } + + $MonitorJob = Start-Job -ArgumentList $MachineName -ScriptBlock { + param($MachineName) + Write-Output "Starting $MachineName" + VBoxManage.exe startvm $MachineName + $running=$true + while($running) { + $status=(VBoxManage.exe list runningvms) + if($status) { + $running=$status.contains($MachineName) + } else { + $running=$false + } + } + } + + if($LogOutputEnabled) { + $LogJob = Start-Job -ArgumentList $LogLocation -ScriptBlock { + param($LogLocation) + Get-Content -Path $LogLocation -Wait + } + } + + while($MonitorJob.State -eq 'Running') { + if($LogOutputEnabled) { + Receive-Job $LogJob + } + Receive-Job $MonitorJob + } +} elseif ($Command -eq 'down') { + Write-Output "Stopping $MachineName" + VBoxManage.exe controlvm $MachineName poweroff } \ No newline at end of file