From 13a0a6f1cf8c288cab60a0e44cc7356bc2914a5a Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 27 Jan 2021 14:03:41 +0800 Subject: [PATCH] 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 --- .../g/gamenetworkingsockets/port/xmake.lua | 89 +++++++++++++++++++ packages/g/gamenetworkingsockets/xmake.lua | 57 ++++++++++++ packages/p/protobuf-cpp/xmake.lua | 21 ++++- 3 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 packages/g/gamenetworkingsockets/port/xmake.lua create mode 100644 packages/g/gamenetworkingsockets/xmake.lua diff --git a/packages/g/gamenetworkingsockets/port/xmake.lua b/packages/g/gamenetworkingsockets/port/xmake.lua new file mode 100644 index 000000000..b8f372d3c --- /dev/null +++ b/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") diff --git a/packages/g/gamenetworkingsockets/xmake.lua b/packages/g/gamenetworkingsockets/xmake.lua new file mode 100644 index 000000000..a1c3fa9ef --- /dev/null +++ b/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) diff --git a/packages/p/protobuf-cpp/xmake.lua b/packages/p/protobuf-cpp/xmake.lua index 5e561b715..2741041a6 100644 --- a/packages/p/protobuf-cpp/xmake.lua +++ b/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)