From fdfdd03e3341d3b7d5e6a22a11a755a2c56eda1b Mon Sep 17 00:00:00 2001 From: Kimplul Date: Mon, 24 Jul 2023 19:23:50 +0300 Subject: split makefile into two parts + First part generates deps.mk, second part reads it. Allows us to use both bmake and gmake with the same makefiles. Only drawback seems to be that the first makefile considers all individual files as 'finished' targets, meaning that it's more difficult to do something like make kernel.elf though I haven't found this to be an issue. --- scripts/gen-deps | 81 ++++++++++++++++++++------------------------------------ 1 file changed, 29 insertions(+), 52 deletions(-) (limited to 'scripts/gen-deps') diff --git a/scripts/gen-deps b/scripts/gen-deps index 9a9ad6e..f45707c 100755 --- a/scripts/gen-deps +++ b/scripts/gen-deps @@ -1,60 +1,37 @@ #!/bin/sh -gencommon () { - lint="build/${path}/${s%.*}${1}.l" - dep="build/${path}/${s%.*}${1}.d" - obj="build/${path}/${s%.*}${1}" - - echo "${dep}:" >> deps.mk - echo "-include ${dep}" >> deps.mk - echo "${obj}: ${s}" >> deps.mk -} - -genlink () { - gencommon ".ld" - if [ ${kern} ]; then - echo " \$(GENLINK) ${s} | \$(STRIPLINK) > ${obj}" >> deps.mk - else - echo " \$(GENLINK) ${s} | \$(STRIPLINK) | \$(KERN_INFO) > ${obj}" >> deps.mk; - fi -} - -genrule () { - gencommon "${1}" - echo " \$(COMPILE) ${flags} -c ${s} -o ${obj}" >> deps.mk - - echo "${lint}: ${s}" >> deps.mk - echo " \$(LINT) ${flags} -c ${s} -o /dev/null" >> deps.mk -} - -case "${1}" in - --kernel) - kern=1 - path=kernel - flags='$(KERN_FLAGS)' - ;; - --init) - path=init - flags='$(INIT_FLAGS)' - ;; -esac +PREFIX= +COMPILE=COMPILE +LINT=LINT +BUILD=build/ + +while getopts "p:c:b:l:" opt; do + case "$opt" in + p) PREFIX="$OPTARG"_;; + c) COMPILE="$OPTARG";; + l) LINT="$OPTARG";; + b) BUILD=build/"$OPTARG";; + *) echo "unrecognised option -$OPTARG" >&2; exit 1;; + esac +done -case "${2}" in - --compile) - suffix=.o - func=genrule - ;; - --link) - suffix=.ld - func=genlink -esac +shift $((OPTIND - 1)) # create all subdirectories -mkdir -p $(echo "${3}" | xargs -n 1 dirname | uniq | sed 's|^|build/init/|g') -mkdir -p $(echo "${3}" | xargs -n 1 dirname | uniq | sed 's|^|build/kernel/|g') +mkdir -p $(echo "${@}" | tr ' ' '\n' | sed "s|[^/]*$||;s|^|${BUILD}/|" | uniq) -for s in ${3} +for s in ${@} do - ${func} ${suffix} - echo ${obj} + obj="${BUILD}/${s%.*}.o" + lint="${obj}.l" + dep="${obj}.d" + + echo "${PREFIX}OBJS += ${obj}" >> deps.mk + echo "${PREFIX}LINTS += ${lint}" >> deps.mk + echo "${dep}:" >> deps.mk + echo "-include ${dep}" >> deps.mk + echo "${obj}: ${s}" >> deps.mk + echo " \$(${COMPILE}) -c ${s} -o ${obj}" >> deps.mk + echo "${lint}: ${s}" >> deps.mk + echo " \$(${LINT}) -c ${s} -o /dev/null" >> deps.mk done -- cgit v1.3