cmake_minimum_required(VERSION 3.15 FATAL_ERROR) # keep old policy for setting implicit link libraries # zlib causes issues in static builds otherwise cmake_policy(SET CMP0060 OLD) cmake_policy(SET CMP0074 NEW) project(foldseek C CXX) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib/mmseqs/cmake") set(ENABLE_PROSTT5 1 CACHE BOOL "Enable ProstT5") set(ENABLE_CUDA 0 CACHE BOOL "Enable CUDA") set(IGNORE_RUST_VERSION 0 CACHE BOOL "Ignore Rust version check") set(FORCE_STATIC_DEPS 0 CACHE BOOL "Force static linking of deps") if(FORCE_STATIC_DEPS) if(ENABLE_CUDA) set(CMAKE_FIND_LIBRARY_SUFFIXES .a .so CACHE INTERNAL "" FORCE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") else() set(CMAKE_FIND_LIBRARY_SUFFIXES .a CACHE INTERNAL "" FORCE) set(CMAKE_LINK_SEARCH_START_STATIC ON CACHE INTERNAL "" FORCE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -static-libgcc -static-libstdc++") endif() set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "" FORCE) endif() if(NOT XCODE AND NOT MSVC AND NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() set(FRAMEWORK_ONLY 1 CACHE INTERNAL "" FORCE) include(MMseqsSetupDerivedTarget) add_subdirectory(lib/mmseqs EXCLUDE_FROM_ALL) set(FOLDSEEK_FRAMEWORK_ONLY 0 CACHE BOOL "Framework mode (don't create foldseek executable)") if (FOLDSEEK_FRAMEWORK_ONLY) set(FRAMEWORK_ONLY 1 CACHE INTERNAL "" FORCE) endif() add_subdirectory(lib/3di) add_subdirectory(lib/pulchra) add_subdirectory(lib/kerasify) add_subdirectory(lib/tmalign) set(BUILD_LIBRARY 1 CACHE INTERNAL "" FORCE) add_subdirectory(lib/foldcomp EXCLUDE_FROM_ALL) add_subdirectory(data) include_directories(lib) include_directories(lib/3di) include_directories(lib/pulchra) include_directories(lib/kerasify) set(ENV{CARGO_NET_OFFLINE} true) add_subdirectory(lib/corrosion) # don't try to link to gcc_s, its not needed anyway list(REMOVE_ITEM Rust_CARGO_TARGET_LINK_NATIVE_LIBS "gcc_s") set(Rust_CARGO_TARGET_LINK_NATIVE_LIBS ${Rust_CARGO_TARGET_LINK_NATIVE_LIBS} CACHE INTERNAL "") if(Rust_VERSION VERSION_LESS "1.68.0" AND NOT IGNORE_RUST_VERSION) message(FATAL_ERROR "Rust >= 1.68.0 is required") endif() set(RUST_FEATURE "") if(HAVE_AVX2) set(RUST_FEATURE simd_avx2) elseif(HAVE_SSE4_1 OR HAVE_SSE2) set(RUST_FEATURE simd_sse2) elseif(HAVE_ARM8) set(RUST_FEATURE simd_neon) endif() if (NATIVE_ARCH AND (RUST_FEATURE STREQUAL "")) if(EMSCRIPTEN) set(RUST_FEATURE simd_wasm) elseif(ARM) set(RUST_FEATURE simd_neon) elseif(X86 OR X64) if (HAVE_AVX2_EXTENSIONS) set(RUST_FEATURE simd_avx2) elseif (HAVE_SSE2_EXTENSIONS) set(RUST_FEATURE simd_sse2) endif() endif() endif() if(RUST_FEATURE STREQUAL "") message(FATAL_ERROR "No SIMD support for this architecture") endif() message("-- Rust Feature: ${RUST_FEATURE}") corrosion_import_crate( MANIFEST_PATH lib/block-aligner/c/Cargo.toml FEATURES "${RUST_FEATURE}" CRATE_TYPES staticlib ) include_directories(lib/block-aligner/c) if(EMSCRIPTEN) corrosion_add_target_local_rustflags(block_aligner_c "-Clink-args=--no-entry -sRELOCATABLE=1") endif() if(HAVE_SSE2) message(WARNING "ProstT5 support requires at least SSE4.1, disabling ProstT5") set(ENABLE_PROSTT5 OFF) endif() if(ENABLE_PROSTT5) set(CMAKE_SYSTEM_PROCESSOR_TMP ${CMAKE_SYSTEM_PROCESSOR}) # circumvent ggml's host CPU detection if(ARM) set(CMAKE_SYSTEM_PROCESSOR aarch64) endif() if(X86 OR X64) set(CMAKE_SYSTEM_PROCESSOR x86_64) endif() if(PPC64) set(CMAKE_SYSTEM_PROCESSOR ppc64) endif() set(GGML_STATIC ON) set(BUILD_SHARED_LIBS OFF) set(GGML_BLAS OFF) set(GGML_OPENMP OFF) if (NOT NATIVE_ARCH) set(GGML_NATIVE OFF) if (HAVE_AVX2) set(GGML_AVX2 ON) set(GGML_AVX ON) set(GGML_FMA ON) set(GGML_F16C ON) elseif(HAVE_SSE4_1) set(GGML_AVX2 OFF) set(GGML_AVX OFF) set(GGML_FMA OFF) set(GGML_F16C OFF) endif() endif() if (ENABLE_CUDA) set(GGML_CUDA ON) set(GGML_CUDA_F16 ON) set(GGML_CUDA_FORCE_CUBLAS ON) set(GGML_CUDA_NO_VMM ON) endif() if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(GGML_METAL OFF) endif() add_subdirectory(lib/prostt5 EXCLUDE_FROM_ALL) set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR_TMP}) endif() add_subdirectory(src)