-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] ARROW-1669: [C++] Add Abseil to toolchain #2501
Conversation
What do you think about using git submodules for this? It would require writing "git submodules update --init" |
I don't really like git submodules, but I agree that might be better than importing all source files in the git history. Another possibility is a tarball as we do for jemalloc (but I'm not sure how to combine that with cmake's Edit: apparently we could use FetchContent. |
05e6753
to
adbff76
Compare
Apparently FetchContent is too recent (it seems to have appeared around CMake 3.11)... I'm not sure it would be ok to mandate such a recent version. |
I see, hmm. I'd be in favor of biting the bullet on git submodules; relatively easy to maintain and if we want to add more submodules in the future, the incremental cost to development workflow will not be high. I just interacted with a project using this approach (gRPC https://github.com/grpc/grpc/tree/master/third_party) and it seemed fine to me. |
Yes, git submodules sound like the least painful approach for now. |
63585d0
to
56c0319
Compare
I've switched to a git submodules approach and it seems to work fine. However, I've now discovered a larger problem: we're willing to use some Abseil functionality (such as the useful |
Indeed. So far we have made a policy of not exposing any transitive dependencies in our public API. It seems like Abseil isn't so difficult to install; we could bundle the headers and libraries with our Python packages (or have them as a runtime dependency in conda-forge), but in the case of Linux packages it's unclear we'd want to bundle Abseil in an arrow-dev package. I think we need feedback from some others (e.g. @kou) |
I don't think installing the headers is technically difficult. The main issue is potential conflicts with versions of Abseil installed by other projects. As for the libraries, we should link statically (as is done in this PR), so no shared lib needs installing. |
For Linux packages, I'll create packages for Abseil and change Arrow packages to depend on them. |
@kou Abseil doesn't support installing, which is the problem here. See abseil/abseil-cpp#38 and abseil/abseil-cpp#111 |
00c964f
to
f56c80b
Compare
I'm now installing the Abseil headers as part of the build process. It seems to solve issues. |
f56c80b
to
738dd8c
Compare
Note this seems to increase AppVeyor build times significantly. |
e1070ae
to
9bb567c
Compare
Unit tests are roughly half of the LOCs in Abseil -- are these being built here? If so we should figure out a way to skip them |
No, they shouldn't be. |
9bb567c
to
fc2c91e
Compare
Perhaps it's a false alarm: AppVeyor seems generally slower these days. |
I've noticed it's taking upwards 10 minutes until Appveyor begins even compiling the project (even though there's only ~100 MB in conda packages). Maybe wherever these VMs are hosted (Europe?) has slow connectivity to wherever the conda packages are coming from |
My experience is that Anaconda packages (which are served by a CDN) are generally faster to fetch than conda-forge packages. Also, not involving conda-forge in dependency resolution also saves time. |
Ah, sorry. I didn't know it. |
I wonder if Abseil could be made to work on older glibcs simply by removing the check here: |
ad742e1
to
ee019c3
Compare
ee019c3
to
127b44c
Compare
Reading both PEP, it seems we could be breaking the requirements by using gcc from devtoolset. From PEP571 (manylinux2010).
AFAIK, you can't even use C++11 with gcc-4.3 (full support was added in 4.8, which is the lower version required by abseil). @kszucs could you point me how I could run |
manylinux1 uses devtoolset-2, gcc 4.8 based |
@fsaintjacques The problem is the glibc version on the system where the Python packages are compiled on: it's too old to support Abseil. |
Yep, I was just wondering if also we're breaking the requirement of pip513, we're not:
|
@fsaintjacques be aware that we also run On a related note, |
@xhochy good to know, thank! |
I'm not sure if this is the correct issue but it looks like manylinux 2010 is now very close pypa/manylinux#179? |
@emkornfield |
Closing until we are able to raise our glibc requirement |
For now, this is blocked by manylinux1 which specifies a too old glibc:
(example: https://travis-ci.org/apache/arrow/jobs/422680091)
Note: glibc 2.12 is exactly the minimum version specified by manylinux2010. See ARROW-2461
A caveat: we need to remove the
ARROW_USE_CLCACHE
parameter because settingCMAKE_CXX_COMPILER
is poorly supported (it can result in infinite loops). Instead the user has to pass-DCMAKE_CXX_COMPILER=clcache
to the cmake invocation.