bigbigmdm / IMSProg

IMSProg - software for CH341A-based programmers to work with I2C, SPI and MicroWire EEPROM/Flash chips
https://antenna-dvb-t2.ru/IMSProg.php
GNU General Public License v3.0
244 stars 42 forks source link

add Clang #63

Closed AndreiCherniaev closed 7 months ago

AndreiCherniaev commented 7 months ago

tested with clear Ubuntu 22

original sudo apt-get install cmake libusb-1.0-0-dev qtbase5-dev pkg-config is not enough

Optionally you can use sudo apt-get install g++ instead of sudo apt-get install clang

bigbigmdm commented 7 months ago

clang подразумевает gcc и build-essential?

AndreiCherniaev commented 7 months ago

clang подразумевает gcc и build-essential?

это как g++ только лучше

Fantu commented 7 months ago

Build with clang is optional and already keep tested by build workflow, add it to required software I think it's useless and confusing

bigbigmdm commented 7 months ago

Thank you, @Fantu !

AndreiCherniaev commented 7 months ago

Build with clang is optional and already keep tested by build workflow, add it to required software I think it's useless and confusing

Using original sudo apt-get install cmake libusb-1.0-0-dev qtbase5-dev pkg-config In clear Ubuntu 22 I get error "No CMAKE_CXX_COMPILER could be found."... So I add clang. With clang works.

Fantu commented 7 months ago

Probably can be specified g++ or clang and also pkgconf or pkg-config So the choice is left to the user

AndreiCherniaev commented 7 months ago

Probably can be specified g++ or clang and also pkgconf or pkg-config So the choice is left to the user

in this case let's drop qtbase5-dev also: may be user wants build Qt from source and static linking with IMSProg.

bigbigmdm commented 7 months ago

@AndreiCherniaev , It's already too particular a case.

AndreiCherniaev commented 7 months ago

@AndreiCherniaev , It's already too particular a case.

For me still not clear why you give list sudo apt-get install cmake libusb-1.0-0-dev qtbase5-dev pkg-config Which is not full. I expect minimal-working example from README.md. But current example makes "No CMAKE_CXX_COMPILER could be found." in Ubuntu 22

bigbigmdm commented 7 months ago

@AndreiCherniaev @Fantu Okay. Let's settle on build-essential.

AndreiCherniaev commented 7 months ago

build-essential

Why not g++? g++ only is less in size But g++ is like clang but you say user should decide... build-essential=g++ + a lot of other things

bigbigmdm commented 7 months ago

@Fantu , what do you make of this?

Fantu commented 7 months ago

As specified in https://github.com/bigbigmdm/IMSProg/pull/63#issuecomment-1941163386

Probably can be specified g++ or clang and also pkgconf or pkg-config So the choice is left to the user

On clean build env. g++ or clang install is not needed but on normal user installation if he never installs build tools yes, I normally install build-essential, so I don't remember for sure if it is enough g++

bigbigmdm commented 7 months ago

I also always install build-essential on a new computer.

AndreiCherniaev commented 7 months ago

As specified in #63 (comment)

Probably can be specified g++ or clang and also pkgconf or pkg-config So the choice is left to the user

On clean build env. g++ or clang install is not needed but on normal user installation if he never installs build tools yes, I normally install build-essential, so I don't remember for sure if it is enough g++

clang or g++ is enough. I have tested on Ubuntu 22.

bigbigmdm commented 7 months ago

@AndreiCherniaev , it is a first link from the internet.

AndreiCherniaev commented 7 months ago

@AndreiCherniaev , it is a first link from the internet.

Second link from internet: "The build-essentials packages are meta-packages that are necessary for compiling software. They include the GNU debugger, g++/GNU compiler collection, and some more tools and libraries that are required to compile a program."

Anyway let's test on clear Ubuntu 23.10.

After I install and upgrade Ubuntu I do

sudo apt-get install git
git clone https://github.com/bigbigmdm/IMSProg.git && cd IMSProg

And make snapshot of my Virtual Machine Manager. Every new trying I will do since this snapshot.

1) clang - way

