Received: by 10.213.65.68 with SMTP id h4csp24711imn; Tue, 27 Mar 2018 20:46:26 -0700 (PDT) X-Google-Smtp-Source: AIpwx49a67v1Be6i0pE7yAnYS/HLCPqssaMBow7d7KMJSCMS3m09yy2c+iHlkMmFpNxOzMlUK3ls X-Received: by 10.101.97.208 with SMTP id j16mr1360410pgv.431.1522208786936; Tue, 27 Mar 2018 20:46:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522208786; cv=none; d=google.com; s=arc-20160816; b=WbOHe0AV+Qvtd+o2p8W9qDN2yDNa0HGDKR9rcqT8klArIDQZg2H6JMlUzMumo9hv7l wWrpsEO6iP83NytFig5GmB4PD0wlrBoNJ98o6OuqCO5E54ffJQipg8dTmYVDONDYMbE8 W0NflDEqCS7ZguDQnsfhMJSoAjwtdIQRZOpsie1IIVauGE34KPgnd8HyViFs9cXElIY2 Yun2IcvimOLSPSPT9pPdM8O4Ej/rEUceKvX7bIThhpcWtm2DGTdcKyXIOLreBIpsDWoY dB3i+h/mqHTB4Kyq7vHAlt58Jkf8X9O7keaLjYBltoT2ybU6Cg2aAjutigM/s6GaT6UY 6I+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature:dkim-signature :arc-authentication-results; bh=jGY+BEZSL6KAYqWFkRcpOrc871Fc42fDs2OAwCP0xIA=; b=eGIrmOXlCM4D2sgZQF2cxhRJuGAKmubIf5AtboR3cYXuLoscGnwh5KVzwgK9pHuEcg zwM0fPQITtSUBMrUtTp5OjP/Dz1VTyFObmMKC+eBLxbXSlynGIStduvHD/sI/RhxC5Z+ 0kSzc/vb7BP3Gv54IGMfNv8UrKLtg5n/bT5+WECyrsShcmQAA4x4c630OSeCkrubqUSp OSANbad6t7yUBZAidBdpaLnkShUY/iyexBoCOl8WtMnQ1C+nzj4gGPBtQg6CbA9ESCim bhuFjrl/ANN3SWH/qiYfgRouWcpg0FqF+bt/S3sDJxlAjNggbM6aitnZRpoWIvs5WG2y aFbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@google.com header.s=20161025 header.b=CkYoWXqR; dkim=fail header.i=@chromium.org header.s=google header.b=VzoVqWRR; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c11-v6si2352742pls.97.2018.03.27.20.46.12; Tue, 27 Mar 2018 20:46:26 -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=fail header.i=@google.com header.s=20161025 header.b=CkYoWXqR; dkim=fail header.i=@chromium.org header.s=google header.b=VzoVqWRR; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752237AbeC1DpL (ORCPT + 99 others); Tue, 27 Mar 2018 23:45:11 -0400 Received: from mail-ua0-f195.google.com ([209.85.217.195]:37134 "EHLO mail-ua0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751642AbeC1DpK (ORCPT ); Tue, 27 Mar 2018 23:45:10 -0400 Received: by mail-ua0-f195.google.com with SMTP id q12so681064uae.4 for ; Tue, 27 Mar 2018 20:45:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=jGY+BEZSL6KAYqWFkRcpOrc871Fc42fDs2OAwCP0xIA=; b=CkYoWXqRCmXTWLAVfIFSN7hdcfRY8BvBvZZbigl2rF7ov4Fk/OBp2GLc9Jp1J3CoHF wnLu9lsShQ0GorijrUNDk8A1bXn3qrSteC1UYp8mgDauc5hj3XuG50JxLoH1EkX6+l1N FE07yjYRmgO9oDI/SNzqRZmg0mt+/B3+dc8oNC+xfDzdjOybJl2iBCbsYyTBW1YQF54r 4ncPFRus3TR7nLgoAKbePqrQFY/YiMeYQw/rXlYHk1SYRK8CQeA6l/NkL/GogRun/vlU lgpvk6lWCD1qQxkEvjN4qbp/NhAWLpxdE5rWCKcjNKuCYcHuk56oF/DrW/EGHhXvj6Me 5FnA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=jGY+BEZSL6KAYqWFkRcpOrc871Fc42fDs2OAwCP0xIA=; b=VzoVqWRRtrn+j+7vRwTQMOK8d0tgx5fuphvveZes6f1iqeu7a+YDS4jUlg08GDrM6v zz9MOtbcYvEANQHTr5v2fZU/3jdphnGS1lKCcmCET4nCALKsl9oA6r1L88/eLMd9OfOA 9CGEjsfd+zgyjgZsNf4KQTDLDiNk/HHsoby/c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=jGY+BEZSL6KAYqWFkRcpOrc871Fc42fDs2OAwCP0xIA=; b=KCxaTVXObthqi1QTYPtqERZZAVjawiQEkHfxZ6hYOCMMBerk/0kwuMP+o2+TDNfQoT 1i9ZsknwOrSzqQvkT+Di0DDcNHkqXWZ97wDhH48kHMTDQIQp2q0KMqoV5+UcTXTTzZNa 5+zo1KvkPowENupfpb8LQrQk6GJhd7/ANkdgqKFz72OaXIGdCVLUqYwgPfuBd845TPNO d+vo28cb8sF6BqVjMrOun1qLMN+0BVD+hA72M782HEhEei7qNWAmgpEsapcgr7tBwVCD zrpby/I4R0tSIMlKITqA15S16hNr3DAQ/08ETI+CnZzxme0YMiNEg375dSShXL91JE4/ tBKg== X-Gm-Message-State: AElRT7EE4yu012EGeSU5knrzkXunQCwuhKwEzMo24UdKPB4ZTER3YYMY VTO/dMxCTRr2F/ZfR7xwL349h8poOvHo/eZiCIqEXA== X-Received: by 10.176.83.157 with SMTP id k29mr1358613uaa.167.1522208709148; Tue, 27 Mar 2018 20:45:09 -0700 (PDT) MIME-Version: 1.0 Received: by 10.31.129.9 with HTTP; Tue, 27 Mar 2018 20:45:08 -0700 (PDT) In-Reply-To: <1522128575-5326-10-git-send-email-yamada.masahiro@socionext.com> References: <1522128575-5326-1-git-send-email-yamada.masahiro@socionext.com> <1522128575-5326-10-git-send-email-yamada.masahiro@socionext.com> From: Kees Cook Date: Tue, 27 Mar 2018 20:45:08 -0700 X-Google-Sender-Auth: DIvAiYJa0u2d8zZw-7evGhhVkXA Message-ID: Subject: Re: [PATCH v2 09/21] kconfig: add 'macro' keyword to support user-defined function To: Masahiro Yamada Cc: linux-kbuild , Sam Ravnborg , Linus Torvalds , Arnd Bergmann , Ulf Magnusson , Thomas Gleixner , Greg Kroah-Hartman , Randy Dunlap , "Luis R . Rodriguez" , Nicolas Pitre , LKML Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Mar 26, 2018 at 10:29 PM, Masahiro Yamada wrote: > Now, we got a basic ability to test compiler capability in Kconfig. > > config CC_HAS_STACKPROTECTOR > def_bool $(shell (($CC -Werror -fstack-protector -c -x c /dev/null -o /dev/null) && echo y) || echo n) > > This works, but it is ugly to repeat this long boilerplate. > > We want to describe like this: > > config CC_HAS_STACKPROTECTOR > bool > default $(cc-option -fstack-protector) > > It is straight-forward to add a new function, but I do not like to > hard-code specialized functions like this. Hence, here is another > feature to add functions from Kconfig files. > > A user-defined function is defined with a special keyword 'macro'. > It can be referenced in the same way as built-in functions. This > feature was also inspired by Makefile where user-defined functions > are referenced by $(call func-name, args...), but I omitted the 'call' > to makes it shorter. > > The macro definition can contain $(1), $(2), ... which will be replaced > with arguments from the caller. The macro works just as a textual > shorthand, which is also expanded in the lexer phase. > > [Example Code] > > macro success $(shell ($(1) && echo y) || echo n) > > config TRUE > bool "true" > default $(success true) > > config FALSE > bool "false" > default $(success false) > > [Result] > > $ make -s alldefconfig > $ tail -n 2 .config > CONFIG_TRUE=y > # CONFIG_FALSE is not set > > [Example Code] > > macro success $(shell ($(1) && echo y) || echo n) > > macro cc-option $(success $CC -Werror $(1) -c -x c /dev/null -o /dev/null) > > config CC_HAS_STACKPROTECTOR > def_bool $(cc-option -fstack-protector) > > [Result] > $ make -s alldefconfig > $ tail -n 1 .config > CONFIG_CC_HAS_STACKPROTECTOR=y > > Signed-off-by: Masahiro Yamada Cool, I like this "macro" idea for keeping this clean. > --- > > Reminder for myself: > Update Documentation/kbuild/kconfig-language.txt Yes please. :) Otherwise, looks good! -Kees -- Kees Cook Pixel Security