ValveSoftware / GameNetworkingSockets

Reliable & unreliable messages over UDP. Robust message fragmentation & reassembly. P2P networking / NAT traversal. Encryption.
BSD 3-Clause "New" or "Revised" License
8.09k stars 606 forks source link

Get cmake to support IOS/Android #102

Open rjdgtn opened 4 years ago

rjdgtn commented 4 years ago

What about IOS/Android support?

zpostfacto commented 4 years ago

Yeah, good idea. What exactly would be needed? Basically just the makefiles / build instructions I think, right?

This code has shipped on iOS and Android. (Dota Underlords uses it.)

rjdgtn commented 4 years ago

Yes just the makefiles and build instructions. Or just some information about preprocessor definitions should be present on ios/android builds.

Levendo commented 4 years ago

I have a working iOS, MacOS and Android versions.

Well, it would be better to have makefiles and build instructions, but, well, i prepared custom solutions (.sln) /projects for each platform out of the very same source codes and pushed to my forked version which works quite nice. That is handy when you want a build without the makefiles with IDE support, well of course it has IDE dependency in that way, i use Visual Studio 2017, 2019 for Android and Xcode for iOS and MacOS.

I forked months ago, but it is not that far from current version.

I may share if you wish, you may want to check the preprocessor definitions from projects. They all working for Android(x86, x64, armv7, arm64), iOS and MacOS. Just fyi.

Check for release configurations:

https://github.com/ingamegroup/GameNetworkingSockets/tree/master/build

zpostfacto commented 4 years ago

Is there a standard way to get cmake to target android / iOS? I'd like to use that if possible.

At Valve, we have two different sets of code that is using two different build environments: In one branch, we use VPC, our own cmake-like tool. And the other, we have hand-coded makefiles. Neither of these is really suitable for an opensource project, I think. I'd like to get cmake to work.

I could document the needed defines and link libs that @Levendo probably figured out. I don't like the idea of checking in .vcprojx files directly, for the same reason that we don't do this for windows - just too many different configurations to maintain. Isn't this the whole purpose of cmake? :)

nxrighthere commented 4 years ago

Is there a standard way to get cmake to target android / iOS?

Yes, see Cross Compiling for Android and Cross Compiling for iOS, tvOS, or watchOS.

zpostfacto commented 4 years ago

Cool, that sounds perfect! I don't have time to research this and hook this up and test it. But if somebody made a pull request, I'd take it!

As @Levendo discovered, the code definitely compiles on Android and iOS and it's been shipped in Underlords on those platforms. So just figuring out the cmake part should be the only thing that needs to be done, and it's probably not going to rise on my priority list high enough for a while.

I'll update the title and add a tag, maybe some kind soul will grab it!

Levendo commented 4 years ago

Well, i'd love to do the research and do the stuff. It is quite busy these days :/. I'll keep it in mind.

felipejfc commented 4 years ago

We maintain a Fork where we made the changes for it to compile for both Android and iOS, so if anyone wants to use it as a base for a PR, here it goes

https://github.com/tfgco/GameNetworkingSockets/commits/master

Building instructions for both platforms are described in BUILDING.md, don't expect anything fancy :p

See commits starting Mar-15

nxrighthere commented 4 years ago

Looks good, just a few minor changes. 👍

Levendo commented 4 years ago

Looks neat, good job.

Third parties(OpenSSL and Protobuf) provided as pre-builts i guess. Just wondering do we need the build instructions for them as well as part of the building process?

Fr33maan commented 4 years ago

Will it be as simple as rebasing the commits on last valve master and reading building instructions ? I see that fork is ~250 commits behind.

LeventSevgili commented 1 month ago

We've added an experimental CMake build support for building Android and iOS and opened a PR. ( #312 ) You can follow the instructions at BUILDING_ANDROID.md and BUILDING_IOS.md files.

We'd love you to take a look at it and maybe we can iterate on it. Hope it helps anyone!