q@virt:~/IMSProg$ sudo apt-get install cmake clang libusb-1.0-0-dev qtbase5-dev pkg-config
[sudo] password for q: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu clang-16 cmake-data gcc gcc-13 icu-devtools lib32gcc-s1 lib32stdc++6 libasan8 libbinutils libc-dev-bin libc-devtools libc6-dev libc6-i386 libcc1-0 libclang-common-16-dev libclang-cpp16 libclang-rt-16-dev libclang1-16
  libcrypt-dev libctf-nobfd0 libctf0 libdouble-conversion3 libegl-dev libffi-dev libgc1 libgcc-13-dev libgl-dev libglu1-mesa-dev libglx-dev libgprofng0 libhwasan0 libicu-dev libitm1 libjsoncpp25 libllvm16 liblsan0 libmd4c0 libncurses-dev libnsl-dev libobjc-13-dev libobjc4
  libopengl-dev libpcre2-16-0 libpfm4 libpkgconf3 libpthread-stubs0-dev libqt5concurrent5 libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5opengl5 libqt5opengl5-dev libqt5printsupport5 libqt5qml5 libqt5qmlmodels5 libqt5quick5 libqt5sql5 libqt5sql5-sqlite libqt5svg5
  libqt5test5 libqt5waylandclient5 libqt5waylandcompositor5 libqt5widgets5 libqt5xml5 libquadmath0 librhash0 libsframe1 libstdc++-13-dev libtirpc-dev libtsan2 libubsan1 libusb-1.0-doc libvulkan-dev libx11-dev libxau-dev libxcb-xinerama0 libxcb-xinput0 libxcb1-dev libxdmcp-dev
  libxext-dev libxml2-dev libz3-4 libz3-dev linux-libc-dev llvm-16 llvm-16-dev llvm-16-linker-tools llvm-16-runtime llvm-16-tools make manpages-dev pkgconf pkgconf-bin qt5-gtk-platformtheme qt5-qmake qt5-qmake-bin qtbase5-dev-tools qtchooser qttranslations5-l10n qtwayland5
  rpcsvc-proto x11proto-dev xorg-sgml-doctools xtrans-dev
Suggested packages:
  binutils-doc gprofng-gui clang-16-doc wasi-libc cmake-doc cmake-format elpa-cmake-mode ninja-build gcc-multilib autoconf automake libtool flex bison gcc-doc gcc-13-multilib gcc-13-doc gcc-13-locales glibc-doc icu-doc ncurses-doc qgnomeplatform-qt5 qt5-image-formats-plugins
  qt5-qmltooling-plugins libstdc++-13-doc libx11-doc libxcb-doc libxext-doc llvm-16-doc make-doc default-libmysqlclient-dev firebird-dev libpq-dev libsqlite3-dev unixodbc-dev
The following NEW packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu clang clang-16 cmake cmake-data gcc gcc-13 icu-devtools lib32gcc-s1 lib32stdc++6 libasan8 libbinutils libc-dev-bin libc-devtools libc6-dev libc6-i386 libcc1-0 libclang-common-16-dev libclang-cpp16 libclang-rt-16-dev
  libclang1-16 libcrypt-dev libctf-nobfd0 libctf0 libdouble-conversion3 libegl-dev libffi-dev libgc1 libgcc-13-dev libgl-dev libglu1-mesa-dev libglx-dev libgprofng0 libhwasan0 libicu-dev libitm1 libjsoncpp25 libllvm16 liblsan0 libmd4c0 libncurses-dev libnsl-dev libobjc-13-dev
  libobjc4 libopengl-dev libpcre2-16-0 libpfm4 libpkgconf3 libpthread-stubs0-dev libqt5concurrent5 libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5opengl5 libqt5opengl5-dev libqt5printsupport5 libqt5qml5 libqt5qmlmodels5 libqt5quick5 libqt5sql5 libqt5sql5-sqlite
  libqt5svg5 libqt5test5 libqt5waylandclient5 libqt5waylandcompositor5 libqt5widgets5 libqt5xml5 libquadmath0 librhash0 libsframe1 libstdc++-13-dev libtirpc-dev libtsan2 libubsan1 libusb-1.0-0-dev libusb-1.0-doc libvulkan-dev libx11-dev libxau-dev libxcb-xinerama0 libxcb-xinput0
  libxcb1-dev libxdmcp-dev libxext-dev libxml2-dev libz3-4 libz3-dev linux-libc-dev llvm-16 llvm-16-dev llvm-16-linker-tools llvm-16-runtime llvm-16-tools make manpages-dev pkg-config pkgconf pkgconf-bin qt5-gtk-platformtheme qt5-qmake qt5-qmake-bin qtbase5-dev qtbase5-dev-tools
  qtchooser qttranslations5-l10n qtwayland5 rpcsvc-proto x11proto-dev xorg-sgml-doctools xtrans-dev
