From patchwork Fri Apr 21 19:03:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 9693559 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9129C6038D for ; Fri, 21 Apr 2017 19:06:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 83E6028654 for ; Fri, 21 Apr 2017 19:06:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 78B1428655; Fri, 21 Apr 2017 19:06:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 17EBF28628 for ; Fri, 21 Apr 2017 19:06:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1424470AbdDUTGW (ORCPT ); Fri, 21 Apr 2017 15:06:22 -0400 Received: from conuserg-09.nifty.com ([210.131.2.76]:26373 "EHLO conuserg-09.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1424504AbdDUTGT (ORCPT ); Fri, 21 Apr 2017 15:06:19 -0400 Received: from grover.sesame (FL1-111-169-71-157.osk.mesh.ad.jp [111.169.71.157]) (authenticated) by conuserg-09.nifty.com with ESMTP id v3LJ3vv4021371; Sat, 22 Apr 2017 04:04:04 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-09.nifty.com v3LJ3vv4021371 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1492801445; bh=UqoPNXOEzt5sAONs+cvzU2zKu8MnC5VA8qWN1sxt+T4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=S/S8OyIpPHlzsvIVHaTA9omi3vNhxTfcPvwZ6pv9aBmd5oohL01YpGCAiPFFJFIxl ckm4gIe6EpWtqm9Ub3Coh9Qm6mbTNCpYodhPXUUNi1ntFKjCLqOwGhoDy91FhA/+LX ccUssEFuEXiNAhJyCak6q/9e6OyCytDrVLN6Bor79RZZkn35e0Cx8aa85XESH+uYr9 YfCKVnwQIiHGwkn3qmLqdw3Qf9MtAQiO8cRqigLp83H+3xM8XCmTLv/eP2wrPKD2I4 veSu+JyZ/0Ra68c6d/OR0mfNnCvpvFAWJmYZ/rdFLeo+VTkLcFo7Ob1im5Q2sbgsF2 kjOS20mWEdG1Q== X-Nifty-SrcIP: [111.169.71.157] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Andrew Morton , Greg KH , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, x86@kernel.org, Michal Marek , Sam Ravnborg , Linus Torvalds , Masahiro Yamada Subject: [RFC PATCH 1/2] kbuild: add KBUILD_FILE to point relative file path from $(srctree) Date: Sat, 22 Apr 2017 04:03:26 +0900 Message-Id: <1492801407-26823-2-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492801407-26823-1-git-send-email-yamada.masahiro@socionext.com> References: <1492801407-26823-1-git-send-email-yamada.masahiro@socionext.com> Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Since Kbuild runs in the objtree, __FILE__ can be a very long path depending of $(srctree). Commit 9da0763bdd82 ("kbuild: Use relative path when building in a subdir of the source tree") made the situation better for cases where objtree is a child of srctree. ($(srctree) is "..") For other cases of out-of-tree build, filenames in WARN_ON() etc. are still an absolute path. It also means the kernel image depends on where it was built. Here, the idea is to define a new macro, KBUILD_FILE, to point the relative file path from $(srctree). If we replace __FILE__ with KBUILD_FILE, we can rip off the path to the build directory. I am adding stringify helper because '"..."' wrapping is the same pattern for KBUILD_BASENAME, KBUILD_MODNAME, and KBUILD_FILE. Please note KBUILD_FILE is still an absolute path for external modules. We can strip KBUILD_EXTMOD from the path if we want, but I am not doing that. It would make it difficult to figure out the module in question in case of WARN_ON(). Signed-off-by: Masahiro Yamada --- scripts/Kbuild.include | 4 ++++ scripts/Makefile.lib | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 61f87a9..7fc3841 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -31,6 +31,10 @@ baseprereq = $(basename $(notdir $<)) escsq = $(subst $(squote),'\$(squote)',$1) ### +# Quote a string to pass it to C files. foo => '"foo"' +stringify = $(squote)$(quote)$1$(quote)$(squote) + +### # Easy method for doing a status message kecho := : quiet_kecho := echo diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 9e70196..f8dce56 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -96,10 +96,11 @@ obj-dirs := $(addprefix $(obj)/,$(obj-dirs)) # Note: Files that end up in two or more modules are compiled without the # KBUILD_MODNAME definition. The reason is that any made-up name would # differ in different configs. -name-fix = $(squote)$(quote)$(subst $(comma),_,$(subst -,_,$1))$(quote)$(squote) +name-fix = $(call stringify,$(subst $(comma),_,$(subst -,_,$1))) basename_flags = -DKBUILD_BASENAME=$(call name-fix,$(basetarget)) modname_flags = $(if $(filter 1,$(words $(modname))),\ -DKBUILD_MODNAME=$(call name-fix,$(modname))) +filepath_flags = -DKBUILD_FILE=$(call stringify,$(src)/$(notdir $<)) orig_c_flags = $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(KBUILD_SUBDIR_CCFLAGS) \ $(ccflags-y) $(CFLAGS_$(basetarget).o) @@ -163,7 +164,7 @@ endif c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ $(__c_flags) $(modkern_cflags) \ - $(basename_flags) $(modname_flags) + $(basename_flags) $(modname_flags) $(filepath_flags) a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ $(__a_flags) $(modkern_aflags)