From 80ff9f279d7d4afbb4761dcd77f713259a77441d Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Sun, 1 Nov 2020 12:20:37 +0000 Subject: [PATCH] Updated base builds to work with local repo as well as with vcpkg --- CMakeLists.txt | 7 ++++--- Makefile | 12 ++++++++---- src/CMakeLists.txt | 21 ++++++++++++++++++--- test/CMakeLists.txt | 21 +++++++++++++++++---- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c374887ca..52e45fcf9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,12 +11,13 @@ option(KOMPUTE_OPT_BUILD_TESTS "Enable if you want to build tests" 0) option(KOMPUTE_OPT_BUILD_DOCS "Enable if you want to build documentation" 0) option(KOMPUTE_OPT_BUILD_SHADERS "Enable if you want to re-build all shader files" 0) option(KOMPUTE_OPT_BUILD_SINGLE_HEADER "Enable if you want to build the single header file" 0) -option(KOMPUTE_OPT_INSTALL "Enable if you want to enable installation" 1) +option(KOMPUTE_OPT_INSTALL "Enable if you want to enable installation" 0) +# Build options option(KOMPUTE_OPT_ENABLE_SPDLOG "Extra compile flags for Kompute, see docs for full list" 0) +option(KOMPUTE_OPT_REPO_SUBMODULE_BUILD, "Use the submodule repos instead of external package manager" 0) option(KOMPUTE_OPT_ANDOID_BUILD "Enable android compilation flags required" 0) -# TODO: Add on docs option(KOMPUTE_OPT_DISABLE_VK_DEBUG_LAYERS "Explicitly disable debug layers even on debug" 0) - +# Build flags set(KOMPUTE_EXTRA_CXX_FLAGS "" CACHE STRING "Extra compile flags for Kompute, see docs for full list") if(KOMPUTE_OPT_ENABLE_SPDLOG) diff --git a/Makefile b/Makefile index 08c9fb090..2ed2c457d 100755 --- a/Makefile +++ b/Makefile @@ -48,16 +48,18 @@ MK_KOMPUTE_EXTRA_CXX_FLAGS ?= "" mk_cmake: cmake \ -Bbuild \ + $(MK_CMAKE_EXTRA_FLAGS) \ + -DCMAKE_TOOLCHAIN_FILE=$(VCPKG_UNIX_PATH) \ -DCMAKE_BUILD_TYPE=$(MK_BUILD_TYPE) \ -DCMAKE_INSTALL_PREFIX=$(MK_INSTALL_PATH) \ - -DCMAKE_TOOLCHAIN_FILE=$(VCPKG_UNIX_PATH) \ -DKOMPUTE_EXTRA_CXX_FLAGS=$(MK_KOMPUTE_EXTRA_CXX_FLAGS) \ + -DKOMPUTE_OPT_INSTALL=1 \ + -DKOMPUTE_OPT_REPO_SUBMODULE_BUILD=0 \ -DKOMPUTE_OPT_BUILD_TESTS=1 \ -DKOMPUTE_OPT_BUILD_DOCS=1 \ -DKOMPUTE_OPT_BUILD_SHADERS=1 \ -DKOMPUTE_OPT_BUILD_SINGLE_HEADER=1 \ -DKOMPUTE_OPT_ENABLE_SPDLOG=1 \ - $(MK_CMAKE_EXTRA_FLAGS) \ -G "Unix Makefiles" mk_build_all: @@ -84,16 +86,18 @@ mk_run_tests: mk_build_tests VS_BUILD_TYPE ?= "Debug" # Run with multiprocessin / parallel build by default VS_CMAKE_EXTRA_FLAGS ?= "" -VS_KOMPUTE_EXTRA_CXX_FLAGS ?= "/MP" # Adding multiprocessing by default +VS_KOMPUTE_EXTRA_CXX_FLAGS ?= "/MP" # Adding multiprocessing by default. You should add "/MT" for submodule builds for compatibility with gtest VS_INSTALL_PATH ?= "build/src/CMakeFiles/Export/" # Set to "" if prefer default vs_cmake: $(CMAKE_BIN) \ -Bbuild \ - -DCMAKE_TOOLCHAIN_FILE=$(VCPKG_WIN_PATH) \ $(VS_CMAKE_EXTRA_FLAGS) \ + -DCMAKE_TOOLCHAIN_FILE=$(VCPKG_WIN_PATH) \ -DKOMPUTE_EXTRA_CXX_FLAGS=$(VS_KOMPUTE_EXTRA_CXX_FLAGS) \ -DCMAKE_INSTALL_PREFIX=$(VS_INSTALL_PATH) \ + -DKOMPUTE_OPT_INSTALL=1 \ + -DKOMPUTE_OPT_REPO_SUBMODULE_BUILD=0 \ -DKOMPUTE_OPT_BUILD_TESTS=1 \ -DKOMPUTE_OPT_BUILD_DOCS=1 \ -DKOMPUTE_OPT_BUILD_SHADERS=1 \ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index dead02a4c..6161b782b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,13 +1,19 @@ if(KOMPUTE_OPT_ENABLE_SPDLOG) - find_package(spdlog REQUIRED) - find_package(fmt REQUIRED) + if(KOMPUTE_OPT_REPO_SUBMODULE_BUILD) + set(SPDLOG_INSTALL ON) + add_subdirectory(${PROJECT_SOURCE_DIR}/external/spdlog ${CMAKE_CURRENT_BINARY_DIR}/kompute_spdlog) + else() + find_package(spdlog REQUIRED) + endif() endif() if(KOMPUTE_OPT_ANDOID_BUILD) find_library(android android) endif() +# We don't import Vulkan library if Android build as its build dynamically +# Otherwise it is expected that the Vulkan SDK and dependencies are installed if(NOT KOMPUTE_OPT_ANDOID_BUILD) find_package(Vulkan REQUIRED) endif() @@ -62,10 +68,19 @@ else() ) endif() +if(KOMPUTE_OPT_REPO_SUBMODULE_BUILD) +# Override the default Vulkan::Vulkan headers +# In this case we only use the build interface due to https://github.com/KhronosGroup/Vulkan-Headers/issues/157 + add_subdirectory(${PROJECT_SOURCE_DIR}/external/Vulkan-Headers ${CMAKE_CURRENT_BINARY_DIR}/kompute_vulkan_headers) + get_target_property(VULKAN_HEADERS_INCLUDES Vulkan-Headers INTERFACE_INCLUDE_DIRECTORIES) + target_include_directories( + kompute PUBLIC + $) +endif() + if(KOMPUTE_OPT_ENABLE_SPDLOG) target_link_libraries( kompute - fmt::fmt spdlog::spdlog ) endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 904e7b4f2..f6b04df96 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,6 +1,11 @@ enable_testing() -find_package(GTest CONFIG REQUIRED) +if(KOMPUTE_OPT_REPO_SUBMODULE_BUILD) + add_subdirectory(${PROJECT_SOURCE_DIR}/external/googletest EXCLUDE_FROM_ALL + ${CMAKE_CURRENT_BINARY_DIR}/kompute_googletest) +else() + find_package(GTest CONFIG REQUIRED) +endif() file(GLOB test_kompute_CPP "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" @@ -14,9 +19,17 @@ target_include_directories( $ ) -target_link_libraries(test_kompute PRIVATE - GTest::gtest - GTest::gmock) +if(KOMPUTE_OPT_REPO_SUBMODULE_BUILD) + target_include_directories( + test_kompute PRIVATE + ${gtest_SOURCE_DIR}/include) + + target_link_libraries(test_kompute PRIVATE + gtest_main) +else() + target_link_libraries(test_kompute PRIVATE + GTest::gtest) +endif() target_link_libraries(test_kompute PRIVATE kompute)