diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0fe2811 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,98 @@ +name: CI + +on: + push: + branches: + - master + paths: ['.github/workflows/**', '**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp', '**/*.cu'] + pull_request: + types: [opened, synchronize, reopened] + paths: ['**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp', '**/*.cu'] + +jobs: + ubuntu-latest-cmake: + runs-on: ubuntu-latest + + steps: + - name: Clone + id: checkout + uses: actions/checkout@v3 + with: + submodules: recursive + + + - name: Dependencies + id: depends + run: | + sudo apt-get update + sudo apt-get install build-essential + + - name: Build + id: cmake_build + run: | + mkdir build + cd build + cmake .. + cmake --build . --config Release + + #- name: Test + #id: cmake_test + #run: | + #cd build + #ctest --verbose --timeout 900 + + macOS-latest-cmake: + runs-on: macos-latest + + steps: + - name: Clone + id: checkout + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Dependencies + id: depends + continue-on-error: true + run: | + brew update + + - name: Build + id: cmake_build + run: | + sysctl -a + mkdir build + cd build + cmake .. + cmake --build . --config Release + + #- name: Test + #id: cmake_test + #run: | + #cd build + #ctest --verbose --timeout 900 + + windows-latest-cmake: + runs-on: windows-latest + + steps: + - name: Clone + id: checkout + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Build + id: cmake_build + run: | + mkdir build + cd build + cmake .. + cmake --build . --config Release + + #- name: Test + #id: cmake_test + #run: | + #cd build + #ctest -C Release --verbose --timeout 900 + diff --git a/.gitignore b/.gitignore index db0a93f..59a8a2c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build*/ test/ .cache/ +*.swp diff --git a/CMakeLists.txt b/CMakeLists.txt index 158eeed..6f19307 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,44 @@ cmake_minimum_required(VERSION 3.12) -project(stable-diffusion) +project("stable-diffusion") -set(SD_LIB stable-diffusion) -set(SD_TARGET sd) +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_BUILD_SERVER "sd: build server example" ON) + + +# deps add_subdirectory(ggml) +set(SD_LIB stable-diffusion) + add_library(${SD_LIB} stable-diffusion.h stable-diffusion.cpp) -add_executable(${SD_TARGET} main.cpp stb_image.h stb_image_write.h) - target_link_libraries(${SD_LIB} PUBLIC ggml) -target_link_libraries(${SD_TARGET} ${SD_LIB}) - +target_include_directories(${SD_LIB} PUBLIC .) target_compile_features(${SD_LIB} PUBLIC cxx_std_11) -target_compile_features(${SD_TARGET} PUBLIC cxx_std_11) + + +if (SD_BUILD_EXAMPLES) + add_subdirectory(examples) +endif() + diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt new file mode 100644 index 0000000..a55396e --- /dev/null +++ b/examples/CMakeLists.txt @@ -0,0 +1,8 @@ +# TODO: move into its own subdirectoy +# TODO: make stb libs a target (maybe common) +set(SD_TARGET sd) + +add_executable(${SD_TARGET} main.cpp stb_image.h stb_image_write.h) +install(TARGETS ${SD_TARGET} RUNTIME) +target_link_libraries(${SD_TARGET} PRIVATE stable-diffusion ${CMAKE_THREAD_LIBS_INIT}) +target_compile_features(${SD_TARGET} PUBLIC cxx_std_11) diff --git a/main.cpp b/examples/main.cpp similarity index 100% rename from main.cpp rename to examples/main.cpp diff --git a/stb_image.h b/examples/stb_image.h similarity index 100% rename from stb_image.h rename to examples/stb_image.h diff --git a/stb_image_write.h b/examples/stb_image_write.h similarity index 100% rename from stb_image_write.h rename to examples/stb_image_write.h