diff options
-rw-r--r-- | build.bat | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..660292a --- /dev/null +++ b/build.bat @@ -0,0 +1,84 @@ +@echo off +setlocal enabledelayedexpansion + +REM Cross Compiler Location +set prefix="arm-none-eabi-" +set armpath="C:\Program Files (x86)\Arm GNU Toolchain arm-none-eabi\11.2 2022.02\bin\" +set armrun=%armpath%%prefix% + +REM Clean up build directories +rmdir /Q /S obj\ +mkdir obj\ +rmdir /Q /S build\ +mkdir build\ +REM Make Kernel Object Directories +for /f %%i in ('forfiles /S /P kernel\ /C "cmd /C if @isdir==TRUE echo @relpath"') do ( + mkdir obj\kernel\%%~i +) +REM Make User Object Directories +for /f %%i in ('forfiles /S /P usr\ /C "cmd /C if @isdir==TRUE echo @relpath"') do ( + mkdir obj\usr\%%~i +) + +REM Kernel Object Variable +set kobj= +REM Assemble Assembly Kernel Source Files +for /f %%i in ('forfiles /S /M *.S /P kernel\ /C "cmd /C echo @relpath"') do ( + set src=kernel\%%~i + set obj=!src! + set obj=!obj:.S=.So! + set obj=obj\!obj! + @set kobj=!kobj! !obj! + @echo KERNEL AS !src! -- !obj! + %armrun%as.exe -mcpu=cortex-a7 -Iinclude -c !src! -o !obj! +) +REM Compile C Kernel Source Files +for /f %%i in ('forfiles /S /M *.c /P kernel\ /C "cmd /C echo @relpath"') do ( + set src=kernel\%%~i + set obj=!src! + set obj=!obj:.c=.co! + set obj=obj\!obj! + @set kobj=!kobj! !obj! + @echo KERNEL CC !src! -- !obj! + %armrun%gcc.exe -mcpu=cortex-a7 -fpic -ffreestanding -std=gnu99 -O3 -Wall -Wextra -nostdlib -Iinclude -c !src! -o !obj! +) + +REM Create Kernel Archive +@echo KERNEL AR build\libjobbed.a +%armrun%ar.exe rc build\libjobbed.a %kobj% + +REM User Object Variable +set uobj= +REM Assemble Assembly User Source Files +for /f %%i in ('forfiles /S /M *.S /P usr\ /C "cmd /C echo @relpath"') do ( + set src=usr\%%~i + set obj=!src! + set obj=!obj:.S=.ao! + set obj=obj\!obj! + @set uobj=!uobj! !obj! + @echo USER AS !src! -- !obj! + %armrun%as.exe -mcpu=cortex-a7 -Iinclude -c !src! -o !obj! +) +REM Compile C User Source Files +for /f %%i in ('forfiles /S /M *.c /P usr\ /C "cmd /C echo @relpath"') do ( + set src=usr\%%~i + set obj=!src! + set obj=!obj:.c=.co! + set obj=obj\!obj! + @set uobj=!uobj! !obj! + @echo USER CC !src! -- !obj! + %armrun%gcc.exe -mcpu=cortex-a7 -fpic -ffreestanding -std=gnu99 -O3 -Wall -Wextra -nostdlib -Iinclude -c !src! -o !obj! +) +REM Compile C++ User Source Files +for /f %%i in ('forfiles /S /M *.cpp /P usr\ /C "cmd /C echo @relpath"') do ( + set src=usr\%%~i + set obj=!src! + set obj=!obj:.cpp=.cppo! + set obj=obj\!obj! + @set uobj=!uobj! !obj! + @echo USER CX !src! -- !obj! + %armrun%g++.exe -mcpu=cortex-a7 -fpic -ffreestanding -fno-exceptions -O3 -Wall -Wextra -nostdlib -Iinclude -c !src! -o !obj! +) + +@echo IMAGE LD build\kernel.elf +%armrun%ld.exe -T linker.ld -o build\kernel.elf -Lbuild -l jobbed -Map build\kernel.map -O3 -nostdlib !uobj! build\libjobbed.a
\ No newline at end of file |