linux-can / can-utils

Linux-CAN / SocketCAN user space applications
2.31k stars 698 forks source link

build-systems: remove autotools and Android.mk, upgrade CI infrastructure #527

Closed marckleinebudde closed 1 month ago

marckleinebudde commented 1 month ago

Remove plain old Makefile and autotools support. This clauses less friction when adding new tools.

Closes: https://github.com/linux-can/can-utils/issues/526

marckleinebudde commented 1 month ago

Our github workflow only runs autotools, I'll convert it to camke.

hartkopp commented 1 month ago

IMHO removing autotools and its infrastructure is a good choice. No need to have autotools and cmake in parallel as these are doing the same.

But I'm not sure if it is a good idea to drop the 'plain' Makefile as it enables (embedded) systems to build and run can-utils without any additional build system.

Instead I would check the possibility to build the Android binaries with cmake too. There are ongoing discussions which suggest to use cmake in new projects for Android: https://stackoverflow.com/questions/39589427/difference-between-cmake-and-ndk-build-in-android-studio-project

And then we finally would have a cmake and a plain Makefile support.

marckleinebudde commented 1 month ago

But I'm not sure if it is a good idea to drop the 'plain' Makefile as it enables (embedded) systems to build and run can-utils without any additional build system.

I think it's a very good idea to drop plain Makefile support.

You want to build can-utils on your embedded system? IMHO if you have a compiler, having cmake doesn't make a big difference.

marckleinebudde commented 1 month ago

Regarding Android. I'm not invested, don't use it and cannot test it. If someone upgrades the CMakeLists.txt, so that we can remove the Android.mk, I'm more than happy!

yegorich commented 1 month ago

We already have all the instructions required for an Android build. Just tried to build against android-ndk-r26d and it works. Hence, we can also remove Android.mk.

As to the plain Makefiles on an embedded system. This is mostly possible on more or less standard distors like Debian/Ubuntu. Builroot, OpenWrt, etc. don't provide a compiler as a target package. So, in most cases you'll have to cross-compile your code.

yegorich commented 1 month ago

The last patch should be called "build-system: remove Anroid.mk".

marckleinebudde commented 1 month ago

Wanted to commit --amend into the 2nd patch. fixed. Thanks.

hartkopp commented 1 month ago

As to the plain Makefiles on an embedded system. This is mostly possible on more or less standard distors like Debian/Ubuntu. Builroot, OpenWrt, etc. don't provide a compiler as a target package. So, in most cases you'll have to cross-compile your code.

Ok. I recently got a Ubuntu 14.04 (with a now unsupported cmake 2.8) on my desk and wanted to build the latest can-utils. The entire repo is enabled to build the can-utils even on very old Linux installations today. And I really like that feature.

As you now removed 50% of the build systems (especially the ugly ones) this is already a nice cleanup. The plain old Makefile does not seem to be hard to maintain together with CMakeLists.txt and it is a good 'learning' example. Therefore I really would like to keep the plain old Makefile together with the cmake build system.

marckleinebudde commented 1 month ago

FWIW I've kept the plain old Makefile. I personally consider it obsolete. I've not added it to the new CI integration. From my point of view this PR is ready to merge.

marckleinebudde commented 1 month ago

@yegorich

We already have all the instructions required for an Android build. Just tried to build against android-ndk-r26d and it works. Hence, we can also remove Android.mk.

Can you create a android CI integration?

yegorich commented 1 month ago

I'll look into it. GitHub images seem to also ship NDK

marckleinebudde commented 1 month ago

I'll look into it. GitHub images seem to also ship NDK

That was quick! Thanks a lot!