2023-05-26 19:24:50 +00:00
|
|
|
#!/bin/bash
|
2023-04-24 20:00:51 +00:00
|
|
|
|
2023-05-26 23:26:38 +00:00
|
|
|
echo "|================| NightLoader Build-Script v0.1 |================|"
|
2023-05-26 19:24:50 +00:00
|
|
|
echo " "
|
|
|
|
echo " "
|
|
|
|
|
2023-05-26 23:26:38 +00:00
|
|
|
BUILD_ROOT=$PWD
|
|
|
|
QUIET="FALSE"
|
|
|
|
VERBOSE="FALSE"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ $2 == "-q" ]]; then
|
|
|
|
QUIET="TRUE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $3 == "-q" ]]; then
|
|
|
|
QUIET="TRUE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $4 == "-q" ]]; then
|
|
|
|
QUIET="TRUE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $5 == "-q" ]]; then
|
|
|
|
QUIET="TRUE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ $2 == "-v" ]]; then
|
|
|
|
VERBOSE="TRUE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $3 == "-v" ]]; then
|
|
|
|
VERBOSE="TRUE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $4 == "-v" ]]; then
|
|
|
|
VERBOSE="TRUE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $5 == "-v" ]]; then
|
|
|
|
VERBOSE="TRUE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [[ $QUIET == "TRUE" ]]; then
|
|
|
|
if [[ $VERBOSE == "TRUE" ]]; then
|
|
|
|
echo "ERROR: '-v' and 'q' cannot coexist!"
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
log() {
|
|
|
|
if [[ $QUIET -eq "TRUE" ]]; then
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
echo $1
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# START OF ACTION FUNCTIONS
|
|
|
|
|
|
|
|
initialize_build_environment() {
|
|
|
|
|
|
|
|
cd $BUILD_ROOT/libs/original/posix-uefi
|
|
|
|
bash build.bash $BUILD_ROOT
|
|
|
|
}
|
|
|
|
|
|
|
|
clean_build_environment() {
|
|
|
|
echo "TODO: Clean Environment"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
build_debug() {
|
|
|
|
|
|
|
|
# Legacy Bootloader for old BIOS-platforms
|
|
|
|
log "Building legacy-bootloader for target 'debug'"
|
|
|
|
|
|
|
|
# Build the stage-1 bootloader; the first disk-sector.
|
|
|
|
cd code/legacy-bios/bootsector
|
|
|
|
bash build.bash $BUILD_ROOT "debug"
|
|
|
|
cd ..
|
|
|
|
|
|
|
|
# Build the stage 2 - starter; it is just there to jump
|
|
|
|
# to the *executable file* which the UEFI-codepath also uses.
|
|
|
|
cd starter
|
|
|
|
bash build.bash $BUILD_ROOT "debug"
|
|
|
|
cd ../../../
|
|
|
|
|
|
|
|
log "Legacy-bootloader was built for target 'debug'"
|
|
|
|
log " "
|
|
|
|
log " "
|
|
|
|
log " "
|
|
|
|
|
|
|
|
log "Building UEFI-bootloader for target 'debug'"
|
|
|
|
|
|
|
|
cd code/uefi/stage_2
|
|
|
|
bash build.bash $BUILD_ROOT "debug"
|
|
|
|
log "UEFI-bootloader was built for target 'debug'"
|
|
|
|
log " "
|
|
|
|
log " "
|
|
|
|
log " "
|
|
|
|
|
|
|
|
cd ../../../
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log "Creating disk image for a basic NightLoader-installation"
|
|
|
|
|
|
|
|
# Create the partition's image-file by allocating 256MB and
|
|
|
|
# creating a FAT32 - partition which then resides there.
|
|
|
|
truncate -s 256M partition.bin
|
|
|
|
mkfs.fat -F32 -nNIGHT partition.bin
|
|
|
|
|
|
|
|
# Mount the partition-image to a specific directory (needs
|
|
|
|
# root-permissions), copy over the freshly built binaries to
|
|
|
|
# the path they belobng to and unmount the partition.
|
|
|
|
mount partition.bin partition/
|
|
|
|
mkdir -p partition/nightloader/
|
|
|
|
cp starter.bin partition/
|
|
|
|
umount partition.bin
|
|
|
|
mv partition.bin build/objects/
|
|
|
|
|
|
|
|
# Create a disk image by including the first disk sector.
|
|
|
|
cat build/objects/bootsector.bin > nightloader.bin
|
|
|
|
cat build/objects/partition.bin >> nightloader.bin
|
|
|
|
|
|
|
|
log " "
|
|
|
|
log " "
|
|
|
|
log "Finished building the NightLoader!"
|
|
|
|
log " "
|
|
|
|
}
|
|
|
|
|
|
|
|
build_release() {
|
|
|
|
echo "TODO: Release-Build"
|
|
|
|
}
|
|
|
|
|
|
|
|
build_all() {
|
|
|
|
build_debug
|
|
|
|
build_release
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print_help() {
|
|
|
|
echo "NightLoader Short Help for 'build.bash', for a more thorough help use '$0 manual'"
|
|
|
|
echo " "
|
|
|
|
echo "Available Commands are: 'all', 'clean', 'debug', 'help', 'init', 'manual' 'release'"
|
|
|
|
echo "| all: Initializes the environment (if needed) build all targets (debug & release)"
|
|
|
|
echo "| but does NOT clean up the environment's build-files, etc.. The version of"
|
|
|
|
echo "| the build is needed as an argument. See: Example [1]"
|
|
|
|
echo "|"
|
|
|
|
echo "| clean: Removes all cached files."
|
|
|
|
echo "|"
|
|
|
|
echo "| debug: Builds the 'debug'-target. The 'debug'-target has more information which"
|
|
|
|
echo "| is needed for contributing to the NightLoader. This shouldn't be used for"
|
|
|
|
echo "| actual usage as it bloats the executable size quite a bit."
|
|
|
|
echo "|"
|
|
|
|
echo "| init: Updates & Initializes the dependencies and performs a one-time setup."
|
|
|
|
echo "| There can be one argument which tells which dependency should be updated."
|
|
|
|
echo "| Possible values are:"
|
|
|
|
echo "| - 'posix-uefi': Clone and build POSIX-UEFI."
|
|
|
|
echo "| - 'all-depends': Update (download) and build all dependencies."
|
|
|
|
echo "| For further information, see: Examples [4] [5]"
|
|
|
|
echo "|"
|
|
|
|
echo "| manual: A longer manual to the NightLoader, referencing the documentation in the"
|
|
|
|
echo "| './docs/'-folder and making it interactive."
|
|
|
|
echo "| For further information, see: Examples [6] [7] [8] [9] [10]"
|
|
|
|
echo "|"
|
|
|
|
echo "| release: Builds the 'release'-target. This target should be used for building the"
|
|
|
|
echo "| optimized version of the NightLoader which can actually be suitable for"
|
|
|
|
echo "| using in, for example, a hobbyist's operating system. This requires the"
|
|
|
|
echo "| current version of the NightLoader as an argument. See: Example [11]"
|
|
|
|
echo " "
|
|
|
|
echo "Additional options:"
|
|
|
|
echo "| -q : Disable as much output as possible"
|
|
|
|
echo "| -v : Output as much as possible; will be passed to all sub-commands"
|
|
|
|
echo " "
|
|
|
|
echo "Examples:"
|
|
|
|
echo "[1] \$ $1 all v0.1.0"
|
|
|
|
echo "[2] \$ $1 clean"
|
|
|
|
echo "[3] \$ $1 debug v0.1.0"
|
|
|
|
echo "[4] \$ $1 init all-depends"
|
|
|
|
echo "[5] \$ $1 init posix-uefi"
|
|
|
|
echo "[6] \$ $1 manual"
|
|
|
|
echo "[7] \$ $1 manual interactive"
|
|
|
|
echo "[8] \$ $1 manual list"
|
|
|
|
echo "[9] \$ $1 manual bios"
|
|
|
|
echo "[10] \$ $1 manual uefi"
|
|
|
|
echo "[11] \$ $1 release v0.1.0"
|
|
|
|
echo "[12] \$ $1 help # You obviously alreay know this. ^^"
|
|
|
|
}
|
|
|
|
|
|
|
|
print_manual() {
|
|
|
|
echo "TODO: Print Manual"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# START OF ACTION CHOOSER
|
|
|
|
|
|
|
|
case $1 in
|
|
|
|
"all")
|
|
|
|
build_all "$0"
|
|
|
|
;;
|
|
|
|
"clean")
|
|
|
|
clean_build_environment "$0"
|
|
|
|
;;
|
|
|
|
"debug")
|
|
|
|
build_debug "$0"
|
|
|
|
;;
|
|
|
|
"help")
|
|
|
|
print_help "$0"
|
|
|
|
;;
|
|
|
|
"init")
|
|
|
|
initialize_build_environment "$0"
|
|
|
|
;;
|
|
|
|
"manual")
|
|
|
|
print_manual "$0"
|
|
|
|
;;
|
|
|
|
"release")
|
|
|
|
build_release "$0"
|
|
|
|
;;
|
|
|
|
esac
|
2023-05-26 19:24:50 +00:00
|
|
|
|