set +v CurrentDir = $PWD GCC-NAME = x86_64-w64-mingw EFI-FOLDER = gnu-efi Linker="$EFI-FOLDER/gnuefi/elf_x86_64_efi.lds" cd ./x64 rm objects.list HeaderFiles=-I$CurrentDir/inc/ \ -I$CurrentDir/gnu-efi/inc \ -I$CurrentDir/gnu-efi/inc/x86_64 \ -I$CurrentDir/gnu-efi/inc/protocol \ -I$CurrentDir/gnu-efi/lib set -v for f in $CurrentDir/src/*.c; do echo "$GCC-NAME-gcc" -ffreestanding -fpic -fshort-wchar -fno-stack-protector -fno-stack-check -fno-strict-aliasing -fno-merge-all-constants -m64 -mno-redzone -DGNU_USE_MS_ABI -maccumulate-outgoing-args --std=c11 $HeaderFiles -Og -g3 -Wall -Wextra -Wdouble-promotion -fmessage-length=0 -c -MMD -MP -Wa,-adhln="${f%.*}.out" -MF"${f%.*}.d" -MT"${f%.*}.o" -o "${f%.*}.o" "$f" "$GCC-NAME-gcc" -ffreestanding -fpic -fshort-wchar -fno-stack-protector -fno-stack-check -fno-strict-aliasing -fno-merge-all-constants -m64 -mno-redzone -DGNU_USE_MS_ABI -maccumulate-outgoing-args --std=c11 $HeaderFiles -Og -g3 -Wall -Wextra -Wdouble-promotion -fmessage-length=0 -c -MMD -MP -Wa,-adhln="${f%.*}.out" -MF"${f%.*}.d" -MT"${f%.*}.o" -o "${f%.*}.o" "$f" done set +v while read f; do echo "${f%.*}.o" | tee -a objects.list done < $CurrentDir/c_files.txt for f in $CurrentDir/src/*.o; do echo "$f" | tee -a objects.list done set -v "$GCC-NAME-ld" -T$Linker -nostdlib --warn-common --no-undefined -znocombreloc -s -shared -Bsymbolic -Map=output.map -o "program.so" @"objects.list" set +v rm image/efi/boot/BOOTx64.efi objcopy -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel -j .rela -j .rel.* -j .rela.* -j .rel* -j .reloc --target=efi-app-x86_64 "program.so" "image/efi/boot/BOOTx64.efi"