From f6c0f8a8cd58cd790639db625e963dfda494562b Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Thu, 26 Oct 2023 16:09:08 +0800 Subject: [PATCH 01/10] add support to clang-cl Signed-off-by: ToKiNoBug --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d162e0e..3d6659fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,7 +244,8 @@ if(KOMPUTE_OPT_INSTALL) set(ENABLE_GLSLANG_INSTALL ON CACHE BOOL "Enables install of glslang" FORCE) endif() -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") +if(MSVC) + # MSVC is true when the compiler is msvc(cl) or clang-cl, both receive msvc-like commandline flags else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Werror") endif() From 1289153e8f6bb29ecca714afb8f83f79b5af2369 Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Thu, 26 Oct 2023 16:43:48 +0800 Subject: [PATCH 02/10] fix find_package behavior Signed-off-by: ToKiNoBug --- CMakeLists.txt | 7 +++++++ cmake/komputeConfig.cmake.in | 2 +- src/CMakeLists.txt | 26 ++++++++++++++++++++++++++ src/logger/CMakeLists.txt | 6 ++++++ src/shaders/glsl/CMakeLists.txt | 5 +++++ 5 files changed, 45 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d6659fc..ec150b3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -285,3 +285,10 @@ endif() if(KOMPUTE_OPT_BUILD_PYTHON) add_subdirectory(python) endif() + +# Many other targets may be exported to komputeTargets in subdirs, so install the export in the last +# Generates komputeTargets.cmake, which is required by komputeConfig.cmake in a find_package call. +install(EXPORT komputeTargets + FILE komputeTargets.cmake + NAMESPACE kompute:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kompute) diff --git a/cmake/komputeConfig.cmake.in b/cmake/komputeConfig.cmake.in index 87e8a99e..77735762 100644 --- a/cmake/komputeConfig.cmake.in +++ b/cmake/komputeConfig.cmake.in @@ -1,7 +1,7 @@ include(CMakeFindDependencyMacro) @PACKAGE_INIT@ -find_dependency(VULKAN REQUIRED) +find_dependency(Vulkan REQUIRED) include(${CMAKE_CURRENT_LIST_DIR}/komputeTargets.cmake) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 79d43cc1..dc00af86 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,6 +31,7 @@ set_target_properties(kompute include(GNUInstallDirs) install(TARGETS kompute + EXPORT komputeTargets # Export kompute to komputeTargets. komputeTargets can hold multiple targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) @@ -86,3 +87,28 @@ endif() add_subdirectory(logger) add_subdirectory(shaders) add_subdirectory(include) + +if (KOMPUTE_OPT_USE_BUILT_IN_FMT) + # We can't export fmt::fmt because it's alias target, so we unwrap the alias and install it. + get_target_property(fmt_aliased_target fmt::fmt ALIASED_TARGET) + install(TARGETS ${fmt_aliased_target} + EXPORT komputeTargets) +endif () +if(KOMPUTE_OPT_USE_BUILT_IN_VULKAN_HEADER) + # We can't export Vulkan::Headers because it's alias target, so we unwrap the alias and install it. + get_target_property(vk_header_target Vulkan::Headers ALIASED_TARGET) + + # Before installation, reset the INTERFACE_INCLUDE_DIRECTORIES to a generator expression + # Otherwise INTERFACE_INCLUDE_DIRECTORIES will point to an absolute path even if the software package + # is copied to another computer. If we don't do this, cmake will complains about it in the configuration step. + # Get the build interface of include dir + get_target_property(vk_header_include_dir ${vk_header_target} INTERFACE_INCLUDE_DIRECTORIES) + #message(STATUS "vk_header_include_dir = ${vk_header_include_dir}") + # Reset INTERFACE_INCLUDE_DIRECTORIES to a generator expression. + set_target_properties(${vk_header_target} + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "$;$") + #message(STATUS "vk_header_include_dir = ${vk_header_include_di r}") + install(TARGETS ${vk_header_target} + EXPORT komputeTargets) +endif () \ No newline at end of file diff --git a/src/logger/CMakeLists.txt b/src/logger/CMakeLists.txt index 1dcc1e6b..7f7c6dae 100644 --- a/src/logger/CMakeLists.txt +++ b/src/logger/CMakeLists.txt @@ -67,3 +67,9 @@ if(NOT KOMPUTE_OPT_LOG_LEVEL_DISABLED) target_link_libraries(kp_logger PUBLIC fmt::fmt) endif() endif() + + +# Nothing will be installed, this will only export kp_logger to komputeTargets +add_library(kompute::logger ALIAS kp_logger) +install(TARGETS kp_logger + EXPORT komputeTargets) \ No newline at end of file diff --git a/src/shaders/glsl/CMakeLists.txt b/src/shaders/glsl/CMakeLists.txt index 3101a2b1..3ee4a1bf 100644 --- a/src/shaders/glsl/CMakeLists.txt +++ b/src/shaders/glsl/CMakeLists.txt @@ -21,6 +21,11 @@ add_library(kp_shader INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/ShaderOpMult.hpp" target_include_directories(kp_shader INTERFACE $) +# Nothing will be installed, this will only export kp_shader to komputeTargets +add_library(kompute::shader ALIAS kp_shader) +install(TARGETS kp_shader + EXPORT komputeTargets) + # Make sure we install shaders: install(FILES $/ShaderOpMult.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(FILES $/ShaderLogisticRegression.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) From 4b36ae709a02939cfa2283a15d47c2b50327fa5a Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Sat, 28 Oct 2023 15:46:05 +0800 Subject: [PATCH 03/10] fix build with external fmtlib (v10) Signed-off-by: ToKiNoBug --- src/Manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Manager.cpp b/src/Manager.cpp index 3c3e1165..eccdbaee 100644 --- a/src/Manager.cpp +++ b/src/Manager.cpp @@ -338,7 +338,7 @@ Manager::createDevice(const std::vector& familyQueueIndices, KP_LOG_INFO("Using physical device index {} found {}", physicalDeviceIndex, - physicalDeviceProperties.deviceName); + physicalDeviceProperties.deviceName.data()); if (familyQueueIndices.empty()) { // Find compute queue From 9f892f1a8ebb5df01417825c2b60086691447fcd Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Sat, 28 Oct 2023 19:08:58 +0800 Subject: [PATCH 04/10] enable CPack for this project Signed-off-by: ToKiNoBug --- CMakeLists.txt | 3 ++ cmake/set_package_info.cmake | 54 ++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 cmake/set_package_info.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index ec150b3f..d4849790 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -292,3 +292,6 @@ install(EXPORT komputeTargets FILE komputeTargets.cmake NAMESPACE kompute:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kompute) + + +include(cmake/set_package_info.cmake) \ No newline at end of file diff --git a/cmake/set_package_info.cmake b/cmake/set_package_info.cmake new file mode 100644 index 00000000..5131f6cd --- /dev/null +++ b/cmake/set_package_info.cmake @@ -0,0 +1,54 @@ +# This file is to setup information for cpack +# CPack is a package tool distributed with cmake. +# For details about CPack, see https://cmake.org/cmake/help/book/mastering-cmake/chapter/Packaging%20With%20CPack.html + + +# Common variables for all generators +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CPACK_PACKAGE_NAME "kompute-debug") +else() + set(CPACK_PACKAGE_NAME "kompute") +endif () +set(CPACK_PACKAGE_VENDOR "KomputeProject") +set(CPACK_PACKAGE_DESCRIPTION "General purpose GPU compute framework built on Vulkan to support 1000s of cross vendor graphics cards (AMD, Qualcomm, NVIDIA & friends). Blazing fast, mobile-enabled, asynchronous and optimized for advanced GPU data processing usecases. Backed by the Linux Foundation. ") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GPGPU framework built on Vulkan.") +set(CPACK_PACKAGE_HOMEPAGE_URL "https://kompute.cc/") + +# Other common variables, in most cases they are not used, +# otherwise their default values are ok. +# Also see https://cmake.org/cmake/help/v3.20/module/CPack.html +# +# set(CPACK_PACKAGE_DIRECTORY) +# set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) +# set(CPACK_PACKAGE_DIRECTORY) +# set(CPACK_PACKAGE_VERSION_MAJOR) +# set(CPACK_PACKAGE_VERSION_MINOR) +# set(CPACK_PACKAGE_VERSION_PATCH) +# set(CPACK_PACKAGE_DESCRIPTION_FILE) +# set(CPACK_PACKAGE_FILE_NAME) +# set(CPACK_PACKAGE_INSTALL_DIRECTORY) +# set(CPACK_PACKAGE_ICON) +# set(CPACK_PACKAGE_CHECKSUM) +# set(CPACK_PROJECT_CONFIG_FILE) +# set(CPACK_RESOURCE_FILE_LICENSE) +# set(CPACK_RESOURCE_FILE_README) +# set(CPACK_RESOURCE_FILE_WELCOME) +# set(CPACK_MONOLITHIC_INSTALL) +# set(CPACK_GENERATOR) +# set(CPACK_OUTPUT_CONFIG_FILE) +# set(CPACK_PACKAGE_EXECUTABLES) +# set(CPACK_STRIP_FILES) +# set(CPACK_VERBATIM_VARIABLES) +# set(CPACK_THREADS) + + + +# Setup detailed package info for any cpack generator. +# Each file correspond to a cpack generator +file(GLOB config_files "${CMAKE_SOURCE_DIR}/cmake/cpack-configs/*.cmake") +foreach (config_file ${config_files}) + include(${config_file}) +endforeach () + +# This should be include at last, and all unset cpack variables will be setup to their default value. +include(CPack) \ No newline at end of file From afdc47fd2e20985286848b7ee53996c6be397d41 Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Sat, 28 Oct 2023 19:32:25 +0800 Subject: [PATCH 05/10] fix KOMPUTE_OPT_INSTALL Signed-off-by: ToKiNoBug --- CMakeLists.txt | 22 +++++++---- src/CMakeLists.txt | 69 ++++++++++++++++++--------------- src/include/CMakeLists.txt | 4 +- src/logger/CMakeLists.txt | 6 ++- src/shaders/glsl/CMakeLists.txt | 12 +++--- 5 files changed, 66 insertions(+), 47 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d4849790..837c1ef9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,12 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}") set(KOMPUTE_LIBRARIES kompute CACHE INTERNAL "") +if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + set(kompute_opt_install_default_val ON) +else () + set(kompute_opt_install_default_val OFF) +endif () + # #################################################### # Options # #################################################### @@ -84,7 +90,7 @@ message(STATUS "=======================================================") kompute_option(KOMPUTE_OPT_BUILD_TESTS "Enable if you want to build tests." OFF) kompute_option(KOMPUTE_OPT_CODE_COVERAGE "Enable if you want code coverage." OFF) kompute_option(KOMPUTE_OPT_BUILD_DOCS "Enable if you want to build documentation." OFF) -kompute_option(KOMPUTE_OPT_INSTALL "Enable if you want to enable installation." OFF) +kompute_option(KOMPUTE_OPT_INSTALL "Enable if you want to enable installation." ${kompute_opt_install_default_val}) # Build options kompute_option(KOMPUTE_OPT_BUILD_PYTHON "Enable if you want to build python bindings." OFF) @@ -286,12 +292,14 @@ if(KOMPUTE_OPT_BUILD_PYTHON) add_subdirectory(python) endif() -# Many other targets may be exported to komputeTargets in subdirs, so install the export in the last -# Generates komputeTargets.cmake, which is required by komputeConfig.cmake in a find_package call. -install(EXPORT komputeTargets - FILE komputeTargets.cmake - NAMESPACE kompute:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kompute) +if(KOMPUTE_OPT_INSTALL) + # Many other targets may be exported to komputeTargets in subdirs, so install the export in the last + # Generates komputeTargets.cmake, which is required by komputeConfig.cmake in a find_package call. + install(EXPORT komputeTargets + FILE komputeTargets.cmake + NAMESPACE kompute:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kompute) +endif() include(cmake/set_package_info.cmake) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index dc00af86..dfb56a81 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -29,12 +29,13 @@ set_target_properties(kompute # Import GNU common install directory variables include(GNUInstallDirs) - -install(TARGETS kompute - EXPORT komputeTargets # Export kompute to komputeTargets. komputeTargets can hold multiple targets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) +if(KOMPUTE_OPT_INSTALL) + install(TARGETS kompute + EXPORT komputeTargets # Export kompute to komputeTargets. komputeTargets can hold multiple targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) +endif() # Include CMake helpers for package config files # Follow this installation guideline: https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html @@ -52,8 +53,10 @@ write_basic_package_version_file( COMPATIBILITY SameMajorVersion# All possible values: SameMajorVersion, SameMinorVersion, ExactVersion, AnyNewerVersion ) -install(FILES ${PROJECT_BINARY_DIR}/kompute/komputeConfig.cmake - ${PROJECT_BINARY_DIR}/kompute/komputeConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kompute) +if(KOMPUTE_OPT_INSTALL) + install(FILES ${PROJECT_BINARY_DIR}/kompute/komputeConfig.cmake + ${PROJECT_BINARY_DIR}/kompute/komputeConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kompute) +endif() # #################################################### # Linking @@ -88,27 +91,29 @@ add_subdirectory(logger) add_subdirectory(shaders) add_subdirectory(include) -if (KOMPUTE_OPT_USE_BUILT_IN_FMT) - # We can't export fmt::fmt because it's alias target, so we unwrap the alias and install it. - get_target_property(fmt_aliased_target fmt::fmt ALIASED_TARGET) - install(TARGETS ${fmt_aliased_target} - EXPORT komputeTargets) -endif () -if(KOMPUTE_OPT_USE_BUILT_IN_VULKAN_HEADER) - # We can't export Vulkan::Headers because it's alias target, so we unwrap the alias and install it. - get_target_property(vk_header_target Vulkan::Headers ALIASED_TARGET) - - # Before installation, reset the INTERFACE_INCLUDE_DIRECTORIES to a generator expression - # Otherwise INTERFACE_INCLUDE_DIRECTORIES will point to an absolute path even if the software package - # is copied to another computer. If we don't do this, cmake will complains about it in the configuration step. - # Get the build interface of include dir - get_target_property(vk_header_include_dir ${vk_header_target} INTERFACE_INCLUDE_DIRECTORIES) - #message(STATUS "vk_header_include_dir = ${vk_header_include_dir}") - # Reset INTERFACE_INCLUDE_DIRECTORIES to a generator expression. - set_target_properties(${vk_header_target} - PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "$;$") - #message(STATUS "vk_header_include_dir = ${vk_header_include_di r}") - install(TARGETS ${vk_header_target} - EXPORT komputeTargets) -endif () \ No newline at end of file +if(KOMPUTE_OPT_INSTALL) + if (KOMPUTE_OPT_USE_BUILT_IN_FMT) + # We can't export fmt::fmt because it's alias target, so we unwrap the alias and install it. + get_target_property(fmt_aliased_target fmt::fmt ALIASED_TARGET) + install(TARGETS ${fmt_aliased_target} + EXPORT komputeTargets) + endif () + if(KOMPUTE_OPT_USE_BUILT_IN_VULKAN_HEADER) + # We can't export Vulkan::Headers because it's alias target, so we unwrap the alias and install it. + get_target_property(vk_header_target Vulkan::Headers ALIASED_TARGET) + + # Before installation, reset the INTERFACE_INCLUDE_DIRECTORIES to a generator expression + # Otherwise INTERFACE_INCLUDE_DIRECTORIES will point to an absolute path even if the software package + # is copied to another computer. If we don't do this, cmake will complains about it in the configuration step. + # Get the build interface of include dir + get_target_property(vk_header_include_dir ${vk_header_target} INTERFACE_INCLUDE_DIRECTORIES) + #message(STATUS "vk_header_include_dir = ${vk_header_include_dir}") + # Reset INTERFACE_INCLUDE_DIRECTORIES to a generator expression. + set_target_properties(${vk_header_target} + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "$;$") + #message(STATUS "vk_header_include_dir = ${vk_header_include_di r}") + install(TARGETS ${vk_header_target} + EXPORT komputeTargets) + endif () +endif() \ No newline at end of file diff --git a/src/include/CMakeLists.txt b/src/include/CMakeLists.txt index e8aea8bf..046deea5 100644 --- a/src/include/CMakeLists.txt +++ b/src/include/CMakeLists.txt @@ -27,7 +27,9 @@ target_sources(kompute PRIVATE kompute/logger/Logger.hpp ) -install(DIRECTORY kompute DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if(KOMPUTE_OPT_INSTALL) + install(DIRECTORY kompute DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() # #################################################### # Logger diff --git a/src/logger/CMakeLists.txt b/src/logger/CMakeLists.txt index 7f7c6dae..1f9b49ab 100644 --- a/src/logger/CMakeLists.txt +++ b/src/logger/CMakeLists.txt @@ -71,5 +71,7 @@ endif() # Nothing will be installed, this will only export kp_logger to komputeTargets add_library(kompute::logger ALIAS kp_logger) -install(TARGETS kp_logger - EXPORT komputeTargets) \ No newline at end of file +if(KOMPUTE_OPT_INSTALL) + install(TARGETS kp_logger + EXPORT komputeTargets) +endif() \ No newline at end of file diff --git a/src/shaders/glsl/CMakeLists.txt b/src/shaders/glsl/CMakeLists.txt index 3ee4a1bf..1453174e 100644 --- a/src/shaders/glsl/CMakeLists.txt +++ b/src/shaders/glsl/CMakeLists.txt @@ -23,9 +23,11 @@ target_include_directories(kp_shader INTERFACE $/ShaderOpMult.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -install(FILES $/ShaderLogisticRegression.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + # Make sure we install shaders: + install(FILES $/ShaderOpMult.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(FILES $/ShaderLogisticRegression.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() From fff1c7f01eaff8a19f61f0b957115f63299c1439 Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Sat, 28 Oct 2023 20:03:49 +0800 Subject: [PATCH 06/10] Add support to generate DEB and archive packages Signed-off-by: ToKiNoBug --- cmake/cpack-configs/archive.cmake | 12 ++++++++ cmake/cpack-configs/deb.cmake | 50 +++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 cmake/cpack-configs/archive.cmake create mode 100644 cmake/cpack-configs/deb.cmake diff --git a/cmake/cpack-configs/archive.cmake b/cmake/cpack-configs/archive.cmake new file mode 100644 index 00000000..5f458173 --- /dev/null +++ b/cmake/cpack-configs/archive.cmake @@ -0,0 +1,12 @@ +# This file is for generating archive packages. +# Up to v3.20, CPack supports .7z, .tar.bz2, .tar.gz, .tar.xz, .tar.z, .tar.zst and .zip +# For details, see https://cmake.org/cmake/help/v3.20/cpack_gen/archive.html + +# The number of available cores on the machine will be used to compress +# Only available for tar.xz. +set(CPACK_ARCHIVE_THREADS 0) + +# Other variables: +# set(CPACK_ARCHIVE_FILE_NAME) +# set(CPACK_ARCHIVE__FILE_NAME) +# set(CPACK_ARCHIVE_COMPONENT_INSTALL) \ No newline at end of file diff --git a/cmake/cpack-configs/deb.cmake b/cmake/cpack-configs/deb.cmake new file mode 100644 index 00000000..62e9e6ff --- /dev/null +++ b/cmake/cpack-configs/deb.cmake @@ -0,0 +1,50 @@ +# This file is for generating .deb packages for debian Linux + +# Here are all variables for deb generators. +# Commented variables are not used, or their default values are ok. +# Also see https://cmake.org/cmake/help/v3.20/cpack_gen/deb.html + +# Kompute depends on the vulkan development package +set(CPACK_DEBIAN_PACKAGE_DEPENDS "libvulkan-dev") +# set(CPACK_DEBIAN__PACKAGE_DEPENDS) + +# The maintainer of this deb package +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "axsaucedo") + + +# These variables may be used. +# set(CPACK_DEBIAN_ARCHIVE_TYPE) # The archive format used for creating the Debian package. +# set(CPACK_DEBIAN_COMPRESSION_TYPE) # Possible values: lzma, xz, bzip2, gzip. gzip by default. + +# Set Priority control field e.g. required, important, standard, optional, extra. Default value is optional. +# set(CPACK_DEBIAN_PACKAGE_PRIORITY) +# set(CPACK_DEBIAN__PACKAGE_PRIORITY) + +# Predepends is like depends, but it forces dpkg to complete installation of predepend packages even before starting +# the installation of our package. +# set(CPACK_DEBIAN_PACKAGE_PREDEPENDS) +# set(CPACK_DEBIAN__PACKAGE_PREDEPENDS) + +# Recommend other packages after user installs our package +# set(CPACK_DEBIAN_PACKAGE_RECOMMENDS) +# set(CPACK_DEBIAN__PACKAGE_RECOMMENDS) + +# Suggest other packages before user installs our package +# set(CPACK_DEBIAN_PACKAGE_SUGGESTS) +# set(CPACK_DEBIAN__PACKAGE_SUGGESTS) + +# Packages that will be broken by our package +# set(CPACK_DEBIAN_PACKAGE_BREAKS) +# set(CPACK_DEBIAN__PACKAGE_BREAKS) + +# Packages that conflicts with our package +# set(CPACK_DEBIAN_PACKAGE_CONFLICTS) +# set(CPACK_DEBIAN__PACKAGE_CONFLICTS) + +# Used for virtual packages +# set(CPACK_DEBIAN_PACKAGE_PROVIDES) +# set(CPACK_DEBIAN__PACKAGE_PROVIDES) + +# Packages that should be overwritten by our package +# set(CPACK_DEBIAN_PACKAGE_REPLACES) +# set(CPACK_DEBIAN__PACKAGE_REPLACES) \ No newline at end of file From cb12f08ce062722c51c5869b5997a6f929103a19 Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Sat, 28 Oct 2023 20:47:18 +0800 Subject: [PATCH 07/10] Fix python build Signed-off-by: ToKiNoBug --- src/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index dfb56a81..9e363504 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -98,6 +98,7 @@ if(KOMPUTE_OPT_INSTALL) install(TARGETS ${fmt_aliased_target} EXPORT komputeTargets) endif () + if(KOMPUTE_OPT_USE_BUILT_IN_VULKAN_HEADER) # We can't export Vulkan::Headers because it's alias target, so we unwrap the alias and install it. get_target_property(vk_header_target Vulkan::Headers ALIASED_TARGET) @@ -116,4 +117,11 @@ if(KOMPUTE_OPT_INSTALL) install(TARGETS ${vk_header_target} EXPORT komputeTargets) endif () + + if(KOMPUTE_OPT_BUILD_PYTHON) + # We can't export pybind11::headers because it's alias target, so we unwrap the alias and install it. + get_target_property(pybind11_aliased_target pybind11::headers ALIASED_TARGET) + install(TARGETS ${pybind11_aliased_target} + EXPORT komputeTargets) + endif () endif() \ No newline at end of file From 3b0f647948833c2d567bd728d254109dd7651a4d Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Mon, 30 Oct 2023 13:05:04 +0800 Subject: [PATCH 08/10] Update builtin fmt version to 10.1.1 Signed-off-by: ToKiNoBug --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 837c1ef9..591c696f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -183,7 +183,7 @@ endif() if(KOMPUTE_OPT_USE_BUILT_IN_FMT) set(FMT_INSTALL ${KOMPUTE_OPT_INSTALL}) FetchContent_Declare(fmt GIT_REPOSITORY https://github.com/fmtlib/fmt.git - GIT_TAG 8.1.1) # Source: https://github.com/fmtlib/fmt/releases + GIT_TAG 10.1.1) # Source: https://github.com/fmtlib/fmt/releases FetchContent_MakeAvailable(fmt) else() find_package(fmt REQUIRED) From 1927618ced861b8d4c8ef6ab6873c539958e1d00 Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Mon, 30 Oct 2023 19:33:46 +0800 Subject: [PATCH 09/10] Fix windows build with builtin fmt v10 Signed-off-by: ToKiNoBug --- src/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9e363504..79d2cab4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -96,7 +96,11 @@ if(KOMPUTE_OPT_INSTALL) # We can't export fmt::fmt because it's alias target, so we unwrap the alias and install it. get_target_property(fmt_aliased_target fmt::fmt ALIASED_TARGET) install(TARGETS ${fmt_aliased_target} - EXPORT komputeTargets) + EXPORT komputeTargets + #COMPONENT DO_NOT_INSTALL_THIS + EXCLUDE_FROM_ALL) + # Installation of headers changed in fmt from v8 to v10. In v10, cmake will try to find fmt headers in the + # include dir of kompute, which will fail definitely. Add EXCLUDE_FROM_ALL to avoid this bug. endif () if(KOMPUTE_OPT_USE_BUILT_IN_VULKAN_HEADER) From 032c64f72c05334bec3c9855811a079b38bdef49 Mon Sep 17 00:00:00 2001 From: ToKiNoBug Date: Mon, 30 Oct 2023 19:54:09 +0800 Subject: [PATCH 10/10] Enable CPack to make NSIS installer for windows Signed-off-by: ToKiNoBug --- cmake/cpack-configs/nsis.cmake | 27 +++++++++++++++++++++++++++ cmake/set_package_info.cmake | 8 ++++++++ docs/images/kompute.ico | Bin 0 -> 4286 bytes 3 files changed, 35 insertions(+) create mode 100644 cmake/cpack-configs/nsis.cmake create mode 100644 docs/images/kompute.ico diff --git a/cmake/cpack-configs/nsis.cmake b/cmake/cpack-configs/nsis.cmake new file mode 100644 index 00000000..9cbc64a1 --- /dev/null +++ b/cmake/cpack-configs/nsis.cmake @@ -0,0 +1,27 @@ +# This file is for generating .exe installer (NSIS) for Windows + +# Here are all variables for NSIS generators. +# Commented variables are not used, or their default values are ok. +# Also see https://cmake.org/cmake/help/v3.20/cpack_gen/nsis.html + +# The compressing method. Supported values: ZLIB, BZIP2 and LZMA +set(CPACK_NSIS_COMPRESSOR "LZMA") + +# The name appears in Windows Apps & features in Control Panel +set(CPACK_NSIS_DISPLAY_NAME "Kompute") + +# Ask the user whether to uninstall the previous versions +set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) + +# The icon of exe installer +set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/docs/images/kompute.ico") + +# The icon of exe uninstaller +set(CPACK_NSIS_MUI_UNIICON ${CPACK_NSIS_MUI_ICON}) + +set(CPACK_NSIS_URL_INFO_ABOUT "https://kompute.cc") +set(CPACK_NSIS_HELP_LINK "https://kompute.cc/overview/community.html") + +#set(CPACK_NSNS_CONTACT) +#set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP) +#set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP) \ No newline at end of file diff --git a/cmake/set_package_info.cmake b/cmake/set_package_info.cmake index 5131f6cd..a2c76e1a 100644 --- a/cmake/set_package_info.cmake +++ b/cmake/set_package_info.cmake @@ -14,6 +14,14 @@ set(CPACK_PACKAGE_DESCRIPTION "General purpose GPU compute framework built on Vu set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GPGPU framework built on Vulkan.") set(CPACK_PACKAGE_HOMEPAGE_URL "https://kompute.cc/") +# The license file used by GUI installers +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") +# The readme file used by GUI installers +set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") + +set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}\\\\${PROJECT_VERSION}") +# set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/docs/images/kompute.jpg") + # Other common variables, in most cases they are not used, # otherwise their default values are ok. # Also see https://cmake.org/cmake/help/v3.20/module/CPack.html diff --git a/docs/images/kompute.ico b/docs/images/kompute.ico new file mode 100644 index 0000000000000000000000000000000000000000..bb38438330715759d704df6e5080f1091bd17866 GIT binary patch literal 4286 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 g8j~b~?_t4*t4H{ppCr2Y1|}ao|L6Y?_