Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752050AbdHLDMk (ORCPT ); Fri, 11 Aug 2017 23:12:40 -0400 Received: from conssluserg-04.nifty.com ([210.131.2.83]:19385 "EHLO conssluserg-04.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751944AbdHLDMi (ORCPT ); Fri, 11 Aug 2017 23:12:38 -0400 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-04.nifty.com v7C3CVCl027519 X-Nifty-SrcIP: [209.85.161.176] MIME-Version: 1.0 In-Reply-To: References: <20170810154251.GA23083@localhost.localdomain> <1cb96165-34a1-7f8e-4211-e87af3cfb60a@infradead.org> From: Masahiro Yamada Date: Sat, 12 Aug 2017 12:11:50 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: make clean all broken with -j? + question regarding modpost To: Jim Davis Cc: Randy Dunlap , Thomas Meyer , linux-kernel , linux-kbuild Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2532 Lines: 92 Hi. 2017-08-11 7:11 GMT+09:00 Jim Davis : > On Thu, Aug 10, 2017 at 11:28 AM, Randy Dunlap wrote: >> [adding linux-kbuild] >> >> On 08/10/2017 08:42 AM, Thomas Meyer wrote: >>> Hi, >>> >>> 1.) make with multiple targets >>> >>> When running >>> $ make -j4 clean all >>> I get error from make (probably in scripts/Makefile.modbuiltin): > > With 4.13-rc4 I can get a similar build failure on my Fedora 26 workstation with > > make allnoconfig; make -j2 clean all > > /bin/sh: scripts/mod/empty.o: No such file or directory > make[2]: *** [scripts/mod/Makefile:24: scripts/mod/elfconfig.h] Error 1 > make[1]: *** [scripts/Makefile.build:561: scripts/mod] Error 2 > > Here's an ugly workaround for that test case. > > diff --git a/Makefile b/Makefile > index 6eba23bcb5ad..6a1fd24dcf31 100644 > --- a/Makefile > +++ b/Makefile > @@ -1297,6 +1297,7 @@ MRPROPER_FILES += .config .config.old .version > .old_version \ > > # clean - Delete most, but leave enough to build external modules > # > +.NOTPARALLEL: clean > clean: rm-dirs := $(CLEAN_DIRS) > clean: rm-files := $(CLEAN_FILES) > clean-dirs := $(addprefix _clean_, . $(vmlinux-alldirs) > Documentation samples) > If config targets and build targets are given from the command line (for example, "make -j8 defconfig all" they are processed one by one. Kbuild does not cater to the mixture of clean targets and build targets, but I do not know why. I wrote as follows. --- a/Makefile +++ b/Makefile @@ -482,7 +482,8 @@ uapi-asm-generic: version_h := include/generated/uapi/linux/version.h old_version_h := include/linux/version.h -no-dot-config-targets := clean mrproper distclean \ +clean-targets := %clean mrproper cleandocs +no-dot-config-targets := $(clean-targets) \ cscope gtags TAGS tags help% %docs check% coccicheck \ $(version_h) headers_% archheaders archscripts \ kernelversion %src-pkg @@ -505,6 +506,14 @@ ifeq ($(KBUILD_EXTMOD),) endif endif endif + +# For "make -j clean all", "make mrproper defconfig all", etc. +ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),) + ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),) + mixed-targets := 1 + endif +endif + # install and module_install need also be processed one by one ifneq ($(filter install,$(MAKECMDGOALS)),) ifneq ($(filter modules_install,$(MAKECMDGOALS)),) -- Best Regards Masahiro Yamada