Skip to content

Commit 9927445

Browse files
committed
Sync build system changes with foldseek
changes relicensed as MIT for MMseqs2
1 parent b0e91c1 commit 9927445

File tree

5 files changed

+124
-108
lines changed

5 files changed

+124
-108
lines changed

Diff for: CMakeLists.txt

+19-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
1+
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
2+
cmake_policy(SET CMP0060 OLD)
3+
cmake_policy(SET CMP0074 NEW)
24
project(MMseqs CXX C)
35
message("-- Source Directory: ${CMAKE_CURRENT_SOURCE_DIR}")
46
message("-- Project Directory: ${PROJECT_SOURCE_DIR}")
@@ -18,12 +20,24 @@ set(HAVE_ARM8 0 CACHE BOOL "Have ARMv8 CPU")
1820
set(HAVE_S390X 0 CACHE BOOL "Have s390x architecture")
1921
set(NATIVE_ARCH 1 CACHE BOOL "Assume native architecture for SIMD. Use one of the HAVE_* options or set CMAKE_CXX_FLAGS to the appropriate flags if you disable this.")
2022
set(USE_SYSTEM_ZSTD 0 CACHE BOOL "Use zstd provided by system instead of bundled version")
21-
2223
set(ENABLE_CUDA 0 CACHE BOOL "Enable CUDA")
24+
set(FORCE_STATIC_DEPS 0 CACHE BOOL "Force static linking of deps")
25+
26+
if(FORCE_STATIC_DEPS)
27+
if(ENABLE_CUDA)
28+
set(CMAKE_FIND_LIBRARY_SUFFIXES .a .so CACHE INTERNAL "" FORCE)
29+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
30+
else()
31+
set(CMAKE_FIND_LIBRARY_SUFFIXES .a CACHE INTERNAL "" FORCE)
32+
set(CMAKE_LINK_SEARCH_START_STATIC ON CACHE INTERNAL "" FORCE)
33+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -static-libgcc -static-libstdc++")
34+
endif()
35+
set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "" FORCE)
36+
endif()
2337

24-
set(PREFER_STATIC 0 CACHE BOOL "Prefer finding .a libs")
25-
if (PREFER_STATIC)
26-
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so")
38+
if(NOT XCODE AND NOT MSVC AND NOT CMAKE_BUILD_TYPE)
39+
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
40+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
2741
endif()
2842

2943
if (HAVE_SANITIZER)
@@ -33,10 +47,6 @@ if (HAVE_SANITIZER)
3347
include(FindTSan)
3448
endif ()
3549

36-
if (NOT CMAKE_BUILD_TYPE)
37-
set(CMAKE_BUILD_TYPE Release)
38-
endif ()
39-
4050
# find compiler
4151
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
4252
message("-- Compiler is clang(++)")

