From patchwork Tue Mar 27 05:29:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 132440 Delivered-To: patch@linaro.org Received: by 10.46.84.29 with SMTP id i29csp4653667ljb; Mon, 26 Mar 2018 22:32:32 -0700 (PDT) X-Google-Smtp-Source: AG47ELujOjxqXGuFN506sfaVPTYGpFA76LLF4rx43zfMee7pV8Gp0O06niB87EhIKGpnymFAOVLQ X-Received: by 10.98.253.17 with SMTP id p17mr35391998pfh.105.1522128752159; Mon, 26 Mar 2018 22:32:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522128752; cv=none; d=google.com; s=arc-20160816; b=WkpHtfNEpUbUOOcZMQHvEK/LYcS4ww70ZR6+pYZOkfGX1g4yfMeuA80qTaMD0hsXPR N+FVNwcQQKAYGAeV/hT+g6Or1Am33l5k/fXKA6xOWtzlcxgFwZMNEoIerPI4oUz8CwWT H8O0ppuTh2LRzh/hyB1l75uQixCIfX3O2pkE9EUN790LfKH+YDzwozfFLSdQEDSBkt2z F/nSR85g1UovtJjTfIZYD6ZqpCgQ5XWbWNvhUjw1mJtUamYRDiTpQ0aHH0eTQCyFCGcK /h2FK7aSNH5ro8GK/N/2zKqhX3RCCz4gveTn78pBzIjMTOjM+b87zNzy6WKCU7wJ1nFI rZJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter:arc-authentication-results; bh=2joAA3xkYAnslO7dgaCdSypAn5Wb3IebPjDBipuflxs=; b=IeLkwsIYRJPI9rEb1mvNwHH9kpzgjJAbT8GwNy5bGPdF4GYhrPNZIqMUMQRBrVbONU gqxc3XNuNDfnhNDZ3dr3tatjBYPjaGw1BGIg5//NeOv+xwMNPtJfoaTOO2oQIhVPDIEG mY2SscC5+jXEniS3Te7Vr2A0/c80xKJvXbqys7qQ/ym5RZjE5Q3xNqfJCJ8bOq8xK7f3 HuBXhde+gsrF69yqM4TP7GgLm2Kclt66iv0/qj6FwlcGqgfibMoThWep5gGa2ur9ep+x jE4vlig5m2Yxwgfi85tn3tNBJDPgOFxwzdq+3tKQB88O9/HnqVDQIu+7hZ6LalOG9o1l iRhA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=Bk2tGtZc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k8-v6si521340pli.7.2018.03.26.22.32.31; Mon, 26 Mar 2018 22:32:32 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=Bk2tGtZc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752271AbeC0Fc2 (ORCPT + 28 others); Tue, 27 Mar 2018 01:32:28 -0400 Received: from conuserg-09.nifty.com ([210.131.2.76]:45398 "EHLO conuserg-09.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752227AbeC0FcZ (ORCPT ); Tue, 27 Mar 2018 01:32:25 -0400 Received: from pug.e01.socionext.com (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-09.nifty.com with ESMTP id w2R5TaLj011947; Tue, 27 Mar 2018 14:29:37 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-09.nifty.com w2R5TaLj011947 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1522128578; bh=2joAA3xkYAnslO7dgaCdSypAn5Wb3IebPjDBipuflxs=; h=From:To:Cc:Subject:Date:From; b=Bk2tGtZc6xjkHRo9Y6FVZvbPb2fW4+7tEXhqPtzP5tapeyAlnGMfgcX/13+LIGP4l StZsSEsCNOFn4TVl3PWGm7qS0s87PoF3PW37PeOH992WCw1LPRVCrXj3t91mL3dODq mJ7sAI/CZ9JwN+GlvadgdOVAg2Ho5x1IpjXsXJtQ2RdzHGwfB0J6tNkL1U7XIWCJ4H OeVV7J3xCDfdcET+S/atOQzAQOZ2q+e4whn/ASNxQWNzLivpmzKJC8WO7aB2pFR6a1 WOefBDSA0DGljYPprqwmgsHo8aqktNYX9SDk5e6/+FxKhLoa+FpQms6wj9qHZFjoVY KexxiTS4/8tXA== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sam Ravnborg , Linus Torvalds , Arnd Bergmann , Ulf Magnusson , Kees Cook , Thomas Gleixner , Greg Kroah-Hartman , Randy Dunlap , "Luis R . Rodriguez" , Nicolas Pitre , Masahiro Yamada , Peter Oberparleiter , kernel-hardening@lists.openwall.com, linux-kernel@vger.kernel.org, Ingo Molnar , Will Deacon , Catalin Marinas , Emese Revfy , linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 00/21] kconfig: move compiler capability tests to Kconfig Date: Tue, 27 Mar 2018 14:29:14 +0900 Message-Id: <1522128575-5326-1-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Here is v2 to start to move compiler capability tests to Kconfig. V1: https://lkml.org/lkml/2018/2/16/610 I brushed up the implementation even more. Major changes for v2: [1] Environments and functions are expanded in the lexer (zconf.l) The parser (zconf.y) receives expanded tokens. This simplifies the implementation. [2] Implement only one built-in function 'shell'. This returns stdout from the command. We need something to return 'y' or 'n'. This is now implemented as a macro 'success'. [3] Macros (user-defined function) are defined by 'macro' keyword instead of string type symbol. ex1) macro success $(shell ($(1) && echo y) || echo n) ex2) macro cc-option $(success $CC -Werror $(1) -c -x c /dev/null -o /dev/null) My plan for v3 -------------- The MW is approaching, but I'd like to make it more lovely if I have some time. While I was writing these patches, I noticed a kind of similarity between Makefile and Kconfig. Makefile can define variables and functions to do text processing during the parse phase. After parsing, it builds up dependency graph, and moves on to the execution phase. Then, it generates objects as needed by checking time-stamps. [Makefile] OBJ := foo.o SRC := foo.c CC := gcc $(OBJ): $(SRC) $(CC) -c -o $(OBJ) $(SRC) [Makefile after text processing] foo.o: foo.c gcc -c -o foo.o foo.c Now, we are adding tools for text processing to Kconfig. Functions are statically expanded by the lexer. After all source files are parsed, Kconfig moves on to the evaluation phase. Then, users can tweak symbol values from menus. So, we should be able to describe Kconfig like follows: [Kconfig] MY_SYMBOL := CC_STACKPROTECTOR MY_PROMPT := "Stackprotector" success = $(shell ($(1) && echo y) || echo n) cc-option = $(success $CC -Werror $(1) -c -x c /dev/null -o /dev/null) config $(MY_SYMBOL) bool $(MY_PROMPT) depends on $(cc-option -fstack-protector) [Kconfig after text processing] config CC_STACKPROTECTOR bool "Stackptector" depends on y So, I think it is better to use '=' assignment for defining functions. I will remove the 'macro' keyword. Also, support variables. A variable is a function with no argument. So, it will be easy to implement it as a sub-set of function feature. It is better to support two flavors of assignments, '=' and ':=' as well. Masahiro Yamada (21): kbuild: remove kbuild cache kbuild: remove CONFIG_CROSS_COMPILE support kconfig: move and rename sym_expand_string_value() kconfig: reference environments directly and remove 'option env=' syntax kconfig: remove string expansion in file_lookup() kconfig: remove string expansion for mainmenu after yyparse() kconfig: add function support and implement 'shell' function kconfig: replace $UNAME_RELEASE with function call kconfig: add 'macro' keyword to support user-defined function kconfig: add 'success' and 'cc-option' macros stack-protector: test compiler capability in Kconfig and drop AUTO mode kconfig: show compiler version text in the top comment kconfig: add CC_IS_GCC and GCC_VERSION kconfig: add CC_IS_CLANG and CLANG_VERSION gcov: remove CONFIG_GCOV_FORMAT_AUTODETECT kcov: imply GCC_PLUGINS and GCC_PLUGIN_SANCOV instead of select'ing them gcc-plugins: always build plugins with C++ gcc-plugins: move GCC version check for PowerPC to Kconfig gcc-plugins: test GCC plugin support in Kconfig gcc-plugins: enable GCC_PLUGINS for COMPILE_TEST arm64: move GCC version check for ARCH_SUPPORTS_INT128 to Kconfig Documentation/kbuild/kconfig-language.txt | 8 -- Kconfig | 4 +- Makefile | 103 ++------------ arch/Kconfig | 37 ++--- arch/arm64/Kconfig | 1 + arch/arm64/Makefile | 2 - arch/powerpc/Kconfig | 2 +- arch/sh/Kconfig | 4 +- arch/sparc/Kconfig | 4 +- arch/tile/Kconfig | 2 +- arch/um/Kconfig.common | 4 - arch/x86/Kconfig | 12 +- arch/x86/um/Kconfig | 4 +- init/Kconfig | 44 +++--- kernel/gcov/Kconfig | 17 +-- kernel/gcov/Makefile | 2 - lib/Kconfig.debug | 7 +- scripts/Kbuild.include | 101 ++------------ scripts/Makefile.gcc-plugins | 95 ++++--------- scripts/clang-version.sh | 24 ++-- scripts/gcc-plugin.sh | 37 +---- scripts/gcc-plugins/Makefile | 15 +- scripts/gcc-x86_32-has-stack-protector.sh | 7 +- scripts/gcc-x86_64-has-stack-protector.sh | 5 - scripts/kconfig/confdata.c | 31 +--- scripts/kconfig/env.c | 95 +++++++++++++ scripts/kconfig/function.c | 225 ++++++++++++++++++++++++++++++ scripts/kconfig/kconf_id.c | 1 - scripts/kconfig/lkc.h | 9 +- scripts/kconfig/lkc_proto.h | 7 +- scripts/kconfig/menu.c | 3 - scripts/kconfig/symbol.c | 109 --------------- scripts/kconfig/util.c | 96 ++++++++++--- scripts/kconfig/zconf.l | 51 ++++++- scripts/kconfig/zconf.y | 35 ++--- 35 files changed, 608 insertions(+), 595 deletions(-) create mode 100644 scripts/kconfig/env.c create mode 100644 scripts/kconfig/function.c -- 2.7.4