UBports Robot Logo

    UBports Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Including files from one directory up with CMake or basic builders

    App Development
    1
    2
    184
    Loading More Posts
    • 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.
    • Valenoern
      Valenoern last edited by

      I have an in-progress app I've been trying to create from a godot game demo.

      Mostly I've been making great progress with this. I got a click package to build and "start" godot (with a crash), and I actually contributed a fix to the docker image for arm64 hosts so it's now easier to debug + build the game on an arm64 machine before sending it to the phone.

      One thing I've been having a lot of unnecessary trouble with is keeping a reasonable directory structure and still compiling my click package. I have things arranged like this:

      repository
      |
      `--- main branch directories
      |
      `--- zensekai (experimental branch directory)
            |
            `--- bin (compiled game)
            |
            `--- zensekai-click (click package)
      

      And the Makefile in zensekai copies/compiles all the game binaries that should be needed for either the desktop version or the click package.

      From reading the clickable documentation I felt like I should be able to set the project root to ../ aka zensekai and from the zensekai-click/CMakeLists.txt file copy in binaries from bin. But CMake seems to only want to put files in zensekai-click into the container for building, and I have no idea what command or "makefile" to use for the pure or custom builders much less whether they can do this, and I'm very confused.

      1 Reply Last reply Reply Quote 0
      • Valenoern
        Valenoern last edited by Valenoern

        The solution to this was laughably simple.
        all I had to do was touch CMakeLists.txt making a completely empty file in the zensekai directory, and then CMake automatically decided to continue in zensekai-click with the other CMakeLists.txt.


        edit 7-13:
        There was actually a little more required.

        in the top CMakeLists.txt I had to put

        add_subdirectory(zensekai-click)
        

        and in the zensekai-click one I accessed/disambiguated the two directories with

        # set $PR_ROOT to upper directory
        get_filename_component(PR_ROOT "../" ABSOLUTE)
        # set $CLICK_DIR to zensekai-click directory
        set(CLICK_DIR "${PR_ROOT}/zensekai-click")
        

        another thing you might run into developing a click package that copies binaries is permissions on binaries.
        I set them in the loop that copies the binaries like so:

        foreach(binary ${BINARIES})
                install(FILES ${PR_ROOT}/bin/${binary}
                        # the important part
                        PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE
                        # this might actually be unnecessarily permissive*.
                        # it might be enough to just have OWNER_READ and OWNER_EXECUTE
                        DESTINATION ${DATA_DIR}
                )
        endforeach()
        

        (* I got sidetracked thinking the permissions weren't enough when I accidentally had my project copying the x86_64 godot binary for a bit - which had bash claiming it "wasn't permitted" to execute while it actually meant that was impossible.)

        1 Reply Last reply Reply Quote 3
        • First post
          Last post