• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Register
  • Login
UBports Robot Logo UBports Forum
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Register
  • Login

Including files from one directory up with CMake or basic builders

Scheduled Pinned Locked Moved App Development
2 Posts 1 Posters 281 Views 1 Watching
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.
    • V Offline
      Valenoern
      last edited by 11 Jul 2020, 21:59

      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
      • V Offline
        Valenoern
        last edited by Valenoern 12 Jul 2020, 07:14

        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
        1 out of 2
        • First post
          1/2
          Last post