apache / arrow

Apache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics
https://arrow.apache.org/
Apache License 2.0
14.48k stars 3.52k forks source link

[C++] Create "ARROW_LIBRARIES" argument to pass list of desired components to build #22942

Open asfimport opened 5 years ago

asfimport commented 5 years ago

Our current -DARROW_* flag system strikes me as a little bit tedious. When invoking Boost's build system, you can pass the argument --with-libraries=filesystem,regex,system to indicate which components you want to see built.

I think we should do a couple of things declare all component dependencies in a central place. Presently we have many "if" statements toggling on dependencies on an ad hoc basis. The code looks like this


if(ARROW_FLIGHT OR ARROW_PARQUET OR ARROW_BUILD_TESTS)
  set(ARROW_IPC ON)
endif()

if(ARROW_IPC AND NOT ARROW_JSON)
  message(FATAL_ERROR "JSON support is required for Arrow IPC")
endif()

I don't think this is going to be scalable.

Secondly, I think we should make it easier to ask for a comprehensive build. E.g. -DARROW_LIBRARIES=everything or similar

Reporter: Wes McKinney / @wesm

Note: This issue was originally created as ARROW-6585. Please see the migration documentation for further details.

asfimport commented 5 years ago

Uwe Korn / @xhochy: FTR: there is a related ML discussion about this: "[DISCUSS] Changing C++ build system default options to produce more barebones builds"

asfimport commented 5 years ago

Wes McKinney / @wesm: Yes, my thoughts are that the default build should be barebones while providing easier / less verbose options than we have now to ask for a particular set of optional components to be built.

asfimport commented 5 years ago

Neal Richardson / @nealrichardson: I agree that something like this would be a good idea, though/and it requires us to do the hard but necessary work of teasing apart and enumerating the various optional components and determining what is a component (e.g parquet) that goes in this list versus what is an optional flag for a component (e.g. snappy compression).

FTR aws-sdk-cpp as a similar BUILD_ONLY argument: https://github.com/aws/aws-sdk-cpp#build_only