Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Cyborg)
  • No Skin
Collapse
Brand Logo

CIRCLE WITH A DOT

  1. Home
  2. Uncategorized
  3. current status: writing a build system in cmake

current status: writing a build system in cmake

Scheduled Pinned Locked Moved Uncategorized
45 Posts 23 Posters 3 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • whitequark@social.treehouse.systemsW whitequark@social.treehouse.systems

    current status: writing a build system in cmake

    not "something that builds a project and is also implemented in implemented in cmake"

    no, it is "something that is implemented in cmake and can be used to implement a build system that is in turn used as a part of a build system (also in cmake)"

    aismallard@woem.spaceA This user is from outside of this forum
    aismallard@woem.spaceA This user is from outside of this forum
    aismallard@woem.space
    wrote last edited by
    #28

    @whitequark@social.treehouse.systems c²make

    arcterus@wafrn.vaguely.artA 1 Reply Last reply
    0
    • whitequark@social.treehouse.systemsW whitequark@social.treehouse.systems

      to be clear i'm not doing this because i love writing cmake syntax that would drive mere mortals mad. i do it because i'm replacing a "simple Makefile" that has perhaps once fit that bill, but eventually turned into a 1200-line (not including *.inc files) monstrosity with a load-bearing rot13 call inside of a manual reimplementation of half of git submodule

      (this particular monstrosity has since been removed but the overall genre has not changed)

      ppxl@social.tchncs.deP This user is from outside of this forum
      ppxl@social.tchncs.deP This user is from outside of this forum
      ppxl@social.tchncs.de
      wrote last edited by
      #29

      @whitequark a load bearing WHAT again?!

      1 Reply Last reply
      0
      • whitequark@social.treehouse.systemsW whitequark@social.treehouse.systems

        every time you run make it executes so many $(shell) calls (there are 40 of them, though some would be ifeq'd out) that it takes more time to create a dependency graph than to incrementally compile and link one compilation unit*

        * if you use lld and split-dwarf, but still

        recursive@hachyderm.ioR This user is from outside of this forum
        recursive@hachyderm.ioR This user is from outside of this forum
        recursive@hachyderm.io
        wrote last edited by
        #30

        @whitequark The culture of "it's nearly free to fork and exec" is wild. Got us autoconf too, I guess

        whitequark@social.treehouse.systemsW 1 Reply Last reply
        0
        • recursive@hachyderm.ioR recursive@hachyderm.io

          @whitequark The culture of "it's nearly free to fork and exec" is wild. Got us autoconf too, I guess

          whitequark@social.treehouse.systemsW This user is from outside of this forum
          whitequark@social.treehouse.systemsW This user is from outside of this forum
          whitequark@social.treehouse.systems
          wrote last edited by
          #31

          @recursive my solution to this was to use kati, google's make with a ninja backend

          technically this probably caused some sort of staleness somewhere in the system but it was so much faster when i needed rapid iteration that it was totally worth it

          recursive@hachyderm.ioR 1 Reply Last reply
          0
          • whitequark@social.treehouse.systemsW whitequark@social.treehouse.systems

            @recursive my solution to this was to use kati, google's make with a ninja backend

            technically this probably caused some sort of staleness somewhere in the system but it was so much faster when i needed rapid iteration that it was totally worth it

            recursive@hachyderm.ioR This user is from outside of this forum
            recursive@hachyderm.ioR This user is from outside of this forum
            recursive@hachyderm.io
            wrote last edited by
            #32

            @whitequark coworkers of mine several years ago changed our forked 'premake' (some lua thing) from generating makefiles to ninja files, and it seemed like a decent thing to target with automatic generation

            whitequark@social.treehouse.systemsW 1 Reply Last reply
            0
            • recursive@hachyderm.ioR recursive@hachyderm.io

              @whitequark coworkers of mine several years ago changed our forked 'premake' (some lua thing) from generating makefiles to ninja files, and it seemed like a decent thing to target with automatic generation

              whitequark@social.treehouse.systemsW This user is from outside of this forum
              whitequark@social.treehouse.systemsW This user is from outside of this forum
              whitequark@social.treehouse.systems
              wrote last edited by
              #33

              @recursive oh yeah ninja is excellent. not just the software but the specification, which is one of the few emergent ones that are just good somehow

              whitequark@social.treehouse.systemsW 1 Reply Last reply
              0
              • aismallard@woem.spaceA aismallard@woem.space

                @whitequark@social.treehouse.systems c²make

                arcterus@wafrn.vaguely.artA This user is from outside of this forum
                arcterus@wafrn.vaguely.artA This user is from outside of this forum
                arcterus@wafrn.vaguely.art
                wrote last edited by
                #34

                @aismallard@woem.space @whitequark@social.treehouse.systems

                cmake with classes

                whitequark@social.treehouse.systemsW 1 Reply Last reply
                0
                • whitequark@social.treehouse.systemsW whitequark@social.treehouse.systems

                  @recursive oh yeah ninja is excellent. not just the software but the specification, which is one of the few emergent ones that are just good somehow

                  whitequark@social.treehouse.systemsW This user is from outside of this forum
                  whitequark@social.treehouse.systemsW This user is from outside of this forum
                  whitequark@social.treehouse.systems
                  wrote last edited by
                  #35

                  @recursive ninja files are basically what makefiles should have been, easily parsable, mostly declarative dependency graph descriptions without the bewildering mass of features that accumulates if you also try to shoehorn an UI into it

                  1 Reply Last reply
                  0
                  • arcterus@wafrn.vaguely.artA arcterus@wafrn.vaguely.art

                    @aismallard@woem.space @whitequark@social.treehouse.systems

                    cmake with classes

                    whitequark@social.treehouse.systemsW This user is from outside of this forum
                    whitequark@social.treehouse.systemsW This user is from outside of this forum
                    whitequark@social.treehouse.systems
                    wrote last edited by
                    #36

                    @arcterus @aismallard aaa

                    1 Reply Last reply
                    0
                    • whitequark@social.treehouse.systemsW whitequark@social.treehouse.systems

                      to be clear i'm not doing this because i love writing cmake syntax that would drive mere mortals mad. i do it because i'm replacing a "simple Makefile" that has perhaps once fit that bill, but eventually turned into a 1200-line (not including *.inc files) monstrosity with a load-bearing rot13 call inside of a manual reimplementation of half of git submodule

                      (this particular monstrosity has since been removed but the overall genre has not changed)

                      c0dec0dec0de@hachyderm.ioC This user is from outside of this forum
                      c0dec0dec0de@hachyderm.ioC This user is from outside of this forum
                      c0dec0dec0de@hachyderm.io
                      wrote last edited by
                      #37

                      @whitequark ah, the fingerprints of an engineer who is very capable, but doesn’t bother to read the docs or think about alternatives…
                      I’ve reimplemented a git LFS client without knowing that’s what I was doing.

                      1 Reply Last reply
                      0
                      • c0dec0dec0de@hachyderm.ioC This user is from outside of this forum
                        c0dec0dec0de@hachyderm.ioC This user is from outside of this forum
                        c0dec0dec0de@hachyderm.io
                        wrote last edited by
                        #38

                        @whitequark I mean very minimal. Like it fetched the bits I needed. “God, why are these binary files just a sha hash? Oh, and there are files over here with those hashes as names, fine, let’s do this.”

                        c0dec0dec0de@hachyderm.ioC 1 Reply Last reply
                        0
                        • c0dec0dec0de@hachyderm.ioC c0dec0dec0de@hachyderm.io

                          @whitequark I mean very minimal. Like it fetched the bits I needed. “God, why are these binary files just a sha hash? Oh, and there are files over here with those hashes as names, fine, let’s do this.”

                          c0dec0dec0de@hachyderm.ioC This user is from outside of this forum
                          c0dec0dec0de@hachyderm.ioC This user is from outside of this forum
                          c0dec0dec0de@hachyderm.io
                          wrote last edited by
                          #39

                          @whitequark self-awareness is not always online

                          1 Reply Last reply
                          0
                          • whitequark@social.treehouse.systemsW whitequark@social.treehouse.systems

                            current status: writing a build system in cmake

                            not "something that builds a project and is also implemented in implemented in cmake"

                            no, it is "something that is implemented in cmake and can be used to implement a build system that is in turn used as a part of a build system (also in cmake)"

                            nelhage@mastodon.socialN This user is from outside of this forum
                            nelhage@mastodon.socialN This user is from outside of this forum
                            nelhage@mastodon.social
                            wrote last edited by
                            #40

                            @whitequark I have described the Linux kernel's build system as "a build system implemented in GNU make," so, seems normal.

                            1 Reply Last reply
                            0
                            • c0dec0dec0de@hachyderm.ioC This user is from outside of this forum
                              c0dec0dec0de@hachyderm.ioC This user is from outside of this forum
                              c0dec0dec0de@hachyderm.io
                              wrote last edited by
                              #41

                              @pikhq @whitequark there are a lot of people for whom build systems are just not on their radar. I don’t understand them in the least, but I have definitely observed them in action.

                              1 Reply Last reply
                              0
                              • whitequark@social.treehouse.systemsW whitequark@social.treehouse.systems

                                current status: writing a build system in cmake

                                not "something that builds a project and is also implemented in implemented in cmake"

                                no, it is "something that is implemented in cmake and can be used to implement a build system that is in turn used as a part of a build system (also in cmake)"

                                N This user is from outside of this forum
                                N This user is from outside of this forum
                                nicolas17@social.treehouse.systems
                                wrote last edited by
                                #42

                                @whitequark someone wrote a raytracer and PNG encoder in CMake sooo

                                1 Reply Last reply
                                0
                                • asmw@infosec.exchangeA asmw@infosec.exchange

                                  @whitequark

                                  The world of buildsystems is weird and fascinating.

                                  My opinion on cmake is that (for certain domains) it's the best there is, and that's sad.

                                  J This user is from outside of this forum
                                  J This user is from outside of this forum
                                  jameswidman@mastodon.social
                                  wrote last edited by
                                  #43

                                  @asmw @whitequark to some extent, cmake is a natural consequence of the fact that every platform is almost actively hostile to the idea that 3rd party developers also target other platforms

                                  1 Reply Last reply
                                  0
                                  • whitequark@social.treehouse.systemsW whitequark@social.treehouse.systems

                                    i'm making it sound more complicated than it is, the actual thing boils down to "cmake's dependency resolution algorithm doesn't work for a particular edge case i'm having, so i'm implementing a different one, in cmake script"

                                    but also "dependency resolution algorithm" is basically what a build system is, so,

                                    guenther@bsd.networkG This user is from outside of this forum
                                    guenther@bsd.networkG This user is from outside of this forum
                                    guenther@bsd.network
                                    wrote last edited by
                                    #44

                                    @whitequark
                                    Having called out to tsort from a GNUmakefile to order library builds, I'm taking emotional damage from this thread.

                                    1 Reply Last reply
                                    0
                                    • david_chisnall@infosec.exchangeD This user is from outside of this forum
                                      david_chisnall@infosec.exchangeD This user is from outside of this forum
                                      david_chisnall@infosec.exchange
                                      wrote last edited by
                                      #45

                                      @whitequark

                                      What happens if we remove all the abstractions? That will make everything simpler!

                                      1 Reply Last reply
                                      1
                                      0
                                      • R relay@relay.infosec.exchange shared this topic
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • World
                                      • Users
                                      • Groups