From d8fc0686b55b2d00d317bfa84c6ec6d3310be3ee Mon Sep 17 00:00:00 2001 From: Chi Huu Huynh <73843190+Chi-EEE@users.noreply.github.com> Date: Sat, 6 Apr 2024 02:22:42 +0100 Subject: [PATCH] fix protobuf for cartographer & fix protobuf (#3667) * fix protobuf for cartographer & fix protobuf version:le 3.19.4 * protobuf-cpp: readd 26.1 * try to fix abseil linking * Revert "try to fix abseil linking" This reverts commit 03c8ed4215c410086f37249912608f63203e696b. * protobuf-cpp: use shared abseil * protobuf-cpp: fix adding shared abseil * protobuf-cpp: set abseil shared to true * protobuf-cpp: shared abseil if windows * protobuf-cpp: use default config for abseil * protobuf-cpp: add abseil if above greater or equal to 22.0 * protobuf-cpp: add patch to always use links * abseil: test with cxx 17 * protobuf-cpp: rename patch * abseil: try use C++14 * abseil: add cxx_standard config & protobuf-cpp: select C++17 if linux --- packages/a/abseil/xmake.lua | 4 +++- packages/c/cartographer/port/xmake.lua | 3 ++- packages/c/cartographer/xmake.lua | 3 ++- .../patches/26.1/use_abseil_links.patch | 13 ++++++++++ packages/p/protobuf-cpp/xmake.lua | 24 ++++++++++++++----- 5 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 packages/p/protobuf-cpp/patches/26.1/use_abseil_links.patch diff --git a/packages/a/abseil/xmake.lua b/packages/a/abseil/xmake.lua index 2a196afd9..112651cfd 100644 --- a/packages/a/abseil/xmake.lua +++ b/packages/a/abseil/xmake.lua @@ -17,6 +17,8 @@ package("abseil") add_deps("cmake") + add_configs("cxx_standard", {description = "Select c++ standard to build.", default = "14", type = "string", values = {"14", "17", "20"}}) + if is_plat("macosx") then add_frameworks("CoreFoundation") end @@ -32,7 +34,7 @@ package("abseil") io.replace(path.join("absl", "synchronization", "internal", "pthread_waiter.h"), "#ifndef _WIN32", "#if !defined(_WIN32) && !defined(__MINGW32__)", {plain = true}) io.replace(path.join("absl", "synchronization", "internal", "win32_waiter.h"), "#if defined(_WIN32) && _WIN32_WINNT >= _WIN32_WINNT_VISTA", "#if defined(_WIN32) && !defined(__MINGW32__) && _WIN32_WINNT >= _WIN32_WINNT_VISTA", {plain = true}) end - local configs = {"-DCMAKE_CXX_STANDARD=14", "-DABSL_ENABLE_INSTALL=ON", "-DABSL_PROPAGATE_CXX_STD=ON"} + local configs = {"-DCMAKE_CXX_STANDARD=" .. package:config("cxx_standard"), "-DABSL_ENABLE_INSTALL=ON", "-DABSL_PROPAGATE_CXX_STD=ON"} table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF")) import("package.tools.cmake").install(package, configs, {buildir = os.tmpfile() .. ".dir"}) diff --git a/packages/c/cartographer/port/xmake.lua b/packages/c/cartographer/port/xmake.lua index 4e33d8853..38052ffbc 100644 --- a/packages/c/cartographer/port/xmake.lua +++ b/packages/c/cartographer/port/xmake.lua @@ -1,7 +1,8 @@ add_rules("mode.debug", "mode.release") add_requires("ceres-solver 2.1.0", {configs = {suitesparse = true}}) -add_requires("abseil", "cairo", "eigen", "glog", "lua", "protobuf-cpp", "zlib") +add_requires("abseil", "cairo", "eigen", "glog", "lua", "zlib") +add_requires("protobuf-cpp 3.19.4") target("cartographer") set_kind("$(kind)") diff --git a/packages/c/cartographer/xmake.lua b/packages/c/cartographer/xmake.lua index 325dddd7e..f1753bc36 100644 --- a/packages/c/cartographer/xmake.lua +++ b/packages/c/cartographer/xmake.lua @@ -21,7 +21,8 @@ package("cartographer") add_deps("cmake") add_deps("zlib") add_deps("ceres-solver 2.1.0", {configs = {suitesparse = true}}) - add_deps("abseil", "cairo", "eigen", "lua", "protobuf-cpp") + add_deps("protobuf-cpp 3.19.4") + add_deps("abseil", "cairo", "eigen", "lua") on_install("windows|x64", "windows|x86", "macosx|x86_64", "linux", function (package) for _, headerfile in ipairs(os.files("cartographer/**.h")) do diff --git a/packages/p/protobuf-cpp/patches/26.1/use_abseil_links.patch b/packages/p/protobuf-cpp/patches/26.1/use_abseil_links.patch new file mode 100644 index 000000000..54d4eeea6 --- /dev/null +++ b/packages/p/protobuf-cpp/patches/26.1/use_abseil_links.patch @@ -0,0 +1,13 @@ +diff --git a/cmake/abseil-cpp.cmake b/cmake/abseil-cpp.cmake +index a4e9d22..5e5d4d5 100644 +--- a/cmake/abseil-cpp.cmake ++++ b/cmake/abseil-cpp.cmake +@@ -37,7 +37,7 @@ elseif(protobuf_ABSL_PROVIDER STREQUAL "package") + endif() + set(_protobuf_FIND_ABSL "if(NOT TARGET absl::strings)\n find_package(absl CONFIG)\nendif()") + +-if (BUILD_SHARED_LIBS AND MSVC) ++if (FALSE) + # On MSVC Abseil is bundled into a single DLL. + # This condition is necessary as of abseil 20230125.3 when abseil is consumed via add_subdirectory, + # the abseil_dll target is named abseil_dll, while if abseil is consumed via find_package, the target diff --git a/packages/p/protobuf-cpp/xmake.lua b/packages/p/protobuf-cpp/xmake.lua index 6fcfa0e86..fd836f9c8 100644 --- a/packages/p/protobuf-cpp/xmake.lua +++ b/packages/p/protobuf-cpp/xmake.lua @@ -18,10 +18,11 @@ package("protobuf-cpp") add_patches("3.17.3", path.join(os.scriptdir(), "patches", "3.17.3", "field_access_listener.patch"), "ac9bdf49611b01e563fe74b2aaf1398214129454c3e18f1198245549eb281e85") add_patches("3.19.4", path.join(os.scriptdir(), "patches", "3.19.4", "vs_runtime.patch"), "8e73e585d29f3b9dca3c279df0b11b3ee7651728c07f51381a69e5899b93c367") + add_patches("26.1", path.join(os.scriptdir(), "patches", "26.1", "use_abseil_links.patch"), "123e3f4b0c602f3fc0470d58cd1be1837ddf41da070d5299041b5891595b2487") add_configs("zlib", {description = "Enable zlib", default = false, type = "boolean"}) - add_deps("cmake", "abseil") + add_deps("cmake") if is_plat("windows") then add_links("libprotobuf") @@ -38,15 +39,26 @@ package("protobuf-cpp") if package:config("zlib") then package:add("deps", "zlib") end + if package:version():ge("22.0") then + package:add("deps", "abseil", {configs = {cxx_standard = (package:is_plat("linux") and "17" or "14")}}) + end end) on_install("windows", "linux", "macosx", function (package) - -- os.cd("cmake") + if package:version():le("3.19.4") then + os.cd("cmake") + end io.replace("CMakeLists.txt", "set(protobuf_DEBUG_POSTFIX \"d\"", "set(protobuf_DEBUG_POSTFIX \"\"", {plain = true}) - local configs = {"-Dprotobuf_BUILD_TESTS=OFF", - "-Dprotobuf_BUILD_PROTOC_BINARIES=ON", - "-Dprotobuf_ABSL_PROVIDER=package"} + + local configs = {"-Dprotobuf_BUILD_TESTS=OFF", "-Dprotobuf_BUILD_PROTOC_BINARIES=ON"} table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF")) + + local packagedeps = {} + if package:version():ge("22.0") then + table.insert(packagedeps, "abseil") + table.insert(configs, "-Dprotobuf_ABSL_PROVIDER=package") + end + if package:is_plat("windows") then table.insert(configs, "-Dprotobuf_MSVC_STATIC_RUNTIME=" .. (package:config("vs_runtime"):startswith("MT") and "ON" or "OFF")) if package:config("shared") then @@ -56,7 +68,7 @@ package("protobuf-cpp") if package:config("zlib") then table.insert(configs, "-Dprotobuf_WITH_ZLIB=ON") end - import("package.tools.cmake").install(package, configs, {buildir = "build"}) + import("package.tools.cmake").install(package, configs, {buildir = "build", packagedeps = packagedeps}) os.trycp("build/Release/protoc.exe", package:installdir("bin")) end)