Skip to contentSkip to conversation

pinctrl: zynq: Use define directive for PIN_CONFIG_IO_STANDARD

PATCH Superseded Nathan Chancellor 4 participants 15 messages Nov 1, 2018 – Nov 19, 2018

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

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
index a0daf27042bd..57046c221756 100644
@@ -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
#1 lore raw
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 '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'

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_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 +0 -0
index a0daf27042bd..57046c221756 100644

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

#2 lore raw
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 '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'

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_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 +0 -0
index a0daf27042bd..57046c221756 100644

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.

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

#3 lore raw
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 '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.

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

#4 lore raw
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 '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'

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
#5 lore raw
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 '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'

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 clone
git://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

#6 lore raw
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 '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'

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 linux

export 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.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

#7 lore raw
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 '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'

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 clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git --depth 1 cd linux

export 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 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.

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

#8 lore raw
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 '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'

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 clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git --depth 1 cd linux

export 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 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.

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

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 1 scripts/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

#9 lore raw
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 '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'

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 clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git --depth 1 cd linux

export 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 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.

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

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 1 scripts/Makefile.build:546: recipe for target 'scripts/mod' failed

Ah 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.list apt-get update -qq && apt-get install -y clang-8

Then 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.
#10 lore raw
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 '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'

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 clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git --depth 1 cd linux

export 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 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.

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

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 1 scripts/Makefile.build:546: recipe for target 'scripts/mod' failed

Ah 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.list apt-get update -qq && apt-get install -y clang-8

Then 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)
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
#11 lore raw
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 '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'

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 clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git --depth 1 cd linux

export 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 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.

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

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 1 scripts/Makefile.build:546: recipe for target 'scripts/mod' failed

Ah 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.list apt-get update -qq && apt-get install -y clang-8

Then 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)
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

#12 lore raw

PATCH v2 1/1 pinctrl: zynq: Use define directive for PIN_CONFIG_IO_STANDARD

In reply to 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 '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
index a0daf27042bd..90fd37e8207b 100644
@@ -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
Acked-by on v2 1/1
#13 lore raw
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 '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 +2 -3
index a0daf27042bd..90fd37e8207b 100644
@@ -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

#14 lore raw
In reply to Nathan Chancellor
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 '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.

Quoted 4 lines

---

v1 -> v2:

This v2 version applied with Michal's ACK.

Yours,
Linus Walleij