104 lines
2.9 KiB
CMake
104 lines
2.9 KiB
CMake
cmake_minimum_required(VERSION 3.12)
|
|
project("stable-diffusion")
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
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(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
|
|
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
set(SD_STANDALONE ON)
|
|
else()
|
|
set(SD_STANDALONE OFF)
|
|
endif()
|
|
|
|
#
|
|
# Option list
|
|
#
|
|
|
|
# general
|
|
#option(SD_BUILD_TESTS "sd: build tests" ${SD_STANDALONE})
|
|
option(SD_BUILD_EXAMPLES "sd: build examples" ${SD_STANDALONE})
|
|
option(SD_CUBLAS "sd: cuda backend" OFF)
|
|
option(SD_HIPBLAS "sd: rocm backend" OFF)
|
|
option(SD_METAL "sd: metal backend" OFF)
|
|
option(SD_FLASH_ATTN "sd: use flash attention for x4 less memory usage" OFF)
|
|
option(SD_FAST_SOFTMAX "sd: x1.5 faster softmax, indeterministic (sometimes, same seed don't generate same image), cuda only" OFF)
|
|
option(SD_BUILD_SHARED_LIBS "sd: build shared libs" OFF)
|
|
#option(SD_BUILD_SERVER "sd: build server example" ON)
|
|
|
|
if(SD_CUBLAS)
|
|
message("Use CUBLAS as backend stable-diffusion")
|
|
set(GGML_CUBLAS ON)
|
|
add_definitions(-DSD_USE_CUBLAS)
|
|
endif()
|
|
|
|
if(SD_METAL)
|
|
message("Use Metal as backend stable-diffusion")
|
|
set(GGML_METAL ON)
|
|
add_definitions(-DSD_USE_METAL)
|
|
endif()
|
|
|
|
if (SD_HIPBLAS)
|
|
message("Use HIPBLAS as backend stable-diffusion")
|
|
set(GGML_HIPBLAS ON)
|
|
add_definitions(-DSD_USE_CUBLAS)
|
|
if(SD_FAST_SOFTMAX)
|
|
set(GGML_CUDA_FAST_SOFTMAX ON)
|
|
endif()
|
|
endif ()
|
|
|
|
if(SD_FLASH_ATTN)
|
|
message("Use Flash Attention for memory optimization")
|
|
add_definitions(-DSD_USE_FLASH_ATTENTION)
|
|
endif()
|
|
|
|
set(SD_LIB stable-diffusion)
|
|
|
|
file(GLOB SD_LIB_SOURCES
|
|
"*.h"
|
|
"*.cpp"
|
|
"*.hpp"
|
|
)
|
|
|
|
# we can get only one share lib
|
|
if(SD_BUILD_SHARED_LIBS)
|
|
message("Build shared library")
|
|
message(${SD_LIB_SOURCES})
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
add_library(${SD_LIB} SHARED ${SD_LIB_SOURCES})
|
|
add_definitions(-DSD_BUILD_SHARED_LIB)
|
|
target_compile_definitions(${SD_LIB} PRIVATE -DSD_BUILD_DLL)
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
else()
|
|
message("Build static library")
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
add_library(${SD_LIB} STATIC ${SD_LIB_SOURCES})
|
|
endif()
|
|
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
|
|
|
# see https://github.com/ggerganov/ggml/pull/682
|
|
add_definitions(-DGGML_MAX_NAME=128)
|
|
|
|
# deps
|
|
add_subdirectory(ggml)
|
|
|
|
add_subdirectory(thirdparty)
|
|
|
|
target_link_libraries(${SD_LIB} PUBLIC ggml zip)
|
|
target_include_directories(${SD_LIB} PUBLIC . thirdparty)
|
|
target_compile_features(${SD_LIB} PUBLIC cxx_std_11)
|
|
|
|
|
|
if (SD_BUILD_EXAMPLES)
|
|
add_subdirectory(examples)
|
|
endif()
|
|
|