Message ID | 20191112081625.27695-1-ynezz@true.cz |
---|---|
State | Changes Requested |
Delegated to: | Petr Štetiar |
Headers | show |
Series | [OpenWrt-Devel] build: make GCC version 6+ minimal host build requirement | expand |
Looks good to me, I ran into this issue before and would appreciate moving forward to 6. On 11/11/19 10:16 PM, Petr Štetiar wrote: > Currently minimal GNU supported GCC version is 7 (from May 2, 2017), buildbots > are using default GCC version 6 on Debian 9 (old stable), current Debian > stable 10 has GCC version 8. > > Signed-off-by: Petr Štetiar <ynezz@true.cz> > --- > > While adding CI support in C based projects, I've started adding -Wextra as > well, which seems to work just fine for gcc6+, but it's apparently causing > issues with older GCCs like for example gcc 4.8.5[1] on CentOS 7. > > Although it's certainly possible to fix those issues and make gcc 4 usable, I > think, that it's not worth the additional effort and resources anymore. > > 1. https://github.com/openwrt/openwrt/commit/4ba8f7b1ef1e4c0607185a41c06b51928c625d8b > > README | 2 +- > include/prereq-build.mk | 18 ++++-------------- > 2 files changed, 5 insertions(+), 15 deletions(-) > > diff --git a/README b/README > index c867c1fa4da8..6d11dd1188ff 100644 > --- a/README > +++ b/README > @@ -11,7 +11,7 @@ To build your own firmware you need a Linux, BSD or MacOSX system (case > sensitive filesystem required). Cygwin is unsupported because of the lack > of a case sensitive file system. > > -You need gcc, binutils, bzip2, flex, python3.5+, perl, make, find, grep, diff, > +You need gcc6+, binutils, bzip2, flex, python3.5+, perl, make, find, grep, diff, > unzip, gawk, getopt, subversion, libz-dev and libc headers installed. > > 1. Run "./scripts/feeds update -a" to obtain all the latest package definitions > diff --git a/include/prereq-build.mk b/include/prereq-build.mk > index 4c5991005634..58cbc0678fa1 100644 > --- a/include/prereq-build.mk > +++ b/include/prereq-build.mk > @@ -27,12 +27,7 @@ $(eval $(call TestHostCommand,proper-umask, \ > umask | grep -xE 0?0[012][012])) > > $(eval $(call SetupHostCommand,gcc, \ > - Please install the GNU C Compiler (gcc) 4.8 or later, \ > - $(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - gcc48 --version | grep gcc, \ > - gcc49 --version | grep gcc, \ > - gcc5 --version | grep gcc, \ > + Please install the GNU C Compiler (gcc) 6 or later, \ > gcc6 --version | grep gcc, \ > gcc7 --version | grep gcc, \ > gcc8 --version | grep gcc, \ > @@ -40,18 +35,13 @@ $(eval $(call SetupHostCommand,gcc, \ > gcc --version | grep -E 'Apple.(LLVM|clang)' )) > > $(eval $(call TestHostCommand,working-gcc, \ > - \nPlease reinstall the GNU C Compiler (4.8 or later) - \ > + \nPlease reinstall the GNU C Compiler (6 or later) - \ > it appears to be broken, \ > echo 'int main(int argc, char **argv) { return 0; }' | \ > gcc -x c -o $(TMP_DIR)/a.out -)) > > $(eval $(call SetupHostCommand,g++, \ > - Please install the GNU C++ Compiler (g++) 4.8 or later, \ > - $(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - g++48 --version | grep g++, \ > - g++49 --version | grep g++, \ > - g++5 --version | grep g++, \ > + Please install the GNU C++ Compiler (g++) 6 or later, \ > g++6 --version | grep g++, \ > g++7 --version | grep g++, \ > g++8 --version | grep g++, \ > @@ -59,7 +49,7 @@ $(eval $(call SetupHostCommand,g++, \ > g++ --version | grep -E 'Apple.(LLVM|clang)' )) > > $(eval $(call TestHostCommand,working-g++, \ > - \nPlease reinstall the GNU C++ Compiler (4.8 or later) - \ > + \nPlease reinstall the GNU C++ Compiler (6 or later) - \ > it appears to be broken, \ > echo 'int main(int argc, char **argv) { return 0; }' | \ > g++ -x c++ -o $(TMP_DIR)/a.out - -lstdc++ && \ > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
On Tue, 12 Nov 2019 at 16:16, Petr Štetiar <ynezz@true.cz> wrote: > > Currently minimal GNU supported GCC version is 7 (from May 2, 2017), buildbots > are using default GCC version 6 on Debian 9 (old stable), current Debian > stable 10 has GCC version 8. > > Signed-off-by: Petr Štetiar <ynezz@true.cz> > --- > > While adding CI support in C based projects, I've started adding -Wextra as > well, which seems to work just fine for gcc6+, but it's apparently causing > issues with older GCCs like for example gcc 4.8.5[1] on CentOS 7. > > Although it's certainly possible to fix those issues and make gcc 4 usable, I > think, that it's not worth the additional effort and resources anymore. > > 1. https://github.com/openwrt/openwrt/commit/4ba8f7b1ef1e4c0607185a41c06b51928c625d8b NAK from me ;( Not quite sure how much benefit enforcing -Wextra can bring to the whole code base. Excluding support for vanilla CentOS7 will certainly cause inconvenience for large numbers of users. That is probably more so to serious industrial users. yousong > > README | 2 +- > include/prereq-build.mk | 18 ++++-------------- > 2 files changed, 5 insertions(+), 15 deletions(-) > > diff --git a/README b/README > index c867c1fa4da8..6d11dd1188ff 100644 > --- a/README > +++ b/README > @@ -11,7 +11,7 @@ To build your own firmware you need a Linux, BSD or MacOSX system (case > sensitive filesystem required). Cygwin is unsupported because of the lack > of a case sensitive file system. > > -You need gcc, binutils, bzip2, flex, python3.5+, perl, make, find, grep, diff, > +You need gcc6+, binutils, bzip2, flex, python3.5+, perl, make, find, grep, diff, > unzip, gawk, getopt, subversion, libz-dev and libc headers installed. > > 1. Run "./scripts/feeds update -a" to obtain all the latest package definitions > diff --git a/include/prereq-build.mk b/include/prereq-build.mk > index 4c5991005634..58cbc0678fa1 100644 > --- a/include/prereq-build.mk > +++ b/include/prereq-build.mk > @@ -27,12 +27,7 @@ $(eval $(call TestHostCommand,proper-umask, \ > umask | grep -xE 0?0[012][012])) > > $(eval $(call SetupHostCommand,gcc, \ > - Please install the GNU C Compiler (gcc) 4.8 or later, \ > - $(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - gcc48 --version | grep gcc, \ > - gcc49 --version | grep gcc, \ > - gcc5 --version | grep gcc, \ > + Please install the GNU C Compiler (gcc) 6 or later, \ > gcc6 --version | grep gcc, \ > gcc7 --version | grep gcc, \ > gcc8 --version | grep gcc, \ > @@ -40,18 +35,13 @@ $(eval $(call SetupHostCommand,gcc, \ > gcc --version | grep -E 'Apple.(LLVM|clang)' )) > > $(eval $(call TestHostCommand,working-gcc, \ > - \nPlease reinstall the GNU C Compiler (4.8 or later) - \ > + \nPlease reinstall the GNU C Compiler (6 or later) - \ > it appears to be broken, \ > echo 'int main(int argc, char **argv) { return 0; }' | \ > gcc -x c -o $(TMP_DIR)/a.out -)) > > $(eval $(call SetupHostCommand,g++, \ > - Please install the GNU C++ Compiler (g++) 4.8 or later, \ > - $(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - g++48 --version | grep g++, \ > - g++49 --version | grep g++, \ > - g++5 --version | grep g++, \ > + Please install the GNU C++ Compiler (g++) 6 or later, \ > g++6 --version | grep g++, \ > g++7 --version | grep g++, \ > g++8 --version | grep g++, \ > @@ -59,7 +49,7 @@ $(eval $(call SetupHostCommand,g++, \ > g++ --version | grep -E 'Apple.(LLVM|clang)' )) > > $(eval $(call TestHostCommand,working-g++, \ > - \nPlease reinstall the GNU C++ Compiler (4.8 or later) - \ > + \nPlease reinstall the GNU C++ Compiler (6 or later) - \ > it appears to be broken, \ > echo 'int main(int argc, char **argv) { return 0; }' | \ > g++ -x c++ -o $(TMP_DIR)/a.out - -lstdc++ && \ > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
Yousong Zhou <yszhou4tech@gmail.com> [2019-11-12 16:26:14]: Hi, > Not quite sure how much benefit enforcing -Wextra can bring to the > whole code base. I'm adding -Wextra for some time already to any C project I touch, nobody has objected against it so far. I'm adding it because I think, that the latest compilers are producing usable warnings, less false positives and that it should be one of the standard hardening options for any network facing project. I see -Wextra just as another pair of review eyes for me, even if it's provided by the machine. It's just older GCC versions making -Wextra PITA, so if we decide to keep support for gcc-4.8+, then it would probably make sense to enable -Wextra for gcc6+. > Excluding support for vanilla CentOS7 will certainly cause inconvenience for > large numbers of users. Well, I don't see anything bad about sunsetting of old tools. This is master, so next OpenWrt release somewhere in the 2020, so probably not a big deal, right? They're going to install python3 anyway as well. > That is probably more so to serious industrial users. If I'm able to install gcc-4.8 on my latest stable Debian, then I assume, that it should be relatively straight forward to install some decent GCC version on <your-stable-distro> as well. If we decide to keep gcc-4.8 support, wouldn't it make sense to use gcc-4.8 on buildbots as well? You know, in order to catch similar issues during QA process. I can certainly add gcc-4.8, gcc-4.9, gcc-5 to the CI compiler mix (currently has gcc-7, gcc-8, gcc-9 and clang-9 compilers), but this is going to result in the 6 additional compile/run tests (3 * release/debug), so it makes me wonder if it's really worth the resources/efforts. -- ynezz
On Tue, 12 Nov 2019 at 17:12, Petr Štetiar <ynezz@true.cz> wrote: > > Yousong Zhou <yszhou4tech@gmail.com> [2019-11-12 16:26:14]: > > Hi, > > > Not quite sure how much benefit enforcing -Wextra can bring to the > > whole code base. > > I'm adding -Wextra for some time already to any C project I touch, nobody has > objected against it so far. I'm adding it because I think, that the latest > compilers are producing usable warnings, less false positives and that it > should be one of the standard hardening options for any network facing > project. I see -Wextra just as another pair of review eyes for me, even if > it's provided by the machine. I agree, especially when it comes to quality assurance. > > It's just older GCC versions making -Wextra PITA, so if we decide to keep > support for gcc-4.8+, then it would probably make sense to enable -Wextra for > gcc6+. This is not bad. Only feeding those options to toolchains with decent support of them, with less confusing false positives. Users with better toolchains will notice them and users with old toolchains still benefit from it. > > > Excluding support for vanilla CentOS7 will certainly cause inconvenience for > > large numbers of users. > > Well, I don't see anything bad about sunsetting of old tools. This is master, > so next OpenWrt release somewhere in the 2020, so probably not a big deal, > right? They're going to install python3 anyway as well. > > > That is probably more so to serious industrial users. > > If I'm able to install gcc-4.8 on my latest stable Debian, then I assume, that > it should be relatively straight forward to install some decent GCC version on > <your-stable-distro> as well. How old to be old that is a question to ask. In the specific case of rhel7/centos7, I suppose it is still widely deployed and used. It is supposed to have at least 10 years support backed by redhat. Its "retirement" is supposed to be at year 2024 with extended life-cycle support not yet decided. Nah, I cannot speak for/represent rhel/centos community. I have never owned a red hat. Python3 has been around for more than 10 years and it's no surprise that it should be readily available. Even the eol centos6 could have it with epel enabled. With centos7, I am not aware of any official ways to install newer versions of software, only bugfixes. I tried for a few times with packages provided by SoftwareCollections.org, but it's definitely not "straightforward" enough in my opinion. > > If we decide to keep gcc-4.8 support, wouldn't it make sense to use gcc-4.8 on > buildbots as well? You know, in order to catch similar issues during QA > process. > > I can certainly add gcc-4.8, gcc-4.9, gcc-5 to the CI compiler mix (currently > has gcc-7, gcc-8, gcc-9 and clang-9 compilers), but this is going to result in > the 6 additional compile/run tests (3 * release/debug), so it makes me wonder > if it's really worth the resources/efforts. > > -- ynezz I think we agree that whatever the decision is at the end, it's just trade-off. My concern is that closing doors for support of gcc 4.8 is being too rigid. Note that we are talking about host build with host toolchain whose input we control and whose product only runs on the host itself at build times. Regards, yousong
Yousong Zhou <yszhou4tech@gmail.com> [2019-11-12 18:37:21]: > I tried for a few times with packages provided by SoftwareCollections.org, > but it's definitely not "straightforward" enough in my opinion. I tried to install developer toolset version 8 in CentOS 7 Docker container in order to triage the same compile failure happening with GCC 8.3[1] and it simply worked as advertised, I was able to use GCC 8.3 on CentOS 7 just fine. > Note that we are talking about host build with host toolchain whose input we > control and whose product only runs on the host itself at build times. Note that fwtool is just a tip of the iceberg, reminder, that we're still supporting archaic compiler versions. Just imagine tools/firmware-utils with -Wextra as the next step... 1. https://github.com/openwrt/openwrt/commit/4ba8f7b1ef1e4c0607185a41c06b51928c625d8b#commitcomment-35914043 -- ynezz
Hi Petr, Le mar. 12 nov. 2019 à 00:16, Petr Štetiar <ynezz@true.cz> a écrit : > > Currently minimal GNU supported GCC version is 7 (from May 2, 2017), buildbots > are using default GCC version 6 on Debian 9 (old stable), current Debian > stable 10 has GCC version 8. > > Signed-off-by: Petr Štetiar <ynezz@true.cz> > --- > > While adding CI support in C based projects, I've started adding -Wextra as > well, which seems to work just fine for gcc6+, but it's apparently causing > issues with older GCCs like for example gcc 4.8.5[1] on CentOS 7. > > Although it's certainly possible to fix those issues and make gcc 4 usable, I > think, that it's not worth the additional effort and resources anymore. > > 1. https://github.com/openwrt/openwrt/commit/4ba8f7b1ef1e4c0607185a41c06b51928c625d8b > > README | 2 +- > include/prereq-build.mk | 18 ++++-------------- > 2 files changed, 5 insertions(+), 15 deletions(-) > > diff --git a/README b/README > index c867c1fa4da8..6d11dd1188ff 100644 > --- a/README > +++ b/README > @@ -11,7 +11,7 @@ To build your own firmware you need a Linux, BSD or MacOSX system (case > sensitive filesystem required). Cygwin is unsupported because of the lack > of a case sensitive file system. > > -You need gcc, binutils, bzip2, flex, python3.5+, perl, make, find, grep, diff, > +You need gcc6+, binutils, bzip2, flex, python3.5+, perl, make, find, grep, diff, > unzip, gawk, getopt, subversion, libz-dev and libc headers installed. > > 1. Run "./scripts/feeds update -a" to obtain all the latest package definitions > diff --git a/include/prereq-build.mk b/include/prereq-build.mk > index 4c5991005634..58cbc0678fa1 100644 > --- a/include/prereq-build.mk > +++ b/include/prereq-build.mk > @@ -27,12 +27,7 @@ $(eval $(call TestHostCommand,proper-umask, \ > umask | grep -xE 0?0[012][012])) > > $(eval $(call SetupHostCommand,gcc, \ > - Please install the GNU C Compiler (gcc) 4.8 or later, \ > - $(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - gcc48 --version | grep gcc, \ > - gcc49 --version | grep gcc, \ > - gcc5 --version | grep gcc, \ > + Please install the GNU C Compiler (gcc) 6 or later, \ > gcc6 --version | grep gcc, \ > gcc7 --version | grep gcc, \ > gcc8 --version | grep gcc, \ Don't we also want to reverse the order to choose the newest compiler first ? Also on Fedora 31, in the path I only have gcc, not gcc9, what I match is: $ gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)' 9 not the other rules, so this patch breaks at least Fedora 31 Etienne > @@ -40,18 +35,13 @@ $(eval $(call SetupHostCommand,gcc, \ > gcc --version | grep -E 'Apple.(LLVM|clang)' )) > > $(eval $(call TestHostCommand,working-gcc, \ > - \nPlease reinstall the GNU C Compiler (4.8 or later) - \ > + \nPlease reinstall the GNU C Compiler (6 or later) - \ > it appears to be broken, \ > echo 'int main(int argc, char **argv) { return 0; }' | \ > gcc -x c -o $(TMP_DIR)/a.out -)) > > $(eval $(call SetupHostCommand,g++, \ > - Please install the GNU C++ Compiler (g++) 4.8 or later, \ > - $(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ > - g++48 --version | grep g++, \ > - g++49 --version | grep g++, \ > - g++5 --version | grep g++, \ > + Please install the GNU C++ Compiler (g++) 6 or later, \ > g++6 --version | grep g++, \ > g++7 --version | grep g++, \ > g++8 --version | grep g++, \ > @@ -59,7 +49,7 @@ $(eval $(call SetupHostCommand,g++, \ > g++ --version | grep -E 'Apple.(LLVM|clang)' )) > > $(eval $(call TestHostCommand,working-g++, \ > - \nPlease reinstall the GNU C++ Compiler (4.8 or later) - \ > + \nPlease reinstall the GNU C++ Compiler (6 or later) - \ > it appears to be broken, \ > echo 'int main(int argc, char **argv) { return 0; }' | \ > g++ -x c++ -o $(TMP_DIR)/a.out - -lstdc++ && \ > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
diff --git a/README b/README index c867c1fa4da8..6d11dd1188ff 100644 --- a/README +++ b/README @@ -11,7 +11,7 @@ To build your own firmware you need a Linux, BSD or MacOSX system (case sensitive filesystem required). Cygwin is unsupported because of the lack of a case sensitive file system. -You need gcc, binutils, bzip2, flex, python3.5+, perl, make, find, grep, diff, +You need gcc6+, binutils, bzip2, flex, python3.5+, perl, make, find, grep, diff, unzip, gawk, getopt, subversion, libz-dev and libc headers installed. 1. Run "./scripts/feeds update -a" to obtain all the latest package definitions diff --git a/include/prereq-build.mk b/include/prereq-build.mk index 4c5991005634..58cbc0678fa1 100644 --- a/include/prereq-build.mk +++ b/include/prereq-build.mk @@ -27,12 +27,7 @@ $(eval $(call TestHostCommand,proper-umask, \ umask | grep -xE 0?0[012][012])) $(eval $(call SetupHostCommand,gcc, \ - Please install the GNU C Compiler (gcc) 4.8 or later, \ - $(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ - gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ - gcc48 --version | grep gcc, \ - gcc49 --version | grep gcc, \ - gcc5 --version | grep gcc, \ + Please install the GNU C Compiler (gcc) 6 or later, \ gcc6 --version | grep gcc, \ gcc7 --version | grep gcc, \ gcc8 --version | grep gcc, \ @@ -40,18 +35,13 @@ $(eval $(call SetupHostCommand,gcc, \ gcc --version | grep -E 'Apple.(LLVM|clang)' )) $(eval $(call TestHostCommand,working-gcc, \ - \nPlease reinstall the GNU C Compiler (4.8 or later) - \ + \nPlease reinstall the GNU C Compiler (6 or later) - \ it appears to be broken, \ echo 'int main(int argc, char **argv) { return 0; }' | \ gcc -x c -o $(TMP_DIR)/a.out -)) $(eval $(call SetupHostCommand,g++, \ - Please install the GNU C++ Compiler (g++) 4.8 or later, \ - $(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ - g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ - g++48 --version | grep g++, \ - g++49 --version | grep g++, \ - g++5 --version | grep g++, \ + Please install the GNU C++ Compiler (g++) 6 or later, \ g++6 --version | grep g++, \ g++7 --version | grep g++, \ g++8 --version | grep g++, \ @@ -59,7 +49,7 @@ $(eval $(call SetupHostCommand,g++, \ g++ --version | grep -E 'Apple.(LLVM|clang)' )) $(eval $(call TestHostCommand,working-g++, \ - \nPlease reinstall the GNU C++ Compiler (4.8 or later) - \ + \nPlease reinstall the GNU C++ Compiler (6 or later) - \ it appears to be broken, \ echo 'int main(int argc, char **argv) { return 0; }' | \ g++ -x c++ -o $(TMP_DIR)/a.out - -lstdc++ && \
Currently minimal GNU supported GCC version is 7 (from May 2, 2017), buildbots are using default GCC version 6 on Debian 9 (old stable), current Debian stable 10 has GCC version 8. Signed-off-by: Petr Štetiar <ynezz@true.cz> --- While adding CI support in C based projects, I've started adding -Wextra as well, which seems to work just fine for gcc6+, but it's apparently causing issues with older GCCs like for example gcc 4.8.5[1] on CentOS 7. Although it's certainly possible to fix those issues and make gcc 4 usable, I think, that it's not worth the additional effort and resources anymore. 1. https://github.com/openwrt/openwrt/commit/4ba8f7b1ef1e4c0607185a41c06b51928c625d8b README | 2 +- include/prereq-build.mk | 18 ++++-------------- 2 files changed, 5 insertions(+), 15 deletions(-)