0 upgraded, 113 newly installed, 0 to remove and 0 not upgraded.
q@virt:~/IMSProg$ sudo ./build_all.sh

image

1) g++ - way

q@virt:~$ sudo apt-get install cmake g++ libusb-1.0-0-dev qtbase5-dev pkg-config
[sudo] password for q: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu cmake-data g++-13 gcc gcc-13 libasan8 libbinutils libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libdouble-conversion3 libegl-dev libgcc-13-dev libgl-dev libglu1-mesa-dev libglx-dev libgprofng0
  libhwasan0 libitm1 libjsoncpp25 liblsan0 libmd4c0 libnsl-dev libopengl-dev libpcre2-16-0 libpkgconf3 libpthread-stubs0-dev libqt5concurrent5 libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5opengl5 libqt5opengl5-dev libqt5printsupport5 libqt5qml5 libqt5qmlmodels5
  libqt5quick5 libqt5sql5 libqt5sql5-sqlite libqt5svg5 libqt5test5 libqt5waylandclient5 libqt5waylandcompositor5 libqt5widgets5 libqt5xml5 libquadmath0 librhash0 libsframe1 libstdc++-13-dev libtirpc-dev libtsan2 libubsan1 libusb-1.0-doc libvulkan-dev libx11-dev libxau-dev
  libxcb-xinerama0 libxcb-xinput0 libxcb1-dev libxdmcp-dev libxext-dev linux-libc-dev make manpages-dev pkgconf pkgconf-bin qt5-gtk-platformtheme qt5-qmake qt5-qmake-bin qtbase5-dev-tools qtchooser qttranslations5-l10n qtwayland5 rpcsvc-proto x11proto-dev xorg-sgml-doctools
  xtrans-dev
Suggested packages:
  binutils-doc gprofng-gui cmake-doc cmake-format elpa-cmake-mode ninja-build g++-multilib g++-13-multilib gcc-13-doc gcc-multilib autoconf automake libtool flex bison gcc-doc gcc-13-multilib gcc-13-locales glibc-doc qgnomeplatform-qt5 qt5-image-formats-plugins
  qt5-qmltooling-plugins libstdc++-13-doc libx11-doc libxcb-doc libxext-doc make-doc default-libmysqlclient-dev firebird-dev libpq-dev libsqlite3-dev unixodbc-dev
The following NEW packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu cmake cmake-data g++ g++-13 gcc gcc-13 libasan8 libbinutils libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libdouble-conversion3 libegl-dev libgcc-13-dev libgl-dev libglu1-mesa-dev libglx-dev
  libgprofng0 libhwasan0 libitm1 libjsoncpp25 liblsan0 libmd4c0 libnsl-dev libopengl-dev libpcre2-16-0 libpkgconf3 libpthread-stubs0-dev libqt5concurrent5 libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5opengl5 libqt5opengl5-dev libqt5printsupport5 libqt5qml5
  libqt5qmlmodels5 libqt5quick5 libqt5sql5 libqt5sql5-sqlite libqt5svg5 libqt5test5 libqt5waylandclient5 libqt5waylandcompositor5 libqt5widgets5 libqt5xml5 libquadmath0 librhash0 libsframe1 libstdc++-13-dev libtirpc-dev libtsan2 libubsan1 libusb-1.0-0-dev libusb-1.0-doc
  libvulkan-dev libx11-dev libxau-dev libxcb-xinerama0 libxcb-xinput0 libxcb1-dev libxdmcp-dev libxext-dev linux-libc-dev make manpages-dev pkg-config pkgconf pkgconf-bin qt5-gtk-platformtheme qt5-qmake qt5-qmake-bin qtbase5-dev qtbase5-dev-tools qtchooser qttranslations5-l10n
  qtwayland5 rpcsvc-proto x11proto-dev xorg-sgml-doctools xtrans-dev
0 upgraded, 89 newly installed, 0 to remove and 0 not upgraded.
q@virt:~/IMSProg$ sudo ./build_all.sh

image

1) build-essential - way

