pinctrl: zynq: Use define directive for PIN_CONFIG_IO_STANDARD
Subsystems (3)
PATCH 1/1 pinctrl: zynq: Use define directive for PIN_CONFIG_IO_STANDARD
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enum zynq_pin_config_param' to different enumeration type 'enum pin_config_param' [-Wenum-conversion]
{"io-standard", PIN_CONFIG_IOSTANDARD, zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enum zynq_pin_config_param' to different enumeration type 'enum pin_config_param' [-Wenum-conversion]
= { PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'
.param = a, .display = b, .format = c, .has_arg = d \
^2 warnings generated.
It is expected that pinctrl drivers can extend pin_config_param because of the gap between PIN_CONFIG_END and PIN_CONFIG_MAX so this conversion isn't an issue. Most drivers that take advantage of this define the PIN_CONFIG variables as constants, rather than enumerated values. Do the same thing here so that Clang no longer warns.
--- drivers/pinctrl/pinctrl-zynq.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/pinctrl/pinctrl-zynq.c +1 -4
@@ -972,14 +972,11 @@ enum zynq_io_standards { };/** -* enum zynq_pin_config_param - possible pin configuration parameters * @PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to * this parameter (on a custom format) tells the driver which alternative * IO standard to use. */ -enum zynq_pin_config_param { -PIN_CONFIG_IOSTANDARD =PIN_CONFIG_END +1 , -}; +#define PIN_CONFIG_IOSTANDARD (PIN_CONFIG_END + 1)static const struct pinconf_generic_params zynq_dt_params[] = { {"io-standard" ,PIN_CONFIG_IOSTANDARD , zynq_iostd_lvcmos18},
Signature · 1 line
2.19.1
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'
Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Quoted 17 lines
It is expected that pinctrl drivers can extend
pin_config_parambecause of the gap betweenPIN_CONFIG_ENDandPIN_CONFIG_MAXso this conversion isn't an issue. Most drivers that take advantage of this define thePIN_CONFIGvariables as constants, rather than enumerated values. Do the same thing here so that Clang no longer warns.Signed-off-by Nathan Chancellor <[email protected]>--- drivers/pinctrl/pinctrl-zynq.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)drivers/pinctrl/pinctrl-zynq.c +0
-0
drivers/pinctrl/pinctrl-zynq.c enum zynq_io_standards { · line 975
Quoted 4 lines
drivers/pinctrl/pinctrl-zynq.c +0
-1@@ -972,14 +972,11 @@ enum zynq_io_standards { };/** -* enum zynq_pin_config_param - possible pin configuration parameters
This is wrong. kernel-doc is reporting issue with it.
drivers/pinctrl/pinctrl-zynq.c:975: warning: Cannot understand * @PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to
on line 975 - I thought it was a doc line
1 warnings
drivers/pinctrl/pinctrl-zynq.c enum zynq_io_standards { · line 982
Quoted 12 lines
drivers/pinctrl/pinctrl-zynq.c +1
-3* @PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to * this parameter (on a custom format) tells the driver which alternative * IO standard to use. */ -enum zynq_pin_config_param { -PIN_CONFIG_IOSTANDARD =PIN_CONFIG_END +1 , -}; +#define PIN_CONFIG_IOSTANDARD (PIN_CONFIG_END + 1)static const struct pinconf_generic_params zynq_dt_params[] = { {"io-standard" ,PIN_CONFIG_IOSTANDARD , zynq_iostd_lvcmos18},
This change is fine.
Thanks,
Michal
Quoted 19 lines · Michal Simek
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
Quoted 3 lines
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
Quoted 25 lines
Quoted 18 lines
It is expected that pinctrl drivers can extend
pin_config_parambecause of the gap betweenPIN_CONFIG_ENDandPIN_CONFIG_MAXso this conversion isn't an issue. Most drivers that take advantage of this define thePIN_CONFIGvariables as constants, rather than enumerated values. Do the same thing here so that Clang no longer warns.Signed-off-by Nathan Chancellor <[email protected]>--- drivers/pinctrl/pinctrl-zynq.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)drivers/pinctrl/pinctrl-zynq.c +0
-0drivers/pinctrl/pinctrl-zynq.c enum zynq_io_standards { · line 975
Quoted 4 lines
drivers/pinctrl/pinctrl-zynq.c +0
-1@@ -972,14 +972,11 @@ enum zynq_io_standards { };/** -* enum zynq_pin_config_param - possible pin configuration parameters This is wrong. kernel-doc is reporting issue with it.
Quoted 6 lines
drivers/pinctrl/pinctrl-zynq.c:975: warning: Cannot understand * @PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to
on line 975 - I thought it was a doc line
1 warnings
Ah yes, I forgot to send a v2 of this patch when someone pointed out this problem in a different patch. I'll send that now, thanks for the review!
Quoted 18 lines
drivers/pinctrl/pinctrl-zynq.c enum zynq_io_standards { · line 982
Quoted 13 lines
drivers/pinctrl/pinctrl-zynq.c +1
-3* @PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to * this parameter (on a custom format) tells the driver which alternative * IO standard to use. */ -enum zynq_pin_config_param { -PIN_CONFIG_IOSTANDARD =PIN_CONFIG_END +1 , -}; +#define PIN_CONFIG_IOSTANDARD (PIN_CONFIG_END + 1)static const struct pinconf_generic_params zynq_dt_params[] = { {"io-standard" ,PIN_CONFIG_IOSTANDARD , zynq_iostd_lvcmos18},This change is fine.
Thanks,
Michal
Quoted 20 lines · Nathan Chancellor
Quoted 19 lines · Michal Simek
Quoted 17 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
Quoted 8 lines
Quoted 3 lines
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
TBH I would expect to download container and run this there to make sure that I don't break anything else.
Thanks,
Michal
Quoted 26 lines · Michal Simek
Quoted 24 lines · Nathan Chancellor
Quoted 22 lines · Michal Simek
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Quoted 7 lines
Quoted 4 lines
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
TBH I would expect to download container and run this there to make sure that I don't break anything else.
This is the first request we've had for a container in order to test a patch. If it comes up again from other folks, I think it makes sense to create one. Until then, its nice to have. It's definitely overkill for this patch.
Signature · 2 lines
Thanks, ~Nick Desaulniers
Quoted 32 lines · Nick Desaulniers
Quoted 31 lines · Michal Simek
Quoted 28 lines · Nathan Chancellor
Quoted 19 lines · Michal Simek
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
Quoted 3 lines
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
Quoted 7 lines
Quoted 2 lines
TBH I would expect to download container and run this there to make sure that I don't break anything else.
This is the first request we've had for a container in order to test a patch. If it comes up again from other folks, I think it makes sense to create one. Until then, its nice to have. It's definitely overkill for this patch.
I have played with it to see that error and here are some steps I did.
docker run --name test-clang -it --rm debian:latest bash apt-get update
apt-get install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu clang git bc build-essential bison flex make llvm vim libssl-dev sparse
git clonegit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git --depth 1 cd linux
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make defconfig
make CC=clang drivers/pinctrl/pinctrl-zynq.o C=1 V=1
There was not a problem to run it for arm64 but I had issues to run this for arm32.
Do you see any problem with above steps?
Thanks,
Michal
Quoted 48 lines · Michal Simek
Quoted 32 lines · Nick Desaulniers
Quoted 31 lines · Michal Simek
Quoted 28 lines · Nathan Chancellor
Quoted 19 lines · Michal Simek
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
Quoted 3 lines
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
Quoted 7 lines
Quoted 2 lines
TBH I would expect to download container and run this there to make sure that I don't break anything else.
This is the first request we've had for a container in order to test a patch. If it comes up again from other folks, I think it makes sense to create one. Until then, its nice to have. It's definitely overkill for this patch.
I have played with it to see that error and here are some steps I did.
docker run --name test-clang -it --rm debian:latest bash apt-get update
apt-get install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu clang git bc build-essential bison flex make llvm vim libssl-dev sparse
Quoted 8 lines
git clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git--depth 1 cd linuxexport ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-make defconfig
This should also have 'CC=clang' because compiler detection happens in Kconfig now so compiler flags get properly set. Other than that, looks good and I was able to build pinctrl-zynq.o without any issues with those commands.
Cheers!
Nathan
Quoted 9 lines
make CC=clang
drivers/pinctrl/pinctrl-zynq.oC=1 V=1There was not a problem to run it for arm64 but I had issues to run this for arm32.
Do you see any problem with above steps?Thanks,
Michal
Quoted 56 lines · Nathan Chancellor
Quoted 55 lines · Michal Simek
Quoted 32 lines · Nick Desaulniers
Quoted 31 lines · Michal Simek
Quoted 28 lines · Nathan Chancellor
Quoted 19 lines · Michal Simek
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
Quoted 3 lines
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
Quoted 7 lines
Quoted 2 lines
TBH I would expect to download container and run this there to make sure that I don't break anything else.
This is the first request we've had for a container in order to test a patch. If it comes up again from other folks, I think it makes sense to create one. Until then, its nice to have. It's definitely overkill for this patch.
I have played with it to see that error and here are some steps I did.
docker run --name test-clang -it --rm debian:latest bash apt-get update
apt-get install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu clang git bc build-essential bison flex make llvm vim libssl-dev sparsegit clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git--depth 1 cd linuxexport ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
Quoted 6 lines
Quoted 1 line
make defconfig
This should also have 'CC=clang' because compiler detection happens in
Kconfignow so compiler flags get properly set. Other than that, looks good and I was able to build pinctrl-zynq.o without any issues with those commands.
For arm32 I am still getting compilation issue (arm64 is fine) Below are my steps and version I use. Do you know what could be the problem?
Thanks,
Michal
root at 1e15921e6d15:~/linux# arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
root at 1e15921e6d15:~/linux# clang --version
clang version 3.8.1-24 (tags/RELEASE_381/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnuaebi-
make CC=clang defconfig
make CC=clang drivers/pinctrl/pinctrl-zynq.o
and I get
clang: error: unsupported argument '-W' to option 'Wa,' scripts/Makefile.build:305: recipe for target 'scripts/mod/empty.o' failed make[2]: *** [scripts/mod/empty.o] Error 1 scripts/Makefile.build:546: recipe for target 'scripts/mod' failed
Quoted 89 lines · Michal Simek
Quoted 56 lines · Nathan Chancellor
Quoted 55 lines · Michal Simek
Quoted 32 lines · Nick Desaulniers
Quoted 31 lines · Michal Simek
Quoted 28 lines · Nathan Chancellor
Quoted 19 lines · Michal Simek
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
Quoted 3 lines
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
Quoted 7 lines
Quoted 2 lines
TBH I would expect to download container and run this there to make sure that I don't break anything else.
This is the first request we've had for a container in order to test a patch. If it comes up again from other folks, I think it makes sense to create one. Until then, its nice to have. It's definitely overkill for this patch.
I have played with it to see that error and here are some steps I did.
docker run --name test-clang -it --rm debian:latest bash apt-get update
apt-get install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu clang git bc build-essential bison flex make llvm vim libssl-dev sparsegit clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git--depth 1 cd linuxexport ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-Quoted 6 lines
Quoted 1 line
make defconfig
This should also have 'CC=clang' because compiler detection happens in
Kconfignow so compiler flags get properly set. Other than that, looks good and I was able to build pinctrl-zynq.o without any issues with those commands.For arm32 I am still getting compilation issue (arm64 is fine) Below are my steps and version I use. Do you know what could be the problem?
Thanks,
Michalroot at 1e15921e6d15:~/linux# arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.root at 1e15921e6d15:~/linux# clang --version
clang version 3.8.1-24 (tags/RELEASE_381/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir:/usr/binexport ARCH=arm
export CROSS_COMPILE=arm-linux-gnuaebi-
make CC=clang defconfig
make CC=clangdrivers/pinctrl/pinctrl-zynq.o
Quoted 6 lines
and I get
clang: error: unsupported argument '-W' to option 'Wa,'scripts/Makefile.build:305: recipe for target 'scripts/mod/empty.o' failed make[2]: *** [scripts/mod/empty.o] Error 1scripts/Makefile.build:546: recipe for target 'scripts/mod' failed
Ah because Debian's regular Clang is ancient.
For testing, we use the builds from apt.llvm.org. Commands assuming you're using the normal Debian image:
curl https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
echo "deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch main" | tee -a /etc/apt/sources.list apt-get update -qq && apt-get install -y clang-8
Then use `CC=clang-8' instead of 'CC=clang' for all make invocations.
Let me know if there are any more issues!
Nathan
Quoted 99 lines · Nathan Chancellor
Quoted 89 lines · Michal Simek
Quoted 56 lines · Nathan Chancellor
Quoted 55 lines · Michal Simek
Quoted 32 lines · Nick Desaulniers
Quoted 31 lines · Michal Simek
Quoted 28 lines · Nathan Chancellor
Quoted 19 lines · Michal Simek
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
Quoted 3 lines
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
Quoted 7 lines
Quoted 2 lines
TBH I would expect to download container and run this there to make sure that I don't break anything else.
This is the first request we've had for a container in order to test a patch. If it comes up again from other folks, I think it makes sense to create one. Until then, its nice to have. It's definitely overkill for this patch.
I have played with it to see that error and here are some steps I did.
docker run --name test-clang -it --rm debian:latest bash apt-get update
apt-get install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu clang git bc build-essential bison flex make llvm vim libssl-dev sparsegit clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git--depth 1 cd linuxexport ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-Quoted 6 lines
Quoted 1 line
make defconfig
This should also have 'CC=clang' because compiler detection happens in
Kconfignow so compiler flags get properly set. Other than that, looks good and I was able to build pinctrl-zynq.o without any issues with those commands.For arm32 I am still getting compilation issue (arm64 is fine) Below are my steps and version I use. Do you know what could be the problem?
Thanks,
Michalroot at 1e15921e6d15:~/linux# arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.root at 1e15921e6d15:~/linux# clang --version
clang version 3.8.1-24 (tags/RELEASE_381/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir:/usr/binexport ARCH=arm
export CROSS_COMPILE=arm-linux-gnuaebi-
make CC=clang defconfig
make CC=clangdrivers/pinctrl/pinctrl-zynq.oQuoted 6 lines
and I get
clang: error: unsupported argument '-W' to option 'Wa,'scripts/Makefile.build:305: recipe for target 'scripts/mod/empty.o' failed make[2]: *** [scripts/mod/empty.o] Error 1scripts/Makefile.build:546: recipe for target 'scripts/mod' failedAh because Debian's regular Clang is ancient.
Quoted 9 lines
For testing, we use the builds from apt.llvm.org. Commands assuming you're using the normal Debian image:
curl https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
echo "deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch main" | tee -a/etc/apt/sources.listapt-get update -qq && apt-get install -y clang-8Then use `CC=clang-8' instead of 'CC=clang' for all make invocations.
Still I see some issues. Log below.
Thanks,
Michal
root at 1e15921e6d15:~/linux# git reset --hard v4.20-rc2 HEAD is now at ccda4af0f4b9 Linux 4.20-rc2
root at 1e15921e6d15:~/linux#
root at 1e15921e6d15:~/linux#
root at 1e15921e6d15:~/linux# export ARCH=arm
root at 1e15921e6d15:~/linux# export CROSS_COMPILE=arm-linux-gnuaebi- root at 1e15921e6d15:~/linux# export CC=clang-8
root at 1e15921e6d15:~/linux# make CC=clang-8 defconfig
HOSTCC scripts/kconfig/conf.o
HOSTLD scripts/kconfig/conf
*** Default configuration is based on 'multi_v7_defconfig' #
# configuration written to .config # root at 1e15921e6d15:~/linux# make CC=clang-8 scripts/kconfig/conf --syncconfig Kconfig SYSHDR arch/arm/include/generated/uapi/asm/unistd-common.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-oabi.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-eabi.h UPD include/config/kernel.release UPD include/generated/uapi/linux/version.h UPD include/generated/utsrelease.h SYSNR arch/arm/include/generated/asm/unistd-nr.h SYSTBL arch/arm/include/generated/calls-oabi.S SYSTBL arch/arm/include/generated/calls-eabi.S CC kernel/bounds.s clang: warning: argument unused during compilation: '-Wa,-W' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-Wa,-march=armv7-a' [-Wunused-command-line-argument] UPD include/generated/bounds.h CC arch/arm/kernel/asm-offsets.s clang: warning: argument unused during compilation: '-Wa,-W' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-Wa,-march=armv7-a' [-Wunused-command-line-argument] UPD include/generated/asm-offsets.h CALL scripts/checksyscalls.sh clang: warning: argument unused during compilation: '-Wa,-W' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-Wa,-march=armv7-a' [-Wunused-command-line-argument] CC scripts/mod/empty.o clang: error: unsupported argument '-W' to option 'Wa,' scripts/Makefile.build:293: recipe for target 'scripts/mod/empty.o' failed make[2]: *** [scripts/mod/empty.o] Error 1 scripts/Makefile.build:518: recipe for target 'scripts/mod' failed make[1]: *** [scripts/mod] Error 2 Makefile:1075: recipe for target 'scripts' failed make: *** [scripts] Error 2 root at 1e15921e6d15:~/linux# clang-8 --version clang version 8.0.0-svn345496-1~exp1+0~20181029105533.852~1.gbpf10f36 (trunk) Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin root at 1e15921e6d15:~/linux# arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Quoted 168 lines · Michal Simek
Quoted 99 lines · Nathan Chancellor
Quoted 89 lines · Michal Simek
Quoted 56 lines · Nathan Chancellor
Quoted 55 lines · Michal Simek
Quoted 32 lines · Nick Desaulniers
Quoted 31 lines · Michal Simek
Quoted 28 lines · Nathan Chancellor
Quoted 19 lines · Michal Simek
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
Quoted 3 lines
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
Quoted 7 lines
Quoted 2 lines
TBH I would expect to download container and run this there to make sure that I don't break anything else.
This is the first request we've had for a container in order to test a patch. If it comes up again from other folks, I think it makes sense to create one. Until then, its nice to have. It's definitely overkill for this patch.
I have played with it to see that error and here are some steps I did.
docker run --name test-clang -it --rm debian:latest bash apt-get update
apt-get install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu clang git bc build-essential bison flex make llvm vim libssl-dev sparsegit clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git--depth 1 cd linuxexport ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-Quoted 6 lines
Quoted 1 line
make defconfig
This should also have 'CC=clang' because compiler detection happens in
Kconfignow so compiler flags get properly set. Other than that, looks good and I was able to build pinctrl-zynq.o without any issues with those commands.For arm32 I am still getting compilation issue (arm64 is fine) Below are my steps and version I use. Do you know what could be the problem?
Thanks,
Michalroot at 1e15921e6d15:~/linux# arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.root at 1e15921e6d15:~/linux# clang --version
clang version 3.8.1-24 (tags/RELEASE_381/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir:/usr/binexport ARCH=arm
export CROSS_COMPILE=arm-linux-gnuaebi-
make CC=clang defconfig
make CC=clangdrivers/pinctrl/pinctrl-zynq.oQuoted 6 lines
and I get
clang: error: unsupported argument '-W' to option 'Wa,'scripts/Makefile.build:305: recipe for target 'scripts/mod/empty.o' failed make[2]: *** [scripts/mod/empty.o] Error 1scripts/Makefile.build:546: recipe for target 'scripts/mod' failedAh because Debian's regular Clang is ancient.
Quoted 9 lines
For testing, we use the builds from apt.llvm.org. Commands assuming you're using the normal Debian image:
curl https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
echo "deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch main" | tee -a/etc/apt/sources.listapt-get update -qq && apt-get install -y clang-8Then use `CC=clang-8' instead of 'CC=clang' for all make invocations.
Still I see some issues. Log below.
Thanks,
Michalroot at 1e15921e6d15:~/linux# git reset --hard v4.20-rc2 HEAD is now at
ccda4af0f4b9Linux 4.20-rc2
root at 1e15921e6d15:~/linux#
root at 1e15921e6d15:~/linux#
root at 1e15921e6d15:~/linux# export ARCH=arm
root at 1e15921e6d15:~/linux# export CROSS_COMPILE=arm-linux-gnuaebi- root at 1e15921e6d15:~/linux# export CC=clang-8
root at 1e15921e6d15:~/linux# make CC=clang-8 defconfig
HOSTCCscripts/kconfig/conf.o
HOSTLDscripts/kconfig/conf
*** Default configuration is based on 'multi_v7_defconfig' ## configuration written to .config # root at 1e15921e6d15:~/linux# make CC=clang-8 scripts/kconfig/conf --syncconfig Kconfig SYSHDR arch/arm/include/generated/uapi/asm/unistd-common.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-oabi.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-eabi.h UPD include/config/kernel.release UPD include/generated/uapi/linux/version.h UPD include/generated/utsrelease.h SYSNR arch/arm/include/generated/asm/unistd-nr.h SYSTBL arch/arm/include/generated/calls-oabi.S SYSTBL arch/arm/include/generated/calls-eabi.S CC kernel/bounds.s clang: warning: argument unused during compilation: '-Wa,-W' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-Wa,-march=armv7-a' [-Wunused-command-line-argument] UPD include/generated/bounds.h CC arch/arm/kernel/asm-offsets.s clang: warning: argument unused during compilation: '-Wa,-W' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-Wa,-march=armv7-a' [-Wunused-command-line-argument] UPD include/generated/asm-offsets.h CALL scripts/checksyscalls.sh clang: warning: argument unused during compilation: '-Wa,-W' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-Wa,-march=armv7-a' [-Wunused-command-line-argument] CC scripts/mod/empty.o clang: error: unsupported argument '-W' to option 'Wa,' scripts/Makefile.build:293: recipe for target 'scripts/mod/empty.o' failed make[2]: *** [scripts/mod/empty.o] Error 1 scripts/Makefile.build:518: recipe for target 'scripts/mod' failed make[1]: *** [scripts/mod] Error 2 Makefile:1075: recipe for target 'scripts' failed make: *** [scripts] Error 2 root at 1e15921e6d15:~/linux# clang-8 --version clang version 8.0.0-svn345496-1~exp1+0~20181029105533.852~1.gbpf10f36 (trunk)
Quoted 10 lines
Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin root at 1e15921e6d15:~/linux# arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
I think it's the 'export CC=clang-8'; without it, I can get past that point without any issues. Our continuous integration setup provides CC to make on the same line, without an export.
https://github.com/ClangBuiltLinux/continuous-integration/blob/master/driver.sh
https://travis-ci.com/ClangBuiltLinux/continuous-integration/jobs/159007956
root at faf632577e0d:/# git clone --depth=1 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git /root/linux Cloning into '/root/linux'...
remote: Counting objects: 66322, done.
remote: Compressing objects: 100% (63190/63190), done.
remote: Total 66322 (delta 5162), reused 31233 (delta 2202)
Receiving objects: 100% (66322/66322), 177.05 MiB | 10.66 MiB/s, done.
Resolving deltas: 100% (5162/5162), done.
Checking out files: 100% (62467/62467), done.
root at faf632577e0d:/# cd /root/linux
root at faf632577e0d:~/linux# export ARCH=arm
root at faf632577e0d:~/linux# export CROSS_COMPILE=arm-linux-gnueabi-
root at faf632577e0d:~/linux# make CC=clang-8 defconfig
HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o YACC scripts/kconfig/zconf.tab.c LEX scripts/kconfig/zconf.lex.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf *** Default configuration is based on 'multi_v7_defconfig' # # configuration written to .config # root at faf632577e0d:~/linux# make CC=clang-8 SYSHDR arch/arm/include/generated/uapi/asm/unistd-common.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-oabi.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-eabi.h UPD include/config/kernel.release WRAP arch/arm/include/generated/uapi/asm/bitsperlong.h WRAP arch/arm/include/generated/uapi/asm/bpf_perf_event.h WRAP arch/arm/include/generated/uapi/asm/errno.h WRAP arch/arm/include/generated/uapi/asm/ioctl.h WRAP arch/arm/include/generated/uapi/asm/ipcbuf.h WRAP arch/arm/include/generated/uapi/asm/msgbuf.h WRAP arch/arm/include/generated/uapi/asm/param.h WRAP arch/arm/include/generated/uapi/asm/poll.h WRAP arch/arm/include/generated/uapi/asm/resource.h WRAP arch/arm/include/generated/uapi/asm/sembuf.h WRAP arch/arm/include/generated/uapi/asm/shmbuf.h WRAP arch/arm/include/generated/uapi/asm/siginfo.h WRAP arch/arm/include/generated/uapi/asm/socket.h WRAP arch/arm/include/generated/uapi/asm/sockios.h WRAP arch/arm/include/generated/uapi/asm/termbits.h WRAP arch/arm/include/generated/uapi/asm/termios.h WRAP arch/arm/include/generated/asm/compat.h WRAP arch/arm/include/generated/asm/current.h WRAP arch/arm/include/generated/asm/early_ioremap.h WRAP arch/arm/include/generated/asm/emergency-restart.h WRAP arch/arm/include/generated/asm/exec.h WRAP arch/arm/include/generated/asm/extable.h WRAP arch/arm/include/generated/asm/irq_regs.h WRAP arch/arm/include/generated/asm/kdebug.h WRAP arch/arm/include/generated/asm/local.h WRAP arch/arm/include/generated/asm/local64.h WRAP arch/arm/include/generated/asm/mm-arch-hooks.h WRAP arch/arm/include/generated/asm/msi.h WRAP arch/arm/include/generated/asm/parport.h WRAP arch/arm/include/generated/asm/preempt.h WRAP arch/arm/include/generated/asm/rwsem.h WRAP arch/arm/include/generated/asm/seccomp.h WRAP arch/arm/include/generated/asm/segment.h WRAP arch/arm/include/generated/asm/serial.h WRAP arch/arm/include/generated/asm/simd.h WRAP arch/arm/include/generated/asm/sizes.h WRAP arch/arm/include/generated/asm/timex.h WRAP arch/arm/include/generated/asm/trace_clock.h UPD include/generated/uapi/linux/version.h UPD include/generated/utsrelease.h SYSNR arch/arm/include/generated/asm/unistd-nr.h GEN arch/arm/include/generated/asm/mach-types.h SYSTBL arch/arm/include/generated/calls-oabi.S SYSTBL arch/arm/include/generated/calls-eabi.S CC kernel/bounds.s UPD include/generated/bounds.h UPD include/generated/timeconst.h CC arch/arm/kernel/asm-offsets.s UPD include/generated/asm-offsets.h CALL scripts/checksyscalls.sh HOSTCC scripts/dtc/dtc.o HOSTCC scripts/dtc/flattree.o HOSTCC scripts/dtc/fstree.o HOSTCC scripts/dtc/data.o HOSTCC scripts/dtc/livetree.o HOSTCC scripts/dtc/treesource.o HOSTCC scripts/dtc/srcpos.o HOSTCC scripts/dtc/checks.o HOSTCC scripts/dtc/util.o LEX scripts/dtc/dtc-lexer.lex.c YACC scripts/dtc/dtc-parser.tab.h HOSTCC scripts/dtc/dtc-lexer.lex.o YACC scripts/dtc/dtc-parser.tab.c HOSTCC scripts/dtc/dtc-parser.tab.o HOSTLD scripts/dtc/dtc CC scripts/mod/empty.o HOSTCC scripts/mod/mk_elfconfig MKELF scripts/mod/elfconfig.h HOSTCC scripts/mod/modpost.o CC scripts/mod/devicetable-offsets.s UPD scripts/mod/devicetable-offsets.h HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/sumversion.o HOSTLD scripts/mod/modpost HOSTCC scripts/kallsyms HOSTCC scripts/conmakehash HOSTCC scripts/sortextable HOSTCC scripts/asn1_compiler HOSTCC scripts/extract-cert CHK include/generated/compile.h UPD include/generated/compile.h CC init/main.o CC init/version.o CC init/do_mounts.o CC init/do_mounts_rd.o CC init/do_mounts_initrd.o CC init/initramfs.o CC init/calibrate.o CC init/init_task.o AR init/built-in.a HOSTCC usr/gen_init_cpio GEN usr/initramfs_data.cpio AS usr/initramfs_data.o AR usr/built-in.a CC arch/arm/vfp/vfpmodule.o AS arch/arm/vfp/entry.o AS arch/arm/vfp/vfphw.o CC arch/arm/vfp/vfpsingle.o CC arch/arm/vfp/vfpdouble.o AR arch/arm/vfp/built-in.a LDS arch/arm/vdso/vdso.lds CC arch/arm/vdso/vgettimeofday.o AS arch/arm/vdso/datapage.o VDSO arch/arm/vdso/vdso.so.raw HOSTCC arch/arm/vdso/vdsomunge MUNGE arch/arm/vdso/vdso.so.dbg OBJCOPY arch/arm/vdso/vdso.so AS arch/arm/vdso/vdso.o AR arch/arm/vdso/built-in.a CC arch/arm/kernel/elf.o AS arch/arm/kernel/entry-common.o CC arch/arm/kernel/irq.o
Quoted 180 lines · Nathan Chancellor
Quoted 168 lines · Michal Simek
Quoted 99 lines · Nathan Chancellor
Quoted 89 lines · Michal Simek
Quoted 56 lines · Nathan Chancellor
Quoted 55 lines · Michal Simek
Quoted 32 lines · Nick Desaulniers
Quoted 31 lines · Michal Simek
Quoted 28 lines · Nathan Chancellor
Quoted 19 lines · Michal Simek
Quoted 14 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'Quoted 3 lines
.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
Quoted 3 lines
This is interesting. I have never tried to use llvm for building the kernel. Do you have any description how this can be done?
Depending on what version of Clang you have access to, it is usually just as simple as running 'make ARCH=arm CC=clang CROSS_COMPILE=arm-linux-gnueabi-'.
Clang 7.0+ is recommended but 6.0 might work too.
Quoted 7 lines
Quoted 2 lines
TBH I would expect to download container and run this there to make sure that I don't break anything else.
This is the first request we've had for a container in order to test a patch. If it comes up again from other folks, I think it makes sense to create one. Until then, its nice to have. It's definitely overkill for this patch.
I have played with it to see that error and here are some steps I did.
docker run --name test-clang -it --rm debian:latest bash apt-get update
apt-get install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu clang git bc build-essential bison flex make llvm vim libssl-dev sparsegit clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git--depth 1 cd linuxexport ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-Quoted 6 lines
Quoted 1 line
make defconfig
This should also have 'CC=clang' because compiler detection happens in
Kconfignow so compiler flags get properly set. Other than that, looks good and I was able to build pinctrl-zynq.o without any issues with those commands.For arm32 I am still getting compilation issue (arm64 is fine) Below are my steps and version I use. Do you know what could be the problem?
Thanks,
Michalroot at 1e15921e6d15:~/linux# arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.root at 1e15921e6d15:~/linux# clang --version
clang version 3.8.1-24 (tags/RELEASE_381/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir:/usr/binexport ARCH=arm
export CROSS_COMPILE=arm-linux-gnuaebi-
make CC=clang defconfig
make CC=clangdrivers/pinctrl/pinctrl-zynq.oQuoted 6 lines
and I get
clang: error: unsupported argument '-W' to option 'Wa,'scripts/Makefile.build:305: recipe for target 'scripts/mod/empty.o' failed make[2]: *** [scripts/mod/empty.o] Error 1scripts/Makefile.build:546: recipe for target 'scripts/mod' failedAh because Debian's regular Clang is ancient.
Quoted 9 lines
For testing, we use the builds from apt.llvm.org. Commands assuming you're using the normal Debian image:
curl https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
echo "deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch main" | tee -a/etc/apt/sources.listapt-get update -qq && apt-get install -y clang-8Then use `CC=clang-8' instead of 'CC=clang' for all make invocations.
Still I see some issues. Log below.
Thanks,
Michalroot at 1e15921e6d15:~/linux# git reset --hard v4.20-rc2 HEAD is now at
ccda4af0f4b9Linux 4.20-rc2
root at 1e15921e6d15:~/linux#
root at 1e15921e6d15:~/linux#
root at 1e15921e6d15:~/linux# export ARCH=arm
root at 1e15921e6d15:~/linux# export CROSS_COMPILE=arm-linux-gnuaebi- root at 1e15921e6d15:~/linux# export CC=clang-8
root at 1e15921e6d15:~/linux# make CC=clang-8 defconfig
HOSTCCscripts/kconfig/conf.o
HOSTLDscripts/kconfig/conf
*** Default configuration is based on 'multi_v7_defconfig' ## configuration written to .config # root at 1e15921e6d15:~/linux# make CC=clang-8 scripts/kconfig/conf --syncconfig Kconfig SYSHDR arch/arm/include/generated/uapi/asm/unistd-common.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-oabi.h SYSHDR arch/arm/include/generated/uapi/asm/unistd-eabi.h UPD include/config/kernel.release UPD include/generated/uapi/linux/version.h UPD include/generated/utsrelease.h SYSNR arch/arm/include/generated/asm/unistd-nr.h SYSTBL arch/arm/include/generated/calls-oabi.S SYSTBL arch/arm/include/generated/calls-eabi.S CC kernel/bounds.s clang: warning: argument unused during compilation: '-Wa,-W' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-Wa,-march=armv7-a' [-Wunused-command-line-argument] UPD include/generated/bounds.h CC arch/arm/kernel/asm-offsets.s clang: warning: argument unused during compilation: '-Wa,-W' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-Wa,-march=armv7-a' [-Wunused-command-line-argument] UPD include/generated/asm-offsets.h CALL scripts/checksyscalls.sh clang: warning: argument unused during compilation: '-Wa,-W' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-Wa,-march=armv7-a' [-Wunused-command-line-argument] CC scripts/mod/empty.o clang: error: unsupported argument '-W' to option 'Wa,' scripts/Makefile.build:293: recipe for target 'scripts/mod/empty.o' failed make[2]: *** [scripts/mod/empty.o] Error 1 scripts/Makefile.build:518: recipe for target 'scripts/mod' failed make[1]: *** [scripts/mod] Error 2 Makefile:1075: recipe for target 'scripts' failed make: *** [scripts] Error 2 root at 1e15921e6d15:~/linux# clang-8 --version clang version 8.0.0-svn345496-1~exp1+0~20181029105533.852~1.gbpf10f36 (trunk)Quoted 10 lines
Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin root at 1e15921e6d15:~/linux# arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Quoted 7 lines
I think it's the 'export CC=clang-8'; without it, I can get past that point without any issues. Our continuous integration setup provides CC to make on the same line, without an export.
https://github.com/ClangBuiltLinux/continuous-integration/blob/master/driver.sh
https://travis-ci.com/ClangBuiltLinux/continuous-integration/jobs/159007956
ok - Nice links. You use docker already which is exactly what I was looking for.
I found where the issue was. I did a typo
export CROSS_COMPILE=arm-linux-gnuaebi-
it should be
export CROSS_COMPILE=arm-linux-gnueabi-
Thanks for help to resolve this.
Thanks,
Michal
PATCH v2 1/1 pinctrl: zynq: Use define directive for PIN_CONFIG_IO_STANDARD
In reply to Nathan ChancellorClang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enum zynq_pin_config_param' to different enumeration type 'enum pin_config_param' [-Wenum-conversion]
{"io-standard", PIN_CONFIG_IOSTANDARD, zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enum zynq_pin_config_param' to different enumeration type 'enum pin_config_param' [-Wenum-conversion]
= { PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'
.param = a, .display = b, .format = c, .has_arg = d \
^2 warnings generated.
It is expected that pinctrl drivers can extend pin_config_param because of the gap between PIN_CONFIG_END and PIN_CONFIG_MAX so this conversion isn't an issue. Most drivers that take advantage of this define the PIN_CONFIG variables as constants, rather than enumerated values. Do the same thing here so that Clang no longer warns.
---
v1 -> v2:
* Avoid kernel-doc warning
drivers/pinctrl/pinctrl-zynq.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
drivers/pinctrl/pinctrl-zynq.c +3 -6
@@ -971,15 +971,12 @@ enum zynq_io_standards {zynq_iostd_max }; -/** -* enum zynq_pin_config_param - possible pin configuration parameters -* @PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to +/* +* PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to * this parameter (on a custom format) tells the driver which alternative * IO standard to use. */ -enum zynq_pin_config_param { -PIN_CONFIG_IOSTANDARD =PIN_CONFIG_END +1 , -}; +#define PIN_CONFIG_IOSTANDARD (PIN_CONFIG_END + 1)static const struct pinconf_generic_params zynq_dt_params[] = { {"io-standard" ,PIN_CONFIG_IOSTANDARD , zynq_iostd_lvcmos18},
Signature · 1 line
2.19.1
Quoted 48 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
It is expected that pinctrl drivers can extend
pin_config_parambecause of the gap betweenPIN_CONFIG_ENDandPIN_CONFIG_MAXso this conversion isn't an issue. Most drivers that take advantage of this define thePIN_CONFIGvariables as constants, rather than enumerated values. Do the same thing here so that Clang no longer warns.Signed-off-by Nathan Chancellor <[email protected]>---
v1 -> v2:
* Avoid kernel-doc warning
drivers/pinctrl/pinctrl-zynq.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)drivers/pinctrl/pinctrl-zynq.c +2
-3@@ -971,15 +971,12 @@ enum zynq_io_standards { zynq_iostd_max }; -/** -* enum zynq_pin_config_param - possible pin configuration parameters -* @PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to +/* +* PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to
drivers/pinctrl/pinctrl-zynq.c enum zynq_io_standards { · line 982
Quoted 10 lines
drivers/pinctrl/pinctrl-zynq.c +1
-3* this parameter (on a custom format) tells the driver which alternative * IO standard to use. */ -enum zynq_pin_config_param { -PIN_CONFIG_IOSTANDARD =PIN_CONFIG_END +1 , -}; +#define PIN_CONFIG_IOSTANDARD (PIN_CONFIG_END + 1)static const struct pinconf_generic_params zynq_dt_params[] = { {"io-standard" ,PIN_CONFIG_IOSTANDARD , zynq_iostd_lvcmos18},
Thanks,
Michal
Quoted 24 lines · Nathan Chancellor
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-zynq.c:985:18: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
{"io-standard",PIN_CONFIG_IOSTANDARD,zynq_iostd_lvcmos18},
~ ^~~~~~~~~~~~~~~~~~~~~drivers/pinctrl/pinctrl-zynq.c:990:16: warning: implicit conversion from enumeration type 'enumzynq_pin_config_param' to different enumeration type 'enumpin_config_param' [-Wenum-conversion]
= {PCONFDUMP(PIN_CONFIG_IOSTANDARD, "IO-standard", NULL, true),
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~./include/linux/pinctrl/pinconf-generic.h:163:11: note: expanded from macro 'PCONFDUMP'.param = a, .display = b, .format = c, .has_arg = d \ ^2 warnings generated.
It is expected that pinctrl drivers can extend
pin_config_parambecause of the gap betweenPIN_CONFIG_ENDandPIN_CONFIG_MAXso this conversion isn't an issue. Most drivers that take advantage of this define thePIN_CONFIGvariables as constants, rather than enumerated values. Do the same thing here so that Clang no longer warns.
Quoted 4 lines
Signed-off-by Nathan Chancellor <[email protected]>---
v1 -> v2:
This v2 version applied with Michal's ACK.
Yours,
Linus Walleij