| # Copyright 2020-2023 Gentoo Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| EAPI=7 |
| |
| PYTHON_COMPAT=( python3_13 ) |
| |
| inherit cmake cmake-multilib cros-sanitizers flag-o-matic python-any-r1 |
| |
| DESCRIPTION="Abseil Common Libraries (C++), LTS Branch" |
| HOMEPAGE="https://abseil.io/" |
| SRC_URI="https://github.com/abseil/abseil-cpp/archive/${PV}.tar.gz -> ${P}.tar.gz" |
| |
| LICENSE="Apache-2.0" |
| SLOT="0/${PVR}" |
| KEYWORDS="*" |
| IUSE="test" |
| |
| DEPEND="" |
| RDEPEND="${DEPEND} |
| !dev-cpp/absl |
| " |
| |
| BDEPEND=" |
| ${PYTHON_DEPS} |
| test? ( |
| >=dev-cpp/gtest-1.13.0 |
| sys-libs/timezone-data |
| ) |
| " |
| |
| RESTRICT="!test? ( test )" |
| |
| PATCHES=( |
| "${FILESDIR}"/use-std-optional.patch |
| "${FILESDIR}"/abseil-cpp-20230802.0-dll.patch |
| ) |
| |
| MAJOR=$(ver_cut 1) |
| SOVERSION="${MAJOR:2:4}.0.0" |
| |
| src_prepare() { |
| cmake_src_prepare |
| |
| # un-hardcode abseil compiler flags |
| sed -i \ |
| -e '/"-maes",/d' \ |
| -e '/"-msse4.1",/d' \ |
| -e '/"-mfpu=neon"/d' \ |
| -e '/"-march=armv8-a+crypto"/d' \ |
| absl/copts/copts.py || die |
| |
| # now generate cmake files |
| python_fix_shebang absl/copts/generate_copts.py |
| absl/copts/generate_copts.py || die |
| |
| # ChromeOS (b/264420866): Enable a "hardened" build. |
| sed -i 's/^#define ABSL_OPTION_HARDENED 0/#define ABSL_OPTION_HARDENED 1/' \ |
| absl/base/options.h || die |
| } |
| |
| multilib_src_configure() { |
| append-lfs-flags |
| # ChromeOS: Prevent exporting inline symbols to improve startup speed. |
| # (go/cros-symbol-slimming) |
| append-cxxflags -fvisibility-inlines-hidden |
| # ChromeOS: Assume no interposition and pre-bind DSO-local symbols to |
| # improve startup speed. (go/cros-symbol-slimming) |
| append-ldflags -Wl,-Bsymbolic-non-weak |
| sanitizers-setup-env # ChromeOS-specific asan fix. |
| # shellcheck disable=SC2034 # Used by cmake.eclass |
| local mycmakeargs=( |
| # We use `>= c++17` here so that std::string_view is used. |
| -DCMAKE_CXX_STANDARD=20 |
| -DABSL_ENABLE_INSTALL=TRUE |
| -DABSL_USE_EXTERNAL_GOOGLETEST=ON |
| -DABSL_PROPAGATE_CXX_STD=TRUE |
| # ChromeOS: Enable building a monolithic libabseil_dll.so which |
| # significantly reduces the overhead of symbol resolution |
| # inside ld.so. See go/cros-absl-monolithic-so for a complete |
| # explanation and benchmark numbers. |
| -DABSL_BUILD_MONOLITHIC_SHARED_LIBS=ON |
| -DABSL_BUILD_TEST_HELPERS=$(usex test ON OFF) |
| -DABSL_BUILD_TESTING=$(usex test ON OFF) |
| $(usex test -DBUILD_TESTING=ON '') # intentional usex, it used both variables for tests. |
| ) |
| |
| cmake_src_configure |
| } |
| |
| multilib_src_compile() { |
| cmake_src_compile |
| |
| sed -e "s/@LIBS@/-labseil_dll/g" -e "s/@PV@/${PV}/g" \ |
| "${FILESDIR}/absl.pc.in" > absl.pc || die |
| } |
| |
| multilib_src_install() { |
| cmake_src_install |
| |
| insinto "/usr/$(get_libdir)/pkgconfig" |
| doins absl.pc |
| |
| # Compat symlinks from old separate .so files to monolithic libabseil_dll.so. |
| # This is needed for two use cases: |
| # - Packages that passes -labsl_foo flags directly, instead of using pkg-config or CMake. |
| # - Gradual migration of binpkgs or partner packages until they get rebuilt. |
| local targets=( "${D}/usr/$(get_libdir)/pkgconfig/"absl_*.pc ) |
| local t libname |
| for t in "${targets[@]}"; do |
| libname="lib$(basename "${t}" .pc).so" |
| ln -sv "libabseil_dll.so.${SOVERSION}" "${D}/usr/$(get_libdir)/${libname}" || die |
| ln -sv "libabseil_dll.so.${SOVERSION}" "${D}/usr/$(get_libdir)/${libname}.${SOVERSION}" || die |
| done |
| |
| # absl adds all the Cflags to all the pc files even though almost all the |
| # .pc files require absl_config.pc. This causes an explosion of flags when |
| # including multiple abseil sub-libraries through pkg-config. Until the |
| # issue is fixed upstream, strip them out here since this is easier to |
| # maintain than a version specific patch. |
| find "${D}/usr/$(get_libdir)/pkgconfig" -type f -not -name 'absl_config.pc' -print0 | xargs -0 sed -i '/^Cflags: /d' || die |
| } |