Index: Makefile =================================================================== --- Makefile +++ Makefile @@ -626,17 +626,44 @@ .endfor .endif # !make(targets) -.if !defined(MAKE_JUST_KERNELS) -universe_${target}_done: universe_${target}_worlds .PHONY .for target_arch in ${TARGET_ARCHES_${target}} -universe_${target}_worlds: universe_${target}_${target_arch} .PHONY .if (defined(_need_clang_${target}_${target_arch}) && \ ${_need_clang_${target}_${target_arch}} == "yes") || \ (defined(_need_lld_${target}_${target_arch}) && \ ${_need_lld_${target}_${target_arch}} == "yes") -universe_${target}_${target_arch}: universe-toolchain universe_${target}_prologue: universe-toolchain -.endif +universe_${target}_kernel_toolchains: universe-toolchain +.else +.if defined(MAKE_JUST_KERNELS) +# If we are skipping universe_${target}_worlds due to MAKE_JUST_KERNELS we have +# to build kernel-toolchain for all non-clang targets first. +# In addition to the compiler this will also ensure that config has been +# bootstrapped and we don't fall back to using the one from /usr/sbin +universe_${target}_kernel_toolchains: universe_${target}_${target_arch}_kernel_toolchain .PHONY +universe_${target}_${target_arch}_kernel_toolchain: universe_${target}_prologue .MAKE .PHONY + @echo "> ${target}.${target_arch} kernel-toolchain started on `LC_ALL=C date`" + @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ + ${SUB_MAKE} ${JFLAG} kernel-toolchain \ + TARGET=${target} \ + TARGET_ARCH=${target_arch} \ + ${MAKE_PARAMS_${target}} \ + > _.${target}.${target_arch}.kernel-toolchain 2>&1 || \ + (echo "${target}.${target_arch} kernel-toolchain failed," \ + "check _.${target}.${target_arch}.kernel-toolchain for details" | \ + ${MAKEFAIL})) + @echo "> ${target}.${target_arch} kernel-toolchain completed on `LC_ALL=C date`" +.else +# Otherwise the kernel toolchains for non-clang targets are built during buildworld +universe_${target}_kernel_toolchains: universe_${target}_worlds .PHONY +.endif # defined(MAKE_JUST_KERNELS) +.endif # ${target}_${target_arch} needs clang +.endfor + + +.if !defined(MAKE_JUST_KERNELS) +universe_${target}_done: universe_${target}_worlds .PHONY +.for target_arch in ${TARGET_ARCHES_${target}} +universe_${target}_worlds: universe_${target}_${target_arch} .PHONY universe_${target}_${target_arch}: universe_${target}_prologue .MAKE .PHONY @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} started on `LC_ALL=C date`" @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ @@ -654,8 +681,7 @@ .if !defined(MAKE_JUST_WORLDS) universe_${target}_done: universe_${target}_kernels .PHONY -universe_${target}_kernels: universe_${target}_worlds .PHONY -universe_${target}_kernels: universe_${target}_prologue .MAKE .PHONY +universe_${target}_kernels: universe_${target}_kernel_toolchains .MAKE .PHONY @if [ -e "${KERNSRCDIR}/${target}/conf/NOTES" ]; then \ (cd ${KERNSRCDIR}/${target}/conf && env __MAKE_CONF=/dev/null \ ${SUB_MAKE} LINT \