From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: [EXT] Re: [PATCH v4 1/5] mk: introduce helper to check valid compiler argument Date: Mon, 14 Jan 2019 13:08:48 +0100 Message-ID: <1575046.QJcQsNME09@xps> References: <20190106131933.7898-1-jerinj@marvell.com> <7520753.4oEUPZEzPD@xps> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Cc: Pavan Nikhilesh Bhagavatula , "Gavin.Hu@arm.com" , "bruce.richardson@intel.com" , "dev@dpdk.org" To: Jerin Jacob Kollanukkaran Return-path: Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by dpdk.org (Postfix) with ESMTP id 6D1484C6C for ; Mon, 14 Jan 2019 13:08:51 +0100 (CET) In-Reply-To: List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 14/01/2019 12:56, Jerin Jacob Kollanukkaran: > On Mon, 2019-01-14 at 12:35 +0100, Thomas Monjalon wrote: > > ------------------------------------------------------------------- > > --- > > 09/01/2019 11:39, Pavan Nikhilesh Bhagavatula: > > > From: Jerin Jacob > > > > > > Introduce rte_cc_has_argument() Makefile helper to > > > check a given argument is support by the compiler. > > > > > > Example Usage: > > > > > > include $(RTE_SDK)/mk/rte.helper.mk > > > MACHINE_CFLAGS += $(call rte_cc_has_argument, -mcpu=octeontx2) > > > > > > This would allow adding -mcpu=octeontx2 in MACHINE_CFLAGS > > > if it is only supported by the compiler. The use case for such > > > scheme is to enable the mcpu optimization if the compiler > > > supports else it needs to compile the source code without > > > any errors. > > > > > > This patch also moves inclusion of toolchain's rte.vars.mk > > > to before the machine's rte.vars.mk inclusion to make > > > correct CC available for the cross compile case. > > > > > > Signed-off-by: Jerin Jacob > > > Signed-off-by: Pavan Nikhilesh > > > --- > > > --- /dev/null > > > +++ b/mk/rte.helper.mk > > > @@ -0,0 +1,12 @@ > > > +# SPDX-License-Identifier: BSD-3-Clause > > > +# Copyright(c) 2018 Marvell International Ltd > > > + > > > +# rte_cc_has_argument > > > +# Usage: MACHINE_CFLAGS += $(call rte_cc_has_argument, -mno- > > > avx512f) > > > +# Return the argument if the argument is supported by the > > > compiler. > > > +# > > > +define rte_cc_has_argument > > > + $(shell $(CC) -Werror $(1) -c -x c /dev/null -o tmp$$ 2> > > > /dev/null && rm -f tmp$$ && echo $(1) | xargs echo -n) > > > +endef > > > > What is tmp$$ ? > > It is created per process with pid value. I see. The file is in current directory with name tmp + PID. > > If the command is interrupted in the middle, temp file is not > > cleaned. > > Yes. I think we can move to RTE_OUTPUT. Even it is not cleaned > then it is file, I think, that would be easiest solution. > > > We could fix it with "trap". > > Can we do it in Makefile? Yes, it is just one more command separated with ; > > Is it possible to just avoid creating a temporary file? > > I tried it but gcc creates one. It does not create a file in my test. A better command is: $(CC) -E $(1) -xc /dev/null >/dev/null Then you can just check the return value. If you want rte_cc_has_argument returns a string or empty as true/false, you can do this: $(CC) -E $(1) -xc /dev/null >/dev/null && echo $(1)