hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
21.72k stars 900 forks source link

build system cruft #3281

Open majestrate opened 1 year ago

majestrate commented 1 year ago

Description

I've noticed that the build process uses a few different tools that are tangled up into each other. I'd like to probe the feelings of consolidating to one build system. I'd like to devote some time into cleaning up the cmake cruft of the build pipeline as that is the build system i am most familiar with and (for me) feels like a good match for a c++ codebase.

thoughts?

vaxerski commented 1 year ago

@fufexan will not like cmake, I will not like meson.

majestrate commented 1 year ago

@fufexan will not like cmake, I will not like meson.

Is SCons any better?

fufexan commented 1 year ago

As outlined here and reading other opinions on the internet, it seems to be slower than both CMake & Meson.

I'd be fine with CMake but it feels limiting compared to Meson.

majestrate commented 1 year ago

As outlined here and reading other opinions on the internet, it seems to be slower than both CMake & Meson.

I'd be fine with CMake but it feels limiting compared to Meson.

CMake is fine when you know the eldrich runes not to speak with it. too many bad cmake examples with high seo online from 15 years ago so i dont blame people for hating on it. i'll plug away at seeing what would be needed for making it to use CMake exclusively as the build system, teedius work but it shouldnt be that bad.

memchr commented 1 year ago

The syntax of cmake is indeed not very pleasant, e.g. for PCH, in meson you do

executable(
 cpp_pch: 'pch/pch.hpp'
)

but in cmake

target_precompile_headers(Hyprland PRIVATE $<$<COMPILE_LANGUAGE:CXX>:src/pch/pch.hpp>)

Although some might see a certain drawback, unlike cmake, meson is not turing complete. But again, we are not writing a compositor in cmake, are we? It would be a fun idea to do so.

fufexan commented 1 year ago

CMake can do a lot of stuff, but Meson is more specialized. It has modules for just about anything you'd need. So it's less verbose (and doesn't require you to SCREAM VARIABLES EVERYWHERE).

vaxerski commented 1 year ago

cmake also doesn't require SCREAMING in most places. We just do cuz we angry

fufexan commented 1 year ago

fair enough

majestrate commented 1 year ago

The syntax of cmake is indeed not very pleasant, e.g. for PCH, in meson you do

executable(
 cpp_pch: 'pch/pch.hpp'
)

but in cmake

target_precompile_headers(Hyprland PRIVATE $<$<COMPILE_LANGUAGE:CXX>:src/pch/pch.hpp>)

Although some might see a certain drawback, unlike cmake, meson is not turing complete. But again, we are not writing a compositor in cmake, are we? It would be a fun idea to do so.

it's not pretty but nor is a lot of C++ so it's really not all the bad in the long run. mixing build systems is the stuff of nightmares.

majestrate commented 1 year ago

cmake also doesn't require SCREAMING in most places. We just do cuz we angry

i scream in lowercase a lot with cmake too.

vaxerski commented 1 year ago

we should mix deez nuts.

On a real note, if we want to have one system, it would probably be sea make.

fufexan commented 1 year ago

After all the work I've put into Meson :woe:

memchr commented 1 year ago

it's really not all the bad in the long run. mixing build systems is the stuff of nightmares.

What's wrong with having two build systems? Hyrpland is relatively easy to build and it's not that hard to maintain build scripts. They do not interfere with each other.

majestrate commented 1 year ago

it's really not all the bad in the long run. mixing build systems is the stuff of nightmares.

What's wrong with having two build systems? Hyrpland is relatively easy to build and it's not that hard to maintain build scripts. They do not interfere with each other.

i disagree, a lot. it's not intuitive at all for people trying to build it, it takes more effort to maintain multiple build systems than it's worth. too many moving parts with no real upsides. it's cruft that only gets crustier as time goes by. i'd like to slowly clean it all up if you don't mind.

fufexan commented 1 year ago

it's not intuitive at all for people trying to build it

Most people don't even need to know what build system is used, as they're getting Hyprland from their distro's repositories. And even of those who build manually, I've never seen anyone complain about not knowing how to build. As the wiki describes, it's about 3 commands you have to run, including installing development packages.

it takes more effort to maintain multiple build systems than it's worth

Not really. It's pretty easy to integrate new changes, and it's not like one maintainer does it all. Arguably maintaining the Nix side of things is more work than maintaining Meson.

i'd like to slowly clean it all up if you don't mind.

Sure, but I'm not gonna give up Meson easily.

majestrate commented 1 year ago

it's not intuitive at all for people trying to build it

Most people don't even need to know what build system is used, as they're getting Hyprland from their distro's repositories. And even of those who build manually, I've never seen anyone complain about not knowing how to build. As the wiki describes, it's about 3 commands you have to run, including installing development packages.

I disagree with the "most users" angle as this is about code contribution accessibility. End users will do whatever is easier for them. I don't think I am the only one who's been rubbed the wrong way by the status quo here. I'd like to make it less hard to build so given it's meson or cmake, to me it doesn't really matter as long as it's just one of them.

it takes more effort to maintain multiple build systems than it's worth

Not really. It's pretty easy to integrate new changes, and it's not like one maintainer does it all. Arguably maintaining the Nix side of things is more work than maintaining Meson.

packaging is distinct from a build system and that in itself is a full time job. maintaining the build system is not, and if it is i'd argue that's a bug worth fixing.

i'd like to slowly clean it all up if you don't mind.

Sure, but I'm not gonna give up Meson easily.

i dont understand the friction here, would it be easier to move the build system to meson instead of cmake? disagreements on which build system is used feels like a point of contention that should've been resolved long ago.

memchr commented 1 year ago

to me it doesn't really matter as long as it's just one of them.

disagreements on which build system is used feels like a point of contention that should've been resolved long ago

So if you don't like the other build system, why not just ignore it and leave other folks who use it alone?

majestrate commented 1 year ago

to me it doesn't really matter as long as it's just one of them.

disagreements on which build system is used feels like a point of contention that should've been resolved long ago

So if you don't like the other build system, why not just ignore it and leave other folks who use it alone?

It's technical debt and it will only continue to pile up. Looks like someone is already chugging through parts of the cmake bits in #2313

fufexan commented 1 year ago

disagreements on which build system is used feels like a point of contention that should've been resolved long ago.

There's no disagreement. Everyone uses whatever they like. For Nix packaging, Meson is the easiest. It's that simple.

It's technical debt and it will only continue to pile up.

As long as both are kept up to date, I don't see an issue.

majestrate commented 1 year ago

disagreements on which build system is used feels like a point of contention that should've been resolved long ago.

There's no disagreement. Everyone uses whatever they like. For Nix packaging, Meson is the easiest. It's that simple.

It's technical debt and it will only continue to pile up.

As long as both are kept up to date, I don't see an issue.

I'd like to have the project buildable with just a cmake command. That's all, keeping the meson build system is fine. the cmake build looks like it's kinda broken, which is why i opened the issue.