Browse Source

Fix protobuf-cpp and gamenetworkingsockets (#258)

* Add steam's GameNetworkingSockets

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Fix static compile on windows

* Add fPIC for linux

* Add missing defines

* Update xmake.lua

* Use add_headerfiles

* Linux...

* fix protobuf-cpp and gamenetworkingsockets

Co-authored-by: yamashi <[email protected]>
ruki 4 years ago
parent
commit
13a0a6f1cf

+ 89 - 0
packages/g/gamenetworkingsockets/port/xmake.lua

@@ -0,0 +1,89 @@
+set_xmakever("2.5.1")
+set_languages("cxx11")
+
+add_rules("mode.debug", "mode.release")
+
+add_requires("protobuf-cpp")
+if is_plat("windows") then
+    add_requires("libsodium")
+else
+    add_requires("openssl")
+end
+
+target("gns") -- we need limit path length
+    set_kind("$(kind)")
+
+    add_vectorexts("sse2")
+    add_packages("protobuf-cpp")
+    set_basename("gamenetworkingsockets")
+
+    if is_plat("windows") then
+        add_packages("libsodium")
+        add_syslinks("ws2_32")
+        add_defines("WIN32", "_WINDOWS", "STEAMNETWORKINGSOCKETS_CRYPTO_LIBSODIUM", "STEAMNETWORKINGSOCKETS_CRYPTO_25519_LIBSODIUM")
+        add_files(  "src/common/crypto_libsodium.cpp",
+                    "src/common/crypto_25519_libsodium.cpp")
+    else
+        add_packages("openssl")
+        add_syslinks("pthread")
+        add_defines("STEAMNETWORKINGSOCKETS_CRYPTO_25519_OPENSSL", "STEAMNETWORKINGSOCKETS_CRYPTO_VALVEOPENSSL", "OPENSSL_HAS_25519_RAW")
+        add_defines("POSIX", "LINUX", "GNUC", "GNU_COMPILER")
+        add_files(  "src/common/crypto_openssl.cpp",
+                    "src/common/crypto_25519_openssl.cpp",
+                    "src/common/opensslwrapper.cpp")
+    end
+
+    if is_kind("shared") then
+        add_defines("STEAMNETWORKINGSOCKETS_FOREXPORT")
+    else
+        add_defines("STEAMNETWORKINGSOCKETS_STATIC_LINK")
+    end
+
+    add_defines("VALVE_CRYPTO_ENABLE_25519",
+                "GOOGLE_PROTOBUF_NO_RTTI",
+                "CRYPTO_DISABLE_ENCRYPT_WITH_PASSWORD",
+                "ENABLE_OPENSSLCONNECTION")
+
+    add_includedirs("include",
+                    "src",
+                    "src/common",
+                    "src/tier0",
+                    "src/tier1",
+                    "src/vstdlib",
+                    "src/steamnetworkingsockets",
+                    "src/steamnetworkingsockets/clientlib",
+                    "src/public")
+
+    add_headerfiles("include/(steam/*.h)")
+    add_headerfiles("include/(minbase/*.h)")
+    add_headerfiles("src/public/(*/*.h)")
+
+    add_files(  "src/common/steamnetworkingsockets_messages_certs.proto",
+                "src/common/steamnetworkingsockets_messages.proto",
+                "src/common/steamnetworkingsockets_messages_udp.proto", {rules = "protobuf.cpp"})
+    add_files(  "src/common/crypto.cpp",
+                "src/common/crypto_textencode.cpp",
+                "src/common/keypair.cpp",
+                "src/common/steamid.cpp",
+                "src/vstdlib/strtools.cpp",
+                "src/tier0/dbg.cpp",
+                "src/tier0/platformtime.cpp",
+                "src/tier1/bitstring.cpp",
+                "src/tier1/ipv6text.c",
+                "src/tier1/netadr.cpp",
+                "src/tier1/utlbuffer.cpp",
+                "src/tier1/utlmemory.cpp",
+                "src/steamnetworkingsockets/steamnetworkingsockets_certs.cpp",
+                "src/steamnetworkingsockets/steamnetworkingsockets_thinker.cpp",
+                "src/steamnetworkingsockets/steamnetworkingsockets_certstore.cpp",
+                "src/steamnetworkingsockets/clientlib/steamnetworkingsockets_connections.cpp",
+                "src/steamnetworkingsockets/clientlib/steamnetworkingsockets_flat.cpp",
+                "src/steamnetworkingsockets/clientlib/steamnetworkingsockets_lowlevel.cpp",
+                "src/steamnetworkingsockets/steamnetworkingsockets_shared.cpp",
+                "src/steamnetworkingsockets/steamnetworkingsockets_stats.cpp",
+                "src/steamnetworkingsockets/clientlib/steamnetworkingsockets_snp.cpp",
+                "src/steamnetworkingsockets/clientlib/steamnetworkingsockets_udp.cpp",
+                "src/steamnetworkingsockets/clientlib/csteamnetworkingmessages.cpp",
+                "src/steamnetworkingsockets/clientlib/csteamnetworkingsockets.cpp",
+                "src/steamnetworkingsockets/clientlib/steamnetworkingsockets_p2p.cpp",
+                "src/steamnetworkingsockets/clientlib/steamnetworkingsockets_p2p_ice.cpp")

+ 57 - 0
packages/g/gamenetworkingsockets/xmake.lua

@@ -0,0 +1,57 @@
+package("gamenetworkingsockets")
+
+    set_homepage("https://github.com/ValveSoftware/GameNetworkingSockets")
+    set_description("Reliable & unreliable messages over UDP. Robust message fragmentation & reassembly. P2P networking / NAT traversal. Encryption. ")
+    set_license("BSD-3-Clause")
+
+    set_urls("https://github.com/ValveSoftware/GameNetworkingSockets/archive/$(version).tar.gz",
+             "https://github.com/ValveSoftware/GameNetworkingSockets.git")
+
+    add_versions("v1.2.0", "768a7cec2491e34c824204c4858351af2866618ceb13a024336dc1df8076bef3")
+
+    if is_plat("windows") then
+        add_syslinks("ws2_32")
+        add_defines("_WINDOWS", "WIN32")
+    else
+        add_defines("POSIX", "LINUX")
+        add_syslinks("pthread")
+    end
+
+    on_load("windows", "linux", function(package)
+        if not package:config("shared") then
+            package:add("defines", "STEAMNETWORKINGSOCKETS_STATIC_LINK")
+            if is_plat("windows") then
+                package:add("deps", "libsodium", "protobuf-cpp")
+            else
+                package:add("deps", "openssl", "protobuf-cpp")
+            end
+        end
+    end)
+
+    on_install("windows", "linux", function (package)
+        -- We need copy source codes to the working directory with short path on windows
+        --
+        -- Because the target name and source file path of this project are too long,
+        -- it's absolute path exceeds the windows path length limit.
+        --
+        local oldir
+        if is_host("windows") then
+            local sourcedir = os.tmpdir() .. ".dir"
+            os.tryrm(sourcedir)
+            os.cp(os.curdir(), sourcedir)
+            oldir = os.cd(sourcedir)
+        end
+        local configs = {}
+        if package:config("shared") then
+            configs.kind = "shared"
+        end
+        os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua")
+        import("package.tools.xmake").install(package, configs)
+        if oldir then
+            os.cd(oldir)
+        end
+    end)
+
+    on_test(function (package)
+        assert(package:has_cxxfuncs("GameNetworkingSockets_Kill()", {includes = "steam/steamnetworkingsockets.h"}))
+    end)

+ 19 - 2
packages/p/protobuf-cpp/xmake.lua

@@ -25,12 +25,29 @@ package("protobuf-cpp")
 
     on_install("windows", function (package)
         os.cd("cmake")
-        import("package.tools.cmake").install(package, {"-Dprotobuf_BUILD_PROTOC_BINARIES=ON"})
+        local configs = {"-Dprotobuf_BUILD_TESTS=OFF", "-Dprotobuf_BUILD_PROTOC_BINARIES=ON"}
+        table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
+        table.insert(configs, "-Dprotobuf_MSVC_STATIC_RUNTIME=" .. (package:config("vs_runtime"):startswith("MT") and "ON" or "OFF"))
+        if package:config("shared") then
+            package:add("defines", "PROTOBUF_USE_DLLS")
+        end
+        import("package.tools.cmake").install(package, configs)
         os.cp("build_*/Release/protoc.exe", package:installdir("bin"))
     end)
 
     on_install("linux", "macosx", function (package)
-        import("package.tools.autoconf").install(package, {"--enable-shared=no"})
+        local configs = {}
+        if package:config("pic") ~= false then
+            table.insert(configs, "--with-pic")
+        end
+        if package:config("shared") then
+            table.insert(configs, "--enable-shared=yes")
+            table.insert(configs, "--enable-static=no")
+        else
+            table.insert(configs, "--enable-static=yes")
+            table.insert(configs, "--enable-shared=no")
+        end
+        import("package.tools.autoconf").install(package, configs)
     end)
 
     on_test(function (package)