Currently a number of Makefiles break when used with toolchains that
pass extra flags in CC and other cross-compile related variables (such
as --sysroot).
Thus we get this error when we use a toolchain that puts --sysroot in
the CC var:
~/src/linux/tools$ make iio
[snip]
iio_event_monitor.c:18:10: fatal error: unistd.h: No such file or directory
#include <unistd.h>
^~~~~~~~~~
This occurs because we clobber several env vars related to
cross-compiling with lines like this:
CC = $(CROSS_COMPILE)gcc
Although this will point to a valid cross-compiler, we lose any extra
flags that might exist in the CC variable, which can break toolchains
that rely on them (for example, those that use --sysroot).
This easily shows up using a Yocto SDK:
$ . [snip]/sdk/environment-setup-cortexa8hf-neon-poky-linux-gnueabi
$ echo $CC
arm-poky-linux-gnueabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard
-mcpu=cortex-a8
--sysroot=[snip]/sdk/sysroots/cortexa8hf-neon-poky-linux-gnueabi
$ echo $CROSS_COMPILE
arm-poky-linux-gnueabi-
$ echo ${CROSS_COMPILE}gcc
krm-poky-linux-gnueabi-gcc
Although arm-poky-linux-gnueabi-gcc is a cross-compiler, we've lost the
--sysroot and other flags that enable us to find the right libraries to
link against, so we can't find unistd.h and other libraries and headers.
Normally with the --sysroot flag we would find unistd.h in the sdk
directory in the sysroot:
$ find [snip]/sdk/sysroots -path '*/usr/include/unistd.h'
[snip]/sdk/sysroots/cortexa8hf-neon-poky-linux-gnueabi/usr/include/unistd.h
The perf Makefile adds CC = $(CROSS_COMPILE)gcc if and only if CC is not
already set, and it compiles correctly with the above toolchain.
So, generalize the logic that perf uses in the common Makefile and
remove the manual CC = $(CROSS_COMPILE)gcc lines from each Makefile.
Note that this patch does not fix cross-compile for all the tools (some
have other bugs), but it does fix it for all except usb and acpi, which
still have other unrelated issues.
I tested both with and without the patch on native and cross-build and
there appear to be no regressions.
Link: http://lkml.kernel.org/r/20180107214028.23771-1-martin@martingkelly.com
Signed-off-by: Martin Kelly <martin@martingkelly.com>
Acked-by: Mark Brown <broonie@kernel.org>
Cc: Tejun Heo <tj@kernel.org>
Cc: Li Zefan <lizefan@huawei.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Cc: Stephen Hemminger <sthemmin@microsoft.com>
Cc: Jonathan Cameron <jic23@kernel.org>
Cc: Pali Rohar <pali.rohar@gmail.com>
Cc: Richard Purdie <rpurdie@rpsys.net>
Cc: Jacek Anaszewski <jacek.anaszewski@gmail.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Robert Moore <robert.moore@intel.com>
Cc: Lv Zheng <lv.zheng@intel.com>
Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Valentina Manea <valentina.manea.m@gmail.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Mario Limonciello <mario.limonciello@dell.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
92 lines
2.6 KiB
Makefile
92 lines
2.6 KiB
Makefile
# tools/power/acpi/Makefile.config - ACPI tool Makefile
|
|
#
|
|
# Copyright (c) 2015, Intel Corporation
|
|
# Author: Lv Zheng <lv.zheng@intel.com>
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; version 2
|
|
# of the License.
|
|
|
|
ifeq ($(srctree),)
|
|
srctree := $(patsubst %/,%,$(dir $(shell pwd)))
|
|
srctree := $(patsubst %/,%,$(dir $(srctree)))
|
|
#$(info Determined 'srctree' to be $(srctree))
|
|
endif
|
|
|
|
include $(srctree)/../../scripts/Makefile.include
|
|
|
|
OUTPUT=$(srctree)/
|
|
ifeq ("$(origin O)", "command line")
|
|
OUTPUT := $(O)/power/acpi/
|
|
endif
|
|
#$(info Determined 'OUTPUT' to be $(OUTPUT))
|
|
|
|
# --- CONFIGURATION BEGIN ---
|
|
|
|
# Set the following to `true' to make a unstripped, unoptimized
|
|
# binary. Leave this set to `false' for production use.
|
|
DEBUG ?= true
|
|
|
|
# make the build silent. Set this to something else to make it noisy again.
|
|
V ?= false
|
|
|
|
# Prefix to the directories we're installing to
|
|
DESTDIR ?=
|
|
|
|
# --- CONFIGURATION END ---
|
|
|
|
# Directory definitions. These are default and most probably
|
|
# do not need to be changed. Please note that DESTDIR is
|
|
# added in front of any of them
|
|
|
|
bindir ?= /usr/bin
|
|
sbindir ?= /usr/sbin
|
|
mandir ?= /usr/man
|
|
|
|
# Toolchain: what tools do we use, and what options do they need:
|
|
|
|
INSTALL = /usr/bin/install -c
|
|
INSTALL_PROGRAM = ${INSTALL}
|
|
INSTALL_DATA = ${INSTALL} -m 644
|
|
INSTALL_SCRIPT = ${INSTALL_PROGRAM}
|
|
|
|
# If you are running a cross compiler, you may want to set this
|
|
# to something more interesting, like "arm-linux-". If you want
|
|
# to compile vs uClibc, that can be done here as well.
|
|
CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc-
|
|
CROSS_COMPILE ?= $(CROSS)
|
|
HOSTCC = gcc
|
|
|
|
# check if compiler option is supported
|
|
cc-supports = ${shell if $(CC) ${1} -S -o /dev/null -x c /dev/null > /dev/null 2>&1; then echo "$(1)"; fi;}
|
|
|
|
# use '-Os' optimization if available, else use -O2
|
|
OPTIMIZATION := $(call cc-supports,-Os,-O2)
|
|
|
|
WARNINGS := -Wall
|
|
WARNINGS += $(call cc-supports,-Wstrict-prototypes)
|
|
WARNINGS += $(call cc-supports,-Wdeclaration-after-statement)
|
|
|
|
KERNEL_INCLUDE := $(OUTPUT)include
|
|
ACPICA_INCLUDE := $(srctree)/../../../drivers/acpi/acpica
|
|
CFLAGS += -D_LINUX -I$(KERNEL_INCLUDE) -I$(ACPICA_INCLUDE)
|
|
CFLAGS += $(WARNINGS)
|
|
|
|
ifeq ($(strip $(V)),false)
|
|
QUIET=@
|
|
ECHO=@echo
|
|
else
|
|
QUIET=
|
|
ECHO=@\#
|
|
endif
|
|
|
|
# if DEBUG is enabled, then we do not strip or optimize
|
|
ifeq ($(strip $(DEBUG)),true)
|
|
CFLAGS += -O1 -g -DDEBUG
|
|
STRIPCMD = /bin/true -Since_we_are_debugging
|
|
else
|
|
CFLAGS += $(OPTIMIZATION) -fomit-frame-pointer
|
|
STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment
|
|
endif
|