Skip to content

Commit 35537c4

Browse files
committed
Make sure cuda binaries do not depend on dynamic libatomic
This would require a non glibc dependency installed
1 parent 7e2732c commit 35537c4

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

azure-pipelines.yml

+9-4
Original file line numberDiff line numberDiff line change
@@ -150,19 +150,24 @@ jobs:
150150
- script: |
151151
mkdir build && cd build
152152
export CC=gcc-10 ; export CXX=g++-10; export CUDAHOSTCXX=$CXX; export CUDACXX=/usr/local/cuda/bin/nvcc;
153-
LIBGOMP=/usr/lib/gcc/x86_64-linux-gnu/10;
153+
LIBGCC=/usr/lib/gcc/x86_64-linux-gnu/10;
154154
/usr/local/bin/cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DHAVE_TESTS=1 -DENABLE_WERROR=1 -DHAVE_AVX2=1 \
155-
-DOpenMP_C_FLAGS="-fopenmp -I${LIBGOMP}" -DOpenMP_C_LIB_NAMES=gomp -DOpenMP_CXX_FLAGS="-fopenmp -I${LIBGOMP}" -DOpenMP_CXX_LIB_NAMES=gomp -DOpenMP_gomp_LIBRARY=${LIBGOMP}/libgomp.a \
155+
-DOpenMP_C_FLAGS="-fopenmp -I${LIBGCC}" -DOpenMP_C_LIB_NAMES=gomp -DOpenMP_CXX_FLAGS="-fopenmp -I${LIBGCC}" -DOpenMP_CXX_LIB_NAMES=gomp -DOpenMP_gomp_LIBRARY=${LIBGCC}/libgomp.a \
156+
-DATOMIC_LIB_OVERRIDE=${LIBGCC}/libatomic.a \
156157
-DFORCE_STATIC_DEPS=1 -DENABLE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" ..
157158
cmake --build . -j$(nproc --all) -v
158159
# fail if GLIBC_PRIVATE or too new GLIBC is present
159-
readelf -Ws src/mmseqs
160-
readelf -V src/mmseqs
161160
if readelf -Ws src/mmseqs | grep -q GLIBC_PRIVATE; then
161+
echo "Error: binary contains private glibc symbols"
162162
exit 1
163163
fi
164164
LIBC_V=$(readelf -V src/mmseqs | awk '$3 ~ /^GLIBC_/ { print $3 }' | sort -V | tail -n1)
165165
if [[ "$LIBC_V" > "GLIBC_2.29" ]]; then
166+
echo "Error: glibc too new"
167+
exit 1
168+
fi
169+
if readelf -d src/mmseqs | grep -q "libatomic.so"; then
170+
echo "Error: libatomic.so is present as a dependency"
166171
exit 1
167172
fi
168173
displayName: Build MMseqs2

src/CMakeLists.txt

+15-6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ set(HAVE_GPROF 0 CACHE BOOL "Have GPROF Profiler")
55
set(ENABLE_WERROR 0 CACHE BOOL "Enable Warnings as Errors")
66
#set(DISABLE_LTO 0 CACHE BOOL "Disable link-time optimization in non-debug builds")
77
set(REQUIRE_OPENMP 1 CACHE BOOL "Require availability of OpenMP")
8+
set(ATOMIC_LIB_OVERRIDE "" CACHE PATH "Override path to libatomic")
89

910
include(AppendTargetProperty)
1011

@@ -117,13 +118,21 @@ if (HAVE_POSIX_MADVISE)
117118
endif ()
118119

119120
if (NOT DISABLE_IPS4O)
120-
find_package(Atomic)
121-
if (ATOMIC_FOUND)
122-
target_link_libraries(mmseqs-framework ${ATOMIC_LIBRARIES})
121+
if (ATOMIC_LIB_OVERRIDE)
122+
add_library(LibAtomic STATIC IMPORTED)
123+
set_target_properties(LibAtomic PROPERTIES IMPORTED_LOCATION ${ATOMIC_LIB_OVERRIDE})
124+
target_link_libraries(mmseqs-framework LibAtomic)
123125
target_compile_definitions(mmseqs-framework PUBLIC -DENABLE_IPS4O=1)
124-
message("-- IPS4O sorting works")
125-
else ()
126-
message("-- OMPTL sorting fallback")
126+
message("-- IPS4O sorting forced with ${ATOMIC_LIB_OVERRIDE}")
127+
else()
128+
find_package(Atomic)
129+
if (ATOMIC_FOUND)
130+
target_link_libraries(mmseqs-framework ${ATOMIC_LIBRARIES})
131+
target_compile_definitions(mmseqs-framework PUBLIC -DENABLE_IPS4O=1)
132+
message("-- IPS4O sorting works")
133+
else ()
134+
message("-- OMPTL sorting fallback")
135+
endif ()
127136
endif ()
128137
else ()
129138
message("-- OMPTL sorting fallback")

0 commit comments

Comments
 (0)