man-group / arctic

High performance datastore for time series and tick data
https://arctic.readthedocs.io/en/latest/
GNU Lesser General Public License v2.1
3.05k stars 583 forks source link

Naive pip install from git source fails when using clang: setup.py #521

Closed dcwtx closed 6 years ago

dcwtx commented 6 years ago

Arctic Version

1.63.0

Platform and version

macOS 10.12.6 default llvm installed via homebrew: brew install llvm (succeeds and results in executable linked at path in setup.py line 36)

Description of problem and/or code sample that reproduces the issue

setup.py permits use of llvm as a cython complier/linker when building arctic. Line 36 of the file identifies the link into the llvm cellar installed by brew, and the ValueError at line 42 suggests installing either gcc or llvm via brew install gcc or brew install llvm if setup.py can't find either complier.

I chose to brew install llvm if only for the reason that I knew Apple had switched to that in Xcode. When I ran pip3 install git+https://github.com/manahl/arctic.git I had a failure when linking OpenMP:

    /usr/local/opt/llvm/bin/clang -bundle -undefined dynamic_lookup -fno-common -fno-strict-aliasing -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -g -fwrapv -Os build/temp.macosx-10.12-x86_64-3.6/src/_compress.o build/temp.macosx-10.12-x86_64-3.6/src/lz4.o build/temp.macosx-10.12-x86_64-3.6/src/lz4hc.o -L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/sqlite/lib -o build/lib.macosx-10.12-x86_64-3.6/arctic/_compress.cpython-36m-darwin.so -fopenmp=libiomp5
    ld: library not found for -liomp5
    clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)
    error: command '/usr/local/opt/llvm/bin/clang' failed with exit status 1

The linker option -fopenmp=libiomp5 is created in setup.py at lines 49:50.

I uninstalled llvm, installed gcc, and reran the pip install procedure, and everything built and installed without error.

Therefore, the linker option specification for llvm in setup.py at lines 49:50 is probably wrong.

Additionally, I note that setup.py does not try to find Xcode's complier when installed with command line tools. gcc, when installed with Xcode, is at /Applications/Xcode/Contents/Developer/usr/bin. (update: Xcode's clang does not include OpenMP support - they use Apple's Grand Central Dispatch instead.)

bmoscon commented 6 years ago

fixed by #522