q@virt:~/IMSProg$ sudo apt-get install cmake build-essential libusb-1.0-0-dev qtbase5-dev pkg-config
[sudo] password for q: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu cmake-data dpkg-dev fakeroot g++ g++-13 gcc gcc-13 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan8 libbinutils libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0
  libdouble-conversion3 libdpkg-perl libegl-dev libfakeroot libfile-fcntllock-perl libgcc-13-dev libgl-dev libglu1-mesa-dev libglx-dev libgprofng0 libhwasan0 libitm1 libjsoncpp25 liblsan0 libmd4c0 libnsl-dev libopengl-dev libpcre2-16-0 libpkgconf3 libpthread-stubs0-dev
  libqt5concurrent5 libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5opengl5 libqt5opengl5-dev libqt5printsupport5 libqt5qml5 libqt5qmlmodels5 libqt5quick5 libqt5sql5 libqt5sql5-sqlite libqt5svg5 libqt5test5 libqt5waylandclient5 libqt5waylandcompositor5 libqt5widgets5
  libqt5xml5 libquadmath0 librhash0 libsframe1 libstdc++-13-dev libtirpc-dev libtsan2 libubsan1 libusb-1.0-doc libvulkan-dev libx11-dev libxau-dev libxcb-xinerama0 libxcb-xinput0 libxcb1-dev libxdmcp-dev libxext-dev linux-libc-dev lto-disabled-list make manpages-dev pkgconf
  pkgconf-bin qt5-gtk-platformtheme qt5-qmake qt5-qmake-bin qtbase5-dev-tools qtchooser qttranslations5-l10n qtwayland5 rpcsvc-proto x11proto-dev xorg-sgml-doctools xtrans-dev
Suggested packages:
  binutils-doc gprofng-gui cmake-doc cmake-format elpa-cmake-mode ninja-build debian-keyring g++-multilib g++-13-multilib gcc-13-doc gcc-multilib autoconf automake libtool flex bison gcc-doc gcc-13-multilib gcc-13-locales glibc-doc bzr qgnomeplatform-qt5 qt5-image-formats-plugins
  qt5-qmltooling-plugins libstdc++-13-doc libx11-doc libxcb-doc libxext-doc make-doc default-libmysqlclient-dev firebird-dev libpq-dev libsqlite3-dev unixodbc-dev
The following NEW packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential cmake cmake-data dpkg-dev fakeroot g++ g++-13 gcc gcc-13 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan8 libbinutils libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev
  libctf-nobfd0 libctf0 libdouble-conversion3 libdpkg-perl libegl-dev libfakeroot libfile-fcntllock-perl libgcc-13-dev libgl-dev libglu1-mesa-dev libglx-dev libgprofng0 libhwasan0 libitm1 libjsoncpp25 liblsan0 libmd4c0 libnsl-dev libopengl-dev libpcre2-16-0 libpkgconf3
  libpthread-stubs0-dev libqt5concurrent5 libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5opengl5 libqt5opengl5-dev libqt5printsupport5 libqt5qml5 libqt5qmlmodels5 libqt5quick5 libqt5sql5 libqt5sql5-sqlite libqt5svg5 libqt5test5 libqt5waylandclient5
  libqt5waylandcompositor5 libqt5widgets5 libqt5xml5 libquadmath0 librhash0 libsframe1 libstdc++-13-dev libtirpc-dev libtsan2 libubsan1 libusb-1.0-0-dev libusb-1.0-doc libvulkan-dev libx11-dev libxau-dev libxcb-xinerama0 libxcb-xinput0 libxcb1-dev libxdmcp-dev libxext-dev
  linux-libc-dev lto-disabled-list make manpages-dev pkg-config pkgconf pkgconf-bin qt5-gtk-platformtheme qt5-qmake qt5-qmake-bin qtbase5-dev qtbase5-dev-tools qtchooser qttranslations5-l10n qtwayland5 rpcsvc-proto x11proto-dev xorg-sgml-doctools xtrans-dev
0 upgraded, 99 newly installed, 0 to remove and 0 not upgraded.
q@virt:~/IMSProg$ sudo ./build_all.sh

image

Let's compare build-essential and g++ because they both about GNU. In case of build-essential you just install 10 packs which you no need...

AndreiCherniaev commented 7 months ago

I still suggest to use g++ instead of build-essential because build-essential download more then need so you need more space and need to spend more time. @Fantu @bigbigmdm

Fantu commented 7 months ago

I think can be good something like wrote in https://github.com/bigbigmdm/IMSProg/pull/63#issuecomment-1941163386

for example changing the part to:

For build are needed:

On Debian and derivatives:

sudo apt-get install cmake g++ libusb-1.0-0-dev qtbase5-dev pkgconf

bigbigmdm commented 7 months ago

@Fantu , I did as you suggested.