On Fri, Aug 9, 2019 at 2:15 PM Nathan Chancellor <natechancellor@xxxxxxxxx> wrote: > > On Thu, Aug 08, 2019 at 03:42:32PM -0700, 'Nick Desaulniers' via Clang Built Linux wrote: > > On Thu, Aug 8, 2019 at 2:07 PM Guillaume Tucker > > <guillaume.tucker@xxxxxxxxxxxxx> wrote: > > > > > > Only use gcc/g++ for HOSTCC, HOSTCXX and CC by default if they are not > > > already defined in the environment. This fixes cases such as building > > > host tools with clang without having gcc installed. > > > > > > The issue was initially hit when running merge_config.sh with clang > > > only as it failed to build "HOSTCC scripts/basic/fixdep". > > > > Thanks for the patch. I don't quite follow the exact error. > > > > When building with Clang, I usually do: > > > > $ make CC=clang HOSTCC=clang ... > > > > are you trying to fix the case where you do: > > > > $ make CC=clang ... > > <no HOSTCC set> > > when GCC is not installed? Because if so, I think it would be easier > > to just specify HOSTCC=clang, but maybe I'm misunderstanding the > > issue? > > As I understand it, > > $ make CC=clang HOSTCC=clang > > works fine. What doesn't currently work is: > > $ export CC=clang > $ export HOSTCC=clang > $ make > > This is problematic because there is no way for CC, HOSTCC, and HOSTCXX > to be passed to make within scripts/kconfig/merge_config.sh. Is it so problematic? If you start from make, CC=clang and HOSTCC=clang are propagated to sub-make even via shell scripts such as merge_config.sh Only the problem I see is the situation where a user directly runs scripts/kconfig/merge_config.sh without using make as a start-point. A user can wrap merge_config.sh with a simple Makefile if they want to override CC, HOSTCC, etc. "You can easily pass environment variables" means "the build system may accidentally pick up them when it is not desirable." > A quick test before and after the patch: > > $ ( export HOSTCC=clang; make -j$(nproc) O=out defconfig V=1 ) > ... > gcc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wmissing-prototypes... > gcc -Wp,-MD,scripts/kconfig/.confdata.o.d -Wall -Wmissing-prototypes... > ... > $ ( export HOSTCC=clang; make -j$(nproc) O=out defconfig V=1 ) > ... > clang -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wmissing-prototypes -Wstrict-prototypes... > clang -Wp,-MD,scripts/kconfig/.confdata.o.d -Wall -Wmissing-prototypes -Wstrict-prototypes... > ... > > Reviewed-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > Tested-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > > I wonder if all variable should be converted to that scheme or just the > ones that are needed in this instance. I also wonder if this will cause > any issues with people who define these variables in their environment > already; if so, maybe merge_config.sh should be updated to support > passing CC, HOSTCC, and HOSTCXX to make. This is not a problem for upstream code, at least. -- Best Regards Masahiro Yamada