diff --git a/make-build.sh b/make-build.sh index a6b8cc4..a6fb0c2 100644 --- a/make-build.sh +++ b/make-build.sh @@ -1,11 +1,25 @@ #!/bin/sh -COMMON_CC_EXTRA_FLAGS="-O3 -Wall -Wextra" +COMMON_CC_EXTRA_FLAGS="-Wall -Wextra" +COMMON_LD_EXTRA_FLAGS="" + +if [ "$1" = debug ]; then + COMMON_CC_EXTRA_FLAGS="-O0 -ggdb ${COMMON_CC_EXTRA_FLAGS}" +elif [ "$1" = release ]; then + COMMON_CC_EXTRA_FLAGS="-O3 ${COMMON_CC_EXTRA_FLAGS}" + COMMON_LD_EXTRA_FLAGS="-s ${COMMON_LD_EXTRA_FLAGS}" +else + echo pass either "debug" or "release" as an argument. + exit +fi + COMMON_CC_FLAGS="-std=c23 -ffreestanding -I include ${COMMON_CC_EXTRA_FLAGS}" KERNEL_CC_FLAGS="-mno-sse -I dependencies/limine ${COMMON_CC_FLAGS}" #in the future user code will be allowed to use sse USER_CC_FLAGS="-mno-sse ${COMMON_CC_FLAGS}" +COMMON_LD_FLAGS="${COMMON_LD_EXTRA_FLAGS}" + if [ -e build.ninja ]; then echo build.ninja already exists. exit @@ -25,14 +39,14 @@ echo " depfile = \$out.d" >> build.ninja echo " command = cc -c -MD -MF \$out.d ${USER_CC_FLAGS} \$in -o \$out" >> build.ninja echo "rule kernel_ld" >> build.ninja -echo " command = ld -T src/kernel/link.ld \$in -o \$out" >> build.ninja +echo " command = ld ${COMMON_LD_FLAGS} -T src/kernel/link.ld \$in -o \$out" >> build.ninja echo "rule user_lib_ld" >> build.ninja echo " command = ld -r \$in -o \$out" >> build.ninja #eventually maybe a libc will be linked in echo "rule user_app_ld" >> build.ninja -echo " command = ld \$in -o \$out" >> build.ninja +echo " command = ld ${COMMON_LD_FLAGS} \$in -o \$out" >> build.ninja #builds everything in a directory # $1 - source directory