Diff for: Dockerfile

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ RUN dpkg --add-architecture $TARGETARCH \
1313
if [ "$GPU" = "1" ]; then \
1414
wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb; \
1515
dpkg -i cuda-keyring_1.1-1_all.deb; \
16-
apt-get update && apt-get install -y cuda-nvcc-12-6 ninja-build; \
16+
apt-get update && apt-get install -y cuda-nvcc-12-6 cuda-cudart-dev-12-6 ninja-build; \
1717
fi; \
1818
rm -rf /var/lib/apt/lists/*;
1919

@@ -32,10 +32,10 @@ RUN if [ "$TARGETARCH" = "arm64" ]; then \
3232
export CUDACXX=/usr/local/cuda/bin/nvcc; \
3333
mkdir -p build_avx2/src; \
3434
cd /opt/build/build_avx2; \
35-
cmake -GNinja -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 \
36-
-DPREFER_STATIC=1 -DBUILD_SHARED_LIBS=OFF \
37-
-DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++" \
35+
LIBGOMP=/usr/lib/gcc/x86_64-linux-gnu/12/; \
36+
cmake -GNinja -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DFORCE_STATIC_DEPS=1 \
3837
-DENABLE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" \
38+
-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 \
3939
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
4040
cmake --build . -j$(nproc --all); \
4141
mv src/${APP} /opt/build/${APP}_avx2; \

Diff for: azure-pipelines.yml

+45-51
Original file line numberDiff line numberDiff line change
@@ -68,22 +68,22 @@ jobs:
6868
SIMD: 'AVX2'
6969
STATIC: 1
7070
MPI: 0
71-
BUILD_TYPE: RelWithDebInfo
71+
BUILD_TYPE: Release
7272
sse41:
7373
SIMD: 'SSE4_1'
7474
STATIC: 1
7575
MPI: 0
76-
BUILD_TYPE: RelWithDebInfo
76+
BUILD_TYPE: Release
7777
sse2:
7878
SIMD: 'SSE2'
7979
STATIC: 1
8080
MPI: 0
81-
BUILD_TYPE: RelWithDebInfo
81+
BUILD_TYPE: Release
8282
avx2_mpi:
8383
SIMD: 'AVX2'
8484
STATIC: 0
8585
MPI: 1
86-
BUILD_TYPE: RelWithDebInfo
86+
BUILD_TYPE: Release
8787
asan:
8888
SIMD: 'AVX2'
8989
STATIC: 0
@@ -94,10 +94,9 @@ jobs:
9494
- checkout: self
9595
submodules: true
9696
- script: |
97-
#sudo add-apt-repository ppa:ubuntu-toolchain-r/test
98-
#sudo apt-get update
99-
sudo apt-get install -y g++-10
100-
condition: eq(variables['BUILD_TYPE'], 'ASanOpt')
97+
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
98+
sudo apt-get update
99+
sudo apt-get install -y gcc-11 g++-11 libgcc-11-dev build-essential
101100
displayName: Install newer G++
102101
- script: |
103102
sudo apt-get update
@@ -106,28 +105,21 @@ jobs:
106105
condition: eq(variables['MPI'], 1)
107106
- script: |
108107
mkdir build && cd build
109-
if [ "${BUILD_TYPE}" = "ASanOpt" ]; then
110-
export CC=gcc-10 ; export CXX=g++-10
111-
fi
108+
export CC=gcc-11 ; export CXX=g++-11
112109
if [ "${STATIC}" -eq "1" ]; then
113-
cmake -DHAVE_SANITIZER=1 -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DHAVE_TESTS=1 \
114-
-DBUILD_SHARED_LIBS=OFF \
115-
-DCMAKE_EXE_LINKER_FLAGS="-static -static-libgcc \
116-
-static-libstdc++" -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \
117-
-DENABLE_WERROR=1 -DHAVE_${SIMD}=1 -DHAVE_MPI=${MPI} ..
110+
LIBGOMP=/usr/lib/gcc/x86_64-linux-gnu/11
111+
cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DFORCE_STATIC_DEPS=1 -DHAVE_TESTS=1 \
112+
-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 \
113+
-DENABLE_WERROR=1 -DHAVE_${SIMD}=1 -DHAVE_MPI=${MPI} ..
118114
else
119-
cmake -DHAVE_SANITIZER=1 -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DHAVE_TESTS=1 \
120-
-DENABLE_WERROR=1 -DHAVE_${SIMD}=1 -DHAVE_MPI=${MPI} ..
115+
cmake -DHAVE_SANITIZER=1 -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DHAVE_TESTS=1 \
116+
-DENABLE_WERROR=1 -DHAVE_${SIMD}=1 -DHAVE_MPI=${MPI} ..
121117
fi
122118
123-
make -j $(nproc --all)
119+
make -j $(nproc --all) VERBOSE=1
124120
displayName: Build MMseqs2
125121
- script: |
126122
export TTY=0
127-
if [ "${BUILD_TYPE}" = "ASan" ]; then
128-
echo "leak:libgomp1" > ${BUILD_SOURCESDIRECTORY}/ASan.supp
129-
export ASAN_OPTIONS=suppressions=${BUILD_SOURCESDIRECTORY}/ASan.supp
130-
fi
131123
${BUILD_SOURCESDIRECTORY}/util/regression/run_regression.sh ${BUILD_SOURCESDIRECTORY}/build/src/mmseqs ${BUILD_SOURCESDIRECTORY}/regression
132124
displayName: Run Regression Suite
133125
condition: eq(variables['regression'], 1)
@@ -149,7 +141,7 @@ jobs:
149141
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
150142
sudo dpkg -i cuda-keyring_1.1-1_all.deb
151143
sudo apt-get update
152-
sudo apt-get install -y gcc-10 g++-10 cuda-nvcc-12-6 build-essential libgcc-10-dev ninja-build
144+
sudo apt-get install -y gcc-10 g++-10 cuda-nvcc-12-6 cuda-cudart-dev-12-6 build-essential libgcc-10-dev ninja-build
153145
sudo apt-get purge -y cmake
154146
wget https://github.com/Kitware/CMake/releases/download/v3.31.0/cmake-3.31.0-linux-x86_64.sh
155147
chmod +x cmake-3.31.0-linux-x86_64.sh
@@ -158,16 +150,15 @@ jobs:
158150
- script: |
159151
mkdir build && cd build
160152
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;
161154
/usr/local/bin/cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DHAVE_TESTS=1 -DENABLE_WERROR=1 -DHAVE_AVX2=1 \
162-
-DPREFER_STATIC=1 -DCMAKE_LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/10 -DBUILD_SHARED_LIBS=OFF \
163-
-DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++" \
164-
-DENABLE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" ..
155+
-DFORCE_STATIC_DEPS=1 -DENABLE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" ..
165156
cmake --build . -j$(nproc --all)
166157
# fail if GLIBC_PRIVATE or too new GLIBC is present
167-
if readelf -Ws mmseqs | grep -q GLIBC_PRIVATE; then
158+
if readelf -Ws src/mmseqs | grep -q GLIBC_PRIVATE; then
168159
exit 1
169160
fi
170-
LIBC_V=$(readelf -V mmseqs | awk '$3 ~ /^GLIBC_/ { print $3 }' | sort -V | tail -n1)
161+
LIBC_V=$(readelf -V src/mmseqs | awk '$3 ~ /^GLIBC_/ { print $3 }' | sort -V | tail -n1)
171162
if [[ "$LIBC_V" > "GLIBC_2.29" ]]; then
172163
exit 1
173164
fi
@@ -184,10 +175,10 @@ jobs:
184175
timeoutInMinutes: 120
185176
strategy:
186177
matrix:
187-
power8:
188-
SIMD: POWER8
189-
ARCH: ppc64el
190-
CPREF: powerpc64le
178+
# power8:
179+
# SIMD: POWER8
180+
# ARCH: ppc64el
181+
# CPREF: powerpc64le
191182
power9:
192183
SIMD: POWER9
193184
ARCH: ppc64el
@@ -215,11 +206,14 @@ jobs:
215206
displayName: Install Toolchain
216207
- script: |
217208
mkdir build && cd build
209+
if [ "${ARCH}" = "ppc64el" ]; then
210+
LIBGOMP=/usr/lib/gcc-cross/powerpc64-linux-gnu/9;
211+
else
212+
LIBGOMP=/usr/lib/gcc-cross/${CPREF}-linux-gnu/9;
213+
fi
218214
CC=${CPREF}-linux-gnu-gcc CXX=${CPREF}-linux-gnu-g++ \
219-
cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DHAVE_TESTS=1 \
220-
-DBUILD_SHARED_LIBS=OFF \
221-
-DCMAKE_EXE_LINKER_FLAGS="-static -static-libgcc \
222-
-static-libstdc++" -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \
215+
cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DHAVE_TESTS=1 -DFORCE_STATIC_DEPS=1 \
216+
-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 \
223217
-DENABLE_WERROR=1 -DHAVE_${SIMD}=1 ..
224218
make -j $(nproc --all)
225219
displayName: Build MMseqs2
@@ -382,18 +376,18 @@ jobs:
382376
archiveFile: $(Build.SourcesDirectory)/mmseqs-linux-ppc64le-power9.tar.gz
383377
includeRootFolder: true
384378
archiveType: tar
385-
- task: DownloadPipelineArtifact@1
386-
inputs:
387-
artifactName: mmseqs-linux-POWER8
388-
targetPath: $(Build.SourcesDirectory)/mmseqs/bin
389-
- script:
390-
chmod +x "${BUILD_SOURCESDIRECTORY}/mmseqs/bin/mmseqs"
391-
- task: ArchiveFiles@2
392-
inputs:
393-
rootFolderOrFile: $(Build.SourcesDirectory)/mmseqs
394-
archiveFile: $(Build.SourcesDirectory)/mmseqs-linux-ppc64le-power8.tar.gz
395-
includeRootFolder: true
396-
archiveType: tar
379+
# - task: DownloadPipelineArtifact@1
380+
# inputs:
381+
# artifactName: mmseqs-linux-POWER8
382+
# targetPath: $(Build.SourcesDirectory)/mmseqs/bin
383+
# - script:
384+
# chmod +x "${BUILD_SOURCESDIRECTORY}/mmseqs/bin/mmseqs"
385+
# - task: ArchiveFiles@2
386+
# inputs:
387+
# rootFolderOrFile: $(Build.SourcesDirectory)/mmseqs
388+
# archiveFile: $(Build.SourcesDirectory)/mmseqs-linux-ppc64le-power8.tar.gz
389+
# includeRootFolder: true
390+
# archiveType: tar
397391
- task: DownloadPipelineArtifact@1
398392
inputs:
399393
artifactName: mmseqs-linux-ARM8
@@ -431,6 +425,8 @@ jobs:
431425
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
432426
cd "${BUILD_SOURCESDIRECTORY}"
433427
cp mmseqs/userguide.pdf userguide.pdf
428+
# disabled: mmseqs-linux-ppc64le-power8.tar.gz
429+
# -F file[][email protected] -F signature[][email protected]
434430
ssh-keygen -Y sign -f ~/.ssh/id_rsa -n file \
435431
userguide.pdf \
436432
mmseqs-osx-universal.tar.gz \
@@ -439,7 +435,6 @@ jobs:
439435
mmseqs-linux-avx2.tar.gz \
440436
mmseqs-linux-gpu.tar.gz \
441437
mmseqs-linux-arm64.tar.gz \
442-
mmseqs-linux-ppc64le-power8.tar.gz \
443438
mmseqs-linux-ppc64le-power9.tar.gz \
444439
mmseqs-win64.zip
445440
curl --retry 5 --retry-all-errors -X POST \
@@ -450,7 +445,6 @@ jobs:
450445
-F file[][email protected] -F signature[][email protected] \
451446
-F file[][email protected] -F signature[][email protected] \
452447
-F file[][email protected] -F signature[][email protected] \
453-
-F file[][email protected] -F signature[][email protected] \
454448
-F file[][email protected] -F signature[][email protected] \
455449
-F file[][email protected] -F signature[][email protected] \
456450
-F identifier="mmseqs" -F directory="${BUILD_SOURCEVERSION}" \

Diff for: src/CMakeLists.txt

+1-19
Original file line numberDiff line numberDiff line change
@@ -215,20 +215,7 @@ find_package(OpenMP QUIET)
215215
if (OPENMP_FOUND)
216216
message("-- Found OpenMP")
217217
target_compile_definitions(mmseqs-framework PUBLIC -DOPENMP=1)
218-
# Try to get "nearly" static builds working with everything except libc static
219-
if (PREFER_STATIC)
220-
set(FILTERED_LIBRARIES "")
221-
foreach(LIB ${OpenMP_CXX_LIBRARIES})
222-
if (NOT LIB MATCHES "pthread" AND NOT LIB MATCHES "gcc_s")
223-
list(APPEND FILTERED_LIBRARIES ${LIB})
224-
endif ()
225-
endforeach()
226-
set(OpenMP_CXX_LIBRARIES ${FILTERED_LIBRARIES})
227-
endif ()
228218
target_link_libraries(mmseqs-framework ${OpenMP_CXX_LIBRARIES})
229-
if (PREFER_STATIC)
230-
target_link_libraries(mmseqs-framework dl)
231-
endif ()
232219
target_include_directories(mmseqs-framework PUBLIC ${OpenMP_CXX_INCLUDE_DIRS})
233220
append_target_property(mmseqs-framework COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
234221
append_target_property(mmseqs-framework LINK_FLAGS ${OpenMP_CXX_FLAGS})
@@ -250,12 +237,7 @@ endif ()
250237
if (ENABLE_CUDA)
251238
find_package(CUDAToolkit REQUIRED)
252239
target_compile_definitions(mmseqs-framework PUBLIC -DHAVE_CUDA=1)
253-
target_link_libraries(mmseqs-framework marv)
254-
if (PREFER_STATIC)
255-
# link to rt explicitly so it doesn't get statically compiled and adds GLIBC_PRIVATE symbols
256-
target_link_libraries(mmseqs-framework rt)
257-
endif ()
258-
target_link_libraries(mmseqs-framework CUDA::cudart_static)
240+
target_link_libraries(mmseqs-framework marv CUDA::cudart_static)
259241
endif ()
260242

261243
if (NOT FRAMEWORK_ONLY)

0 commit comments

Comments
 (0)