diff --git a/CMakeLists.txt b/CMakeLists.txt index 237d1c7dd..946c808aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,13 @@ -cmake_minimum_required(VERSION 3.16) -list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) +cmake_minimum_required(VERSION 3.20) +include_directories(cmake) #WORKAROUND needed for find_package(Vulkan) for Vulkan SDK + +# Check for Vulkan SDK env var and prepend it to CMAKE_PREFIX_PATH if set to prefer Vulkan SDK packages if available + if(DEFINED ENV{VULKAN_SDK}) + message("Detected and using VULKAN_SDK at $ENV{VULKAN_SDK}") + cmake_path(CONVERT "$ENV{VULKAN_SDK}" TO_CMAKE_PATH_LIST VULKAN_SDK_PATH NORMALIZE) + list(PREPEND CMAKE_PREFIX_PATH ${VULKAN_SDK_PATH}) + endif() + project(ngscopeclient) include(CTest) @@ -7,6 +15,7 @@ include(CTest) # Configuration settings set(BUILD_DOCS CACHE BOOL "Build the documentation") set(ANALYZE CACHE BOOL "Run static analysis on the code, requires cppcheck and clang-analyzer to be installed") +set(DISABLE_PCH CACHE BOOL "Disable precompiled headers as this may break certain configurations") set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # error if compiler doesn't support c++17 @@ -17,18 +26,19 @@ set(WARNINGS "-Wall -Wextra -Wuninitialized ") set(WARNINGS "${WARNINGS} -Wshadow -Wpedantic -Wcast-align -Wwrite-strings") set(WARNINGS "${WARNINGS} -Wmissing-declarations -Wvla") +# Compiler warnings if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(WARNINGS "${WARNINGS} ") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") set(WARNINGS "${WARNINGS} -Wno-gnu-zero-variadic-macro-arguments -Wno-unknown-warning-option") endif() - set(CMAKE_CXX_FLAGS "-g ${WARNINGS} -mtune=native -fsigned-char") set(CMAKE_CXX_FLAGS_RELEASE "-O3") +# Default build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") -endif(NOT CMAKE_BUILD_TYPE) +endif() if(SANITIZE) set(CMAKE_CXX_FLAGS_DEBUG "-O0 -fsanitize=address -D_DEBUG") @@ -40,78 +50,124 @@ if(WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_USE_MATH_DEFINES -D_POSIX_THREAD_SAFE_FUNCTIONS") endif() +# Detect Apple Silicon as FFTS is not available for it if(APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_APPLE_SILICON") set(APPLE_SILICON TRUE) endif() + # Git is used for git-describe based version generation if we have it find_package(Git) # Package detection -# (we still use gtk on Linux for the file browser dialog in "native" mode) -find_package(PkgConfig) + +find_package(PkgConfig MODULE REQUIRED) + +# yaml-cpp is used in scopehal and ngscopeclient +find_package(yaml-cpp REQUIRED) +#WORKAROUND Needed for Debian Bullseye, which does not provide a yaml-cpp::yaml-cpp target +if(NOT TARGET yaml-cpp::yaml-cpp) + find_library(YAML_CPP_LIBRARIES_FILES NAMES ${YAML_CPP_LIBRARIES}) + if(YAML_CPP_LIBRARIES_FILES MATCHES ".so$") + add_library(yaml-cpp::yaml-cpp SHARED IMPORTED) + elseif(YAML_CPP_LIBRARIES_FILES MATCHES ".a$") + add_library(yaml-cpp::yaml-cpp STATIC IMPORTED) + else() + message(FATAL_ERROR "Unexpected partially-installed yaml-cpp, is it installed correctly?") + endif() + set_property(TARGET yaml-cpp::yaml-cpp PROPERTY IMPORTED_LOCATION ${YAML_CPP_LIBRARIES_FILES}) + #WORKAROUND The cmake file for yaml-cpp on debian bullseye is broken and provides a wrong YAML_CPP_INCLUDE_DIR + find_path(YAML_CPP_INCLUDEFILES_DIR yaml-cpp/yaml.h REQUIRED) + cmake_path(GET YAML_CPP_INCLUDEFILES_DIR PARENT_PATH YAML_CPP_INCLUDE_DIR) + set_property(TARGET yaml-cpp::yaml-cpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${YAML_CPP_INCLUDEFILES_DIR}) +endif() + +# cairomm is used by EyeMask pkg_check_modules(CAIROMM REQUIRED cairomm-1.0) pkg_check_modules(SIGCXX REQUIRED sigc++-2.0) + +# We still use gtk on Linux for the file browser dialog in "native" mode) if(LINUX) pkg_check_modules(GTK REQUIRED gtk+-3.0) endif() + +# find ffts, except on Apple Silicon where it's not supported if(NOT APPLE_SILICON) - find_package(FFTS) + # ffts ships a broken pkgconfig file on some platforms so we are not going to use it + find_path(LIBFFTS_INCLUDE_DIRS ffts.h PATH_SUFFIXES ffts REQUIRED) + find_library(LIBFFTS_LIBRARIES NAMES ffts libffts REQUIRED) endif() -include(FindOpenMP) -find_package(glfw3 3.2 REQUIRED) -# Use the local FindVulkan script until we can rely on all users having CMake 3.24 available, at which point we can remove it -set(Vulkan_FIND_COMPONENTS glslang shaderc_combined) -include(FindVulkan) +#WORKAROUND Fedora 38 does not include Threads from the glslang .cmake file, fixed in Fedora 39+ +find_package(Threads MODULE REQUIRED) -if(NOT Vulkan_FOUND) - message(FATAL_ERROR "No Vulkan SDK found.") +# Configure and enable OpenMP +find_package(OpenMP MODULE) +if(NOT OpenMP_CXX_FOUND) + message(FATAL_ERROR "ngscopeclient requires OpenMP but your C++ compiler does not appear to support it.") endif() +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") -if(NOT Vulkan_glslc_FOUND) - message(FATAL_ERROR "No Vulkan glslc found. This is needed to compile shaders.") +# GLFW is required +find_package(glfw3 3.2 REQUIRED) + +# Find Vulkan-related packages +#WORKAROUND glslang does not look for SPIRV-Tools-opt but needs it on macOS, harmless elsewhere +find_package(SPIRV-Tools-opt REQUIRED) +if(DEFINED VULKAN_SDK_PATH) + #WORKAROUND The Vulkan SDK ships incomplete cmake config files. + # Work around this, which does require FindVulkan.cmake. + # FindVulkan does not find glslang correctly on macOS + find_package(Vulkan REQUIRED COMPONENTS glslc shaderc_combined SPIRV-Tools) + find_package(glslang REQUIRED) + add_library(Vulkan::Loader ALIAS Vulkan::Vulkan) +else() + find_package(glslang REQUIRED) + find_package(VulkanHeaders REQUIRED) + find_package(VulkanLoader QUIET) + if(NOT VulkanLoader_FOUND) #WORKAROUND Alpine Linux has missing cmake files for VulkanLoader + find_library(VulkanLoader_LIB libvulkan.so REQUIRED) + cmake_path(GET VulkanLoader_LIB FILENAME VulkanLoader_LIB_NAME) + add_library(Vulkan::Loader SHARED IMPORTED) + set_property(TARGET Vulkan::Loader PROPERTY IMPORTED_LOCATION ${VulkanLoader_LIB}) + endif() endif() +# The following should work regardless of Vulkan SDK or individual components +# shaderc does not provide a .cmake file, but does provide a pkgconfig file +# pkgconfig file is not provided by Vulkan SDK, however +pkg_check_modules(SHADERC shaderc QUIET) +# This is needed due to shaderc not providing a programmatic way to derive the path of the glslc executable +if(SHADERC_FOUND) + cmake_path(GET SHADERC_INCLUDE_DIRS PARENT_PATH SHADERC_PREFIX) +endif() +# This should find glslc from either shaderc or the Vulkan SDK +find_program(Vulkan_GLSLC_EXECUTABLE glslc HINTS SHADERC_PREFIX) -# Add specific VulkanSDK Lib & Include for glslang (tested on Linux Ubuntu 22.04 LTS) -if(NOT WIN32) - include_directories($ENV{VULKAN_SDK}/include/glslang/Include) - link_directories($ENV{VULKAN_SDK}/lib) +if(NOT Vulkan_GLSLC_EXECUTABLE) + message(FATAL_ERROR "glslc not found. This is needed to compile shaders. Please install shaderc or load the Vulkan SDK.") +else() + message("-- Found glslc: ${Vulkan_GLSLC_EXECUTABLE}") endif() -# Includes are incomplete in VulkanSDK 1.3.224.1 so we use the include path from MINGW64 mingw-w64-x86_64-glslang -if(WIN32) - find_path(Glslang_BUILD_INCLUDE_DIR - NAMES include/glslang/Include/glslang_c_interface.h - HINTS - $ENV{GLSLANG_BUILD_PATH} - ) - mark_as_advanced(Glslang_BUILD_INCLUDE_DIR) - - if(Glslang_BUILD_INCLUDE_DIR) - include_directories($ENV{GLSLANG_BUILD_PATH}/include/glslang/Include) - else() - message(FATAL_ERROR "Glslang_BUILD_INCLUDE_DIR Not found") +# This is needed due to VkFFT not using a standard path for glslang_c_interface.h +get_target_property(glslang_INCLUDE_DIR glslang::glslang INTERFACE_INCLUDE_DIRECTORIES) +# Find MoltenVK on macOS, no need to link it later +if(APPLE) + find_library(MOLTENVK_LIBRARIES NAMES MoltenVK libMoltenVK) + if( NOT MOLTENVK_LIBRARIES ) + message( FATAL_ERROR "scopehal-apps requires MoltenVK to be installed in order to function on macOS.") endif() - - link_directories($ENV{GLSLANG_BUILD_PATH}/lib) - link_directories($ENV{GLSLANG_BUILD_PATH}/lib/glslang) endif() if(NOT WIN32) include(GNUInstallDirs) endif() -# Configure and enable OpenMP -if(NOT OpenMP_CXX_FOUND) - message(FATAL_ERROR "ngscopeclient requires OpenMP but your C++ compiler does not appear to support it.") -endif() -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - # Documentation -if(BUILD_DOCS) - add_subdirectory("${PROJECT_SOURCE_DIR}/doc") +add_subdirectory("${PROJECT_SOURCE_DIR}/doc") +if(NOT BUILD_DOCS) + set_property(TARGET doc PROPERTY EXCLUDE_FROM_ALL ON) endif() # Static analysis @@ -127,7 +183,7 @@ if(ANALYZE) message(STATUS "Found CPPCheck: ${CPPCHECK_PATH} but ignored it as it was ${CPPCHECK_VERSION} < 2") endif() else() - message(STATUS "CPPCheck not found") + message(FATAL_ERROR "CPPCheck not found, required for ANALYZE") endif() # The actual clang-analyzer compiler wrapper doesn't get installed on $PATH, only scan-build which is useless to us find_program(CLANGANALYZER_SCANBUILD_PATH scan-build DOC "Path to clang-analyzer's scan-build tool, used as a hint to find the rest of the clang-analyzer") @@ -138,7 +194,7 @@ if(ANALYZE) set(CMAKE_CXX_COMPILER_LAUNCHER "${CLANGANALYZER_CXXANALYZER_PATH}") message(STATUS "Found clang-analyzer: ${CLANGANALYZER_CXXANALYZER_PATH}") else() - message(STATUS "clang-analyzer not found") + message(FATAL_ERROR "clang-analyzer not found, required for ANALYZE") endif() endif() @@ -169,6 +225,10 @@ if(NOT WIN32) #add_subdirectory("${PROJECT_SOURCE_DIR}/src/examples/usbcsv") endif() +if(DISABLE_PCH) + set(CMAKE_DISABLE_PRECOMPILE_HEADERS ON) +endif() + # Make sure all of our shared libraries are built relocatable set_property(TARGET scopehal PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET log PROPERTY POSITION_INDEPENDENT_CODE ON) diff --git a/cmake/FindFFTS.cmake b/cmake/FindFFTS.cmake deleted file mode 100644 index 599971739..000000000 --- a/cmake/FindFFTS.cmake +++ /dev/null @@ -1,34 +0,0 @@ -if(NOT APPLE_SILICON) - if(NOT LIBFFTS_FOUND) - pkg_check_modules (LIBFFTS_PKG ffts) - - find_path(LIBFFTS_INCLUDE_DIR NAMES ffts.h - PATHS - ${LIBFFTS_PKG_INCLUDE_DIRS} - /usr - /usr/local - $ENV{HOME}/.local - - PATH_SUFFIXES - include/ffts - ) - find_library(LIBFFTS_LIBRARIES NAMES ffts libffts_static - PATHS - ${LIBFFTS_PKG_LIBRARY_DIRS} - /usr/lib - /usr/local/lib - $ENV{HOME}/.local/lib - ) - - if(LIBFFTS_INCLUDE_DIR AND LIBFFTS_LIBRARIES) - set(LIBFFTS_FOUND TRUE CACHE INTERNAL "libffts found") - message(STATUS "Found libffts: ${LIBFFTS_INCLUDE_DIR}, ${LIBFFTS_LIBRARIES}") - else(LIBFFTS_INCLUDE_DIR AND LIBFFTS_LIBRARIES) - set(LIBFFTS_FOUND FALSE CACHE INTERNAL "libffts found") - message(STATUS "libffts not found. Please clone/build and install it from https://github.com/anthonix/ffts.git") - endif(LIBFFTS_INCLUDE_DIR AND LIBFFTS_LIBRARIES) - - mark_as_advanced(LIBFFTS_INCLUDE_DIR LIBFFTS_LIBRARIES) - - endif(NOT LIBFFTS_FOUND) -endif(NOT APPLE_SILICON) \ No newline at end of file diff --git a/cmake/FindPackageHandleStandardArgs.cmake b/cmake/FindPackageHandleStandardArgs.cmake deleted file mode 100644 index fbcf7cd88..000000000 --- a/cmake/FindPackageHandleStandardArgs.cmake +++ /dev/null @@ -1,605 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#[=======================================================================[.rst: -FindPackageHandleStandardArgs ------------------------------ - -This module provides functions intended to be used in :ref:`Find Modules` -implementing :command:`find_package()` calls. - -.. command:: find_package_handle_standard_args - - This command handles the ``REQUIRED``, ``QUIET`` and version-related - arguments of :command:`find_package`. It also sets the - ``_FOUND`` variable. The package is considered found if all - variables listed contain valid results, e.g. valid filepaths. - - There are two signatures: - - .. code-block:: cmake - - find_package_handle_standard_args( - (DEFAULT_MSG|) - ... - ) - - find_package_handle_standard_args( - [FOUND_VAR ] - [REQUIRED_VARS ...] - [VERSION_VAR ] - [HANDLE_VERSION_RANGE] - [HANDLE_COMPONENTS] - [CONFIG_MODE] - [NAME_MISMATCHED] - [REASON_FAILURE_MESSAGE ] - [FAIL_MESSAGE ] - ) - - The ``_FOUND`` variable will be set to ``TRUE`` if all - the variables ``...`` are valid and any optional - constraints are satisfied, and ``FALSE`` otherwise. A success or - failure message may be displayed based on the results and on - whether the ``REQUIRED`` and/or ``QUIET`` option was given to - the :command:`find_package` call. - - The options are: - - ``(DEFAULT_MSG|)`` - In the simple signature this specifies the failure message. - Use ``DEFAULT_MSG`` to ask for a default message to be computed - (recommended). Not valid in the full signature. - - ``FOUND_VAR `` - .. deprecated:: 3.3 - - Specifies either ``_FOUND`` or - ``_FOUND`` as the result variable. This exists only - for compatibility with older versions of CMake and is now ignored. - Result variables of both names are always set for compatibility. - - ``REQUIRED_VARS ...`` - Specify the variables which are required for this package. - These may be named in the generated failure message asking the - user to set the missing variable values. Therefore these should - typically be cache entries such as ``FOO_LIBRARY`` and not output - variables like ``FOO_LIBRARIES``. - - .. versionchanged:: 3.18 - If ``HANDLE_COMPONENTS`` is specified, this option can be omitted. - - ``VERSION_VAR `` - Specify the name of a variable that holds the version of the package - that has been found. This version will be checked against the - (potentially) specified required version given to the - :command:`find_package` call, including its ``EXACT`` option. - The default messages include information about the required - version and the version which has been actually found, both - if the version is ok or not. - - ``HANDLE_VERSION_RANGE`` - .. versionadded:: 3.19 - - Enable handling of a version range, if one is specified. Without this - option, a developer warning will be displayed if a version range is - specified. - - ``HANDLE_COMPONENTS`` - Enable handling of package components. In this case, the command - will report which components have been found and which are missing, - and the ``_FOUND`` variable will be set to ``FALSE`` - if any of the required components (i.e. not the ones listed after - the ``OPTIONAL_COMPONENTS`` option of :command:`find_package`) are - missing. - - ``CONFIG_MODE`` - Specify that the calling find module is a wrapper around a - call to ``find_package( NO_MODULE)``. This implies - a ``VERSION_VAR`` value of ``_VERSION``. The command - will automatically check whether the package configuration file - was found. - - ``REASON_FAILURE_MESSAGE `` - .. versionadded:: 3.16 - - Specify a custom message of the reason for the failure which will be - appended to the default generated message. - - ``FAIL_MESSAGE `` - Specify a custom failure message instead of using the default - generated message. Not recommended. - - ``NAME_MISMATCHED`` - .. versionadded:: 3.17 - - Indicate that the ```` does not match - ``${CMAKE_FIND_PACKAGE_NAME}``. This is usually a mistake and raises a - warning, but it may be intentional for usage of the command for components - of a larger package. - -Example for the simple signature: - -.. code-block:: cmake - - find_package_handle_standard_args(LibXml2 DEFAULT_MSG - LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR) - -The ``LibXml2`` package is considered to be found if both -``LIBXML2_LIBRARY`` and ``LIBXML2_INCLUDE_DIR`` are valid. -Then also ``LibXml2_FOUND`` is set to ``TRUE``. If it is not found -and ``REQUIRED`` was used, it fails with a -:command:`message(FATAL_ERROR)`, independent whether ``QUIET`` was -used or not. If it is found, success will be reported, including -the content of the first ````. On repeated CMake runs, -the same message will not be printed again. - -.. note:: - - If ```` does not match ``CMAKE_FIND_PACKAGE_NAME`` for the - calling module, a warning that there is a mismatch is given. The - ``FPHSA_NAME_MISMATCHED`` variable may be set to bypass the warning if using - the old signature and the ``NAME_MISMATCHED`` argument using the new - signature. To avoid forcing the caller to require newer versions of CMake for - usage, the variable's value will be used if defined when the - ``NAME_MISMATCHED`` argument is not passed for the new signature (but using - both is an error).. - -Example for the full signature: - -.. code-block:: cmake - - find_package_handle_standard_args(LibArchive - REQUIRED_VARS LibArchive_LIBRARY LibArchive_INCLUDE_DIR - VERSION_VAR LibArchive_VERSION) - -In this case, the ``LibArchive`` package is considered to be found if -both ``LibArchive_LIBRARY`` and ``LibArchive_INCLUDE_DIR`` are valid. -Also the version of ``LibArchive`` will be checked by using the version -contained in ``LibArchive_VERSION``. Since no ``FAIL_MESSAGE`` is given, -the default messages will be printed. - -Another example for the full signature: - -.. code-block:: cmake - - find_package(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4) - find_package_handle_standard_args(Automoc4 CONFIG_MODE) - -In this case, a ``FindAutmoc4.cmake`` module wraps a call to -``find_package(Automoc4 NO_MODULE)`` and adds an additional search -directory for ``automoc4``. Then the call to -``find_package_handle_standard_args`` produces a proper success/failure -message. - -.. command:: find_package_check_version - - .. versionadded:: 3.19 - - Helper function which can be used to check if a ```` is valid - against version-related arguments of :command:`find_package`. - - .. code-block:: cmake - - find_package_check_version( - [HANDLE_VERSION_RANGE] - [RESULT_MESSAGE_VARIABLE ] - ) - - The ```` will hold a boolean value giving the result of the check. - - The options are: - - ``HANDLE_VERSION_RANGE`` - Enable handling of a version range, if one is specified. Without this - option, a developer warning will be displayed if a version range is - specified. - - ``RESULT_MESSAGE_VARIABLE `` - Specify a variable to get back a message describing the result of the check. - -Example for the usage: - -.. code-block:: cmake - - find_package_check_version(1.2.3 result HANDLE_VERSION_RANGE - RESULT_MESSAGE_VARIABLE reason) - if (result) - message (STATUS "${reason}") - else() - message (FATAL_ERROR "${reason}") - endif() -#]=======================================================================] - -include(${CMAKE_CURRENT_LIST_DIR}/FindPackageMessage.cmake) - - -cmake_policy(PUSH) -# numbers and boolean constants -cmake_policy (SET CMP0012 NEW) -# IN_LIST operator -cmake_policy (SET CMP0057 NEW) - - -# internal helper macro -macro(_FPHSA_FAILURE_MESSAGE _msg) - set (__msg "${_msg}") - if (FPHSA_REASON_FAILURE_MESSAGE) - string(APPEND __msg "\n Reason given by package: ${FPHSA_REASON_FAILURE_MESSAGE}\n") - endif() - if (${_NAME}_FIND_REQUIRED) - message(FATAL_ERROR "${__msg}") - else () - if (NOT ${_NAME}_FIND_QUIETLY) - message(STATUS "${__msg}") - endif () - endif () -endmacro() - - -# internal helper macro to generate the failure message when used in CONFIG_MODE: -macro(_FPHSA_HANDLE_FAILURE_CONFIG_MODE) - # _CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found: - if(${_NAME}_CONFIG) - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing:${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})") - else() - # If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version. - # List them all in the error message: - if(${_NAME}_CONSIDERED_CONFIGS) - set(configsText "") - list(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount) - math(EXPR configsCount "${configsCount} - 1") - foreach(currentConfigIndex RANGE ${configsCount}) - list(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename) - list(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version) - string(APPEND configsText "\n ${filename} (version ${version})") - endforeach() - if (${_NAME}_NOT_FOUND_MESSAGE) - if (FPHSA_REASON_FAILURE_MESSAGE) - string(PREPEND FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}\n ") - else() - set(FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}") - endif() - else() - string(APPEND configsText "\n") - endif() - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:${configsText}") - - else() - # Simple case: No Config-file was found at all: - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}") - endif() - endif() -endmacro() - - -function(FIND_PACKAGE_CHECK_VERSION version result) - cmake_parse_arguments (PARSE_ARGV 2 FPCV "HANDLE_VERSION_RANGE;NO_AUTHOR_WARNING_VERSION_RANGE" "RESULT_MESSAGE_VARIABLE" "") - - if (FPCV_UNPARSED_ARGUMENTS) - message (FATAL_ERROR "find_package_check_version(): ${FPCV_UNPARSED_ARGUMENTS}: unexpected arguments") - endif() - if ("RESULT_MESSAGE_VARIABLE" IN_LIST FPCV_KEYWORDS_MISSING_VALUES) - message (FATAL_ERROR "find_package_check_version(): RESULT_MESSAGE_VARIABLE expects an argument") - endif() - - set (${result} FALSE PARENT_SCOPE) - if (FPCV_RESULT_MESSAGE_VARIABLE) - unset (${FPCV_RESULT_MESSAGE_VARIABLE} PARENT_SCOPE) - endif() - - if (_CMAKE_FPHSA_PACKAGE_NAME) - set (package "${_CMAKE_FPHSA_PACKAGE_NAME}") - elseif (CMAKE_FIND_PACKAGE_NAME) - set (package "${CMAKE_FIND_PACKAGE_NAME}") - else() - message (FATAL_ERROR "find_package_check_version(): Cannot be used outside a 'Find Module'") - endif() - - if (NOT FPCV_NO_AUTHOR_WARNING_VERSION_RANGE - AND ${package}_FIND_VERSION_RANGE AND NOT FPCV_HANDLE_VERSION_RANGE) - message(AUTHOR_WARNING - "`find_package()` specify a version range but the option " - "HANDLE_VERSION_RANGE` is not passed to `find_package_check_version()`. " - "Only the lower endpoint of the range will be used.") - endif() - - - set (version_ok FALSE) - unset (version_msg) - - if (FPCV_HANDLE_VERSION_RANGE AND ${package}_FIND_VERSION_RANGE) - if ((${package}_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" - AND version VERSION_GREATER_EQUAL ${package}_FIND_VERSION_MIN) - AND ((${package}_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" - AND version VERSION_LESS_EQUAL ${package}_FIND_VERSION_MAX) - OR (${package}_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" - AND version VERSION_LESS ${package}_FIND_VERSION_MAX))) - set (version_ok TRUE) - set(version_msg "(found suitable version \"${version}\", required range is \"${${package}_FIND_VERSION_RANGE}\")") - else() - set(version_msg "Found unsuitable version \"${version}\", required range is \"${${package}_FIND_VERSION_RANGE}\"") - endif() - elseif (DEFINED ${package}_FIND_VERSION) - if(${package}_FIND_VERSION_EXACT) # exact version required - # count the dots in the version string - string(REGEX REPLACE "[^.]" "" version_dots "${version}") - # add one dot because there is one dot more than there are components - string(LENGTH "${version_dots}." version_dots) - if (version_dots GREATER ${package}_FIND_VERSION_COUNT) - # Because of the C++ implementation of find_package() ${package}_FIND_VERSION_COUNT - # is at most 4 here. Therefore a simple lookup table is used. - if (${package}_FIND_VERSION_COUNT EQUAL 1) - set(version_regex "[^.]*") - elseif (${package}_FIND_VERSION_COUNT EQUAL 2) - set(version_regex "[^.]*\\.[^.]*") - elseif (${package}_FIND_VERSION_COUNT EQUAL 3) - set(version_regex "[^.]*\\.[^.]*\\.[^.]*") - else() - set(version_regex "[^.]*\\.[^.]*\\.[^.]*\\.[^.]*") - endif() - string(REGEX REPLACE "^(${version_regex})\\..*" "\\1" version_head "${version}") - if (NOT ${package}_FIND_VERSION VERSION_EQUAL version_head) - set(version_msg "Found unsuitable version \"${version}\", but required is exact version \"${${package}_FIND_VERSION}\"") - else () - set(version_ok TRUE) - set(version_msg "(found suitable exact version \"${_FOUND_VERSION}\")") - endif () - else () - if (NOT ${package}_FIND_VERSION VERSION_EQUAL version) - set(version_msg "Found unsuitable version \"${version}\", but required is exact version \"${${package}_FIND_VERSION}\"") - else () - set(version_ok TRUE) - set(version_msg "(found suitable exact version \"${version}\")") - endif () - endif () - else() # minimum version - if (${package}_FIND_VERSION VERSION_GREATER version) - set(version_msg "Found unsuitable version \"${version}\", but required is at least \"${${package}_FIND_VERSION}\"") - else() - set(version_ok TRUE) - set(version_msg "(found suitable version \"${version}\", minimum required is \"${${package}_FIND_VERSION}\")") - endif() - endif() - else () - set(version_ok TRUE) - set(version_msg "(found version \"${version}\")") - endif() - - set (${result} ${version_ok} PARENT_SCOPE) - if (FPCV_RESULT_MESSAGE_VARIABLE) - set (${FPCV_RESULT_MESSAGE_VARIABLE} "${version_msg}" PARENT_SCOPE) - endif() -endfunction() - - -function(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG) - - # Set up the arguments for `cmake_parse_arguments`. - set(options CONFIG_MODE HANDLE_COMPONENTS NAME_MISMATCHED HANDLE_VERSION_RANGE) - set(oneValueArgs FAIL_MESSAGE REASON_FAILURE_MESSAGE VERSION_VAR FOUND_VAR) - set(multiValueArgs REQUIRED_VARS) - - # Check whether we are in 'simple' or 'extended' mode: - set(_KEYWORDS_FOR_EXTENDED_MODE ${options} ${oneValueArgs} ${multiValueArgs} ) - list(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX) - - unset(FPHSA_NAME_MISMATCHED_override) - if (DEFINED FPHSA_NAME_MISMATCHED) - # If the variable NAME_MISMATCHED variable is set, error if it is passed as - # an argument. The former is for old signatures, the latter is for new - # signatures. - list(FIND ARGN "NAME_MISMATCHED" name_mismatched_idx) - if (NOT name_mismatched_idx EQUAL "-1") - message(FATAL_ERROR - "The `NAME_MISMATCHED` argument may only be specified by the argument or " - "the variable, not both.") - endif () - - # But use the variable if it is not an argument to avoid forcing minimum - # CMake version bumps for calling modules. - set(FPHSA_NAME_MISMATCHED_override "${FPHSA_NAME_MISMATCHED}") - endif () - - if(${INDEX} EQUAL -1) - set(FPHSA_FAIL_MESSAGE ${_FIRST_ARG}) - set(FPHSA_REQUIRED_VARS ${ARGN}) - set(FPHSA_VERSION_VAR) - else() - cmake_parse_arguments(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN}) - - if(FPHSA_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"") - endif() - - if(NOT FPHSA_FAIL_MESSAGE) - set(FPHSA_FAIL_MESSAGE "DEFAULT_MSG") - endif() - - # In config-mode, we rely on the variable _CONFIG, which is set by find_package() - # when it successfully found the config-file, including version checking: - if(FPHSA_CONFIG_MODE) - list(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG) - list(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS) - set(FPHSA_VERSION_VAR ${_NAME}_VERSION) - endif() - - if(NOT FPHSA_REQUIRED_VARS AND NOT FPHSA_HANDLE_COMPONENTS) - message(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()") - endif() - endif() - - if (DEFINED FPHSA_NAME_MISMATCHED_override) - set(FPHSA_NAME_MISMATCHED "${FPHSA_NAME_MISMATCHED_override}") - endif () - - if (DEFINED CMAKE_FIND_PACKAGE_NAME - AND NOT FPHSA_NAME_MISMATCHED - AND NOT _NAME STREQUAL CMAKE_FIND_PACKAGE_NAME) - message(AUTHOR_WARNING - "The package name passed to `find_package_handle_standard_args` " - "(${_NAME}) does not match the name of the calling package " - "(${CMAKE_FIND_PACKAGE_NAME}). This can lead to problems in calling " - "code that expects `find_package` result variables (e.g., `_FOUND`) " - "to follow a certain pattern.") - endif () - - if (${_NAME}_FIND_VERSION_RANGE AND NOT FPHSA_HANDLE_VERSION_RANGE) - message(AUTHOR_WARNING - "`find_package()` specify a version range but the module ${_NAME} does " - "not support this capability. Only the lower endpoint of the range " - "will be used.") - endif() - - # to propagate package name to FIND_PACKAGE_CHECK_VERSION - set(_CMAKE_FPHSA_PACKAGE_NAME "${_NAME}") - - # now that we collected all arguments, process them - - if("x${FPHSA_FAIL_MESSAGE}" STREQUAL "xDEFAULT_MSG") - set(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}") - endif() - - if (FPHSA_REQUIRED_VARS) - list(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR) - endif() - - string(TOUPPER ${_NAME} _NAME_UPPER) - string(TOLOWER ${_NAME} _NAME_LOWER) - - if(FPHSA_FOUND_VAR) - set(_FOUND_VAR_UPPER ${_NAME_UPPER}_FOUND) - set(_FOUND_VAR_MIXED ${_NAME}_FOUND) - if(FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_MIXED OR FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_UPPER) - set(_FOUND_VAR ${FPHSA_FOUND_VAR}) - else() - message(FATAL_ERROR "The argument for FOUND_VAR is \"${FPHSA_FOUND_VAR}\", but only \"${_FOUND_VAR_MIXED}\" and \"${_FOUND_VAR_UPPER}\" are valid names.") - endif() - else() - set(_FOUND_VAR ${_NAME_UPPER}_FOUND) - endif() - - # collect all variables which were not found, so they can be printed, so the - # user knows better what went wrong (#6375) - set(MISSING_VARS "") - set(DETAILS "") - # check if all passed variables are valid - set(FPHSA_FOUND_${_NAME} TRUE) - foreach(_CURRENT_VAR ${FPHSA_REQUIRED_VARS}) - if(NOT ${_CURRENT_VAR}) - set(FPHSA_FOUND_${_NAME} FALSE) - string(APPEND MISSING_VARS " ${_CURRENT_VAR}") - else() - string(APPEND DETAILS "[${${_CURRENT_VAR}}]") - endif() - endforeach() - if(FPHSA_FOUND_${_NAME}) - set(${_NAME}_FOUND TRUE) - set(${_NAME_UPPER}_FOUND TRUE) - else() - set(${_NAME}_FOUND FALSE) - set(${_NAME_UPPER}_FOUND FALSE) - endif() - - # component handling - unset(FOUND_COMPONENTS_MSG) - unset(MISSING_COMPONENTS_MSG) - - if(FPHSA_HANDLE_COMPONENTS) - foreach(comp ${${_NAME}_FIND_COMPONENTS}) - if(${_NAME}_${comp}_FOUND) - - if(NOT DEFINED FOUND_COMPONENTS_MSG) - set(FOUND_COMPONENTS_MSG "found components:") - endif() - string(APPEND FOUND_COMPONENTS_MSG " ${comp}") - - else() - - if(NOT DEFINED MISSING_COMPONENTS_MSG) - set(MISSING_COMPONENTS_MSG "missing components:") - endif() - string(APPEND MISSING_COMPONENTS_MSG " ${comp}") - - if(${_NAME}_FIND_REQUIRED_${comp}) - set(${_NAME}_FOUND FALSE) - string(APPEND MISSING_VARS " ${comp}") - endif() - - endif() - endforeach() - set(COMPONENT_MSG "${FOUND_COMPONENTS_MSG} ${MISSING_COMPONENTS_MSG}") - string(APPEND DETAILS "[c${COMPONENT_MSG}]") - endif() - - # version handling: - set(VERSION_MSG "") - set(VERSION_OK TRUE) - - # check with DEFINED here as the requested or found version may be "0" - if (DEFINED ${_NAME}_FIND_VERSION) - if(DEFINED ${FPHSA_VERSION_VAR}) - set(_FOUND_VERSION ${${FPHSA_VERSION_VAR}}) - if (FPHSA_HANDLE_VERSION_RANGE) - set (FPCV_HANDLE_VERSION_RANGE HANDLE_VERSION_RANGE) - else() - set(FPCV_HANDLE_VERSION_RANGE NO_AUTHOR_WARNING_VERSION_RANGE) - endif() - find_package_check_version ("${_FOUND_VERSION}" VERSION_OK RESULT_MESSAGE_VARIABLE VERSION_MSG - ${FPCV_HANDLE_VERSION_RANGE}) - else() - # if the package was not found, but a version was given, add that to the output: - if(${_NAME}_FIND_VERSION_EXACT) - set(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")") - elseif (FPHSA_HANDLE_VERSION_RANGE AND ${_NAME}_FIND_VERSION_RANGE) - set(VERSION_MSG "(Required is version range \"${${_NAME}_FIND_VERSION_RANGE}\")") - else() - set(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")") - endif() - endif() - else () - # Check with DEFINED as the found version may be 0. - if(DEFINED ${FPHSA_VERSION_VAR}) - set(VERSION_MSG "(found version \"${${FPHSA_VERSION_VAR}}\")") - endif() - endif () - - if(VERSION_OK) - string(APPEND DETAILS "[v${${FPHSA_VERSION_VAR}}(${${_NAME}_FIND_VERSION})]") - else() - set(${_NAME}_FOUND FALSE) - endif() - - - # print the result: - if (${_NAME}_FOUND) - FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG} ${COMPONENT_MSG}" "${DETAILS}") - else () - - if(FPHSA_CONFIG_MODE) - _FPHSA_HANDLE_FAILURE_CONFIG_MODE() - else() - if(NOT VERSION_OK) - set(RESULT_MSG) - if (_FIRST_REQUIRED_VAR) - string (APPEND RESULT_MSG "found ${${_FIRST_REQUIRED_VAR}}") - endif() - if (COMPONENT_MSG) - if (RESULT_MSG) - string (APPEND RESULT_MSG ", ") - endif() - string (APPEND RESULT_MSG "${FOUND_COMPONENTS_MSG}") - endif() - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (${RESULT_MSG})") - else() - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing:${MISSING_VARS}) ${VERSION_MSG}") - endif() - endif() - - endif () - - set(${_NAME}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE) - set(${_NAME_UPPER}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE) -endfunction() - - -cmake_policy(POP) diff --git a/cmake/FindPackageMessage.cmake b/cmake/FindPackageMessage.cmake deleted file mode 100644 index 0628b9816..000000000 --- a/cmake/FindPackageMessage.cmake +++ /dev/null @@ -1,48 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#[=======================================================================[.rst: -FindPackageMessage ------------------- - -.. code-block:: cmake - - find_package_message( "message for user" "find result details") - -This function is intended to be used in FindXXX.cmake modules files. -It will print a message once for each unique find result. This is -useful for telling the user where a package was found. The first -argument specifies the name (XXX) of the package. The second argument -specifies the message to display. The third argument lists details -about the find result so that if they change the message will be -displayed again. The macro also obeys the QUIET argument to the -find_package command. - -Example: - -.. code-block:: cmake - - if(X11_FOUND) - find_package_message(X11 "Found X11: ${X11_X11_LIB}" - "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]") - else() - ... - endif() -#]=======================================================================] - -function(find_package_message pkg msg details) - # Avoid printing a message repeatedly for the same find result. - if(NOT ${pkg}_FIND_QUIETLY) - string(REPLACE "\n" "" details "${details}") - set(DETAILS_VAR FIND_PACKAGE_MESSAGE_DETAILS_${pkg}) - if(NOT "${details}" STREQUAL "${${DETAILS_VAR}}") - # The message has not yet been printed. - message(STATUS "${msg}") - - # Save the find details in the cache to avoid printing the same - # message again. - set("${DETAILS_VAR}" "${details}" - CACHE INTERNAL "Details about finding ${pkg}") - endif() - endif() -endfunction() diff --git a/cmake/FindVulkan.cmake b/cmake/FindVulkan.cmake index 38179878c..581763de0 100644 --- a/cmake/FindVulkan.cmake +++ b/cmake/FindVulkan.cmake @@ -244,23 +244,26 @@ endif() if(WIN32) set(_Vulkan_library_name vulkan-1) set(_Vulkan_hint_include_search_paths - "$ENV{VULKAN_SDK}/Include" + "$ENV{VULKAN_SDK}/include" ) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(_Vulkan_hint_executable_search_paths - "$ENV{VULKAN_SDK}/Bin" + "$ENV{VULKAN_SDK}/bin" ) set(_Vulkan_hint_library_search_paths - "$ENV{VULKAN_SDK}/Lib" - "$ENV{VULKAN_SDK}/Bin" + "$ENV{VULKAN_SDK}/lib" + "$ENV{VULKAN_SDK}/bin" ) else() set(_Vulkan_hint_executable_search_paths - "$ENV{VULKAN_SDK}/Bin32" + "$ENV{VULKAN_SDK}/bin32" + "$ENV{VULKAN_SDK}/bin" ) set(_Vulkan_hint_library_search_paths - "$ENV{VULKAN_SDK}/Lib32" - "$ENV{VULKAN_SDK}/Bin32" + "$ENV{VULKAN_SDK}/lib32" + "$ENV{VULKAN_SDK}/bin32" + "$ENV{VULKAN_SDK}/lib" + "$ENV{VULKAN_SDK}/bin" ) endif() else() diff --git a/cmake/FindYAML.cmake b/cmake/FindYAML.cmake deleted file mode 100644 index 4f2dfbc29..000000000 --- a/cmake/FindYAML.cmake +++ /dev/null @@ -1,101 +0,0 @@ - -#-------------------------------------------------------------------------------- -# Copyright (c) 2012-2013, Lars Baehren -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#-------------------------------------------------------------------------------- - -# - Check for the presence of YAML -# -# The following variables are set when YAML is found: -# YAML_FOUND = Set to true, if all components of YAML have been found. -# YAML_INCLUDES = Include path for the header files of YAML -# YAML_LIBRARIES = Link these to use YAML -# YAML_LFLAGS = Linker flags (optional) - -if (NOT YAML_FOUND) - - if (NOT YAML_ROOT_DIR) - set (YAML_ROOT_DIR ${CMAKE_INSTALL_PREFIX}) - endif (NOT YAML_ROOT_DIR) - - ##_____________________________________________________________________________ - ## Check for the header files - - find_path (YAML_INCLUDES yaml-cpp/yaml.h yaml-cpp/node.h - HINTS ${YAML_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} - PATH_SUFFIXES include - ) - - ##_____________________________________________________________________________ - ## Check for the library - - find_library (YAML_LIBRARIES yaml-cpp - HINTS ${YAML_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} - PATH_SUFFIXES lib - ) - - ##_____________________________________________________________________________ - ## Actions taken when all components have been found - - find_package_handle_standard_args (YAML DEFAULT_MSG YAML_LIBRARIES YAML_INCLUDES) - - if (YAML_INCLUDES AND YAML_LIBRARIES) - set (YAML_FOUND TRUE) - else (YAML_INCLUDES AND YAML_LIBRARIES) - set (YAML_FOUND FALSE) - if (NOT YAML_FIND_QUIETLY) - if (NOT YAML_INCLUDES) - message (STATUS "Unable to find YAML header files!") - endif (NOT YAML_INCLUDES) - if (NOT YAML_LIBRARIES) - message (STATUS "Unable to find YAML library files!") - endif (NOT YAML_LIBRARIES) - endif (NOT YAML_FIND_QUIETLY) - endif (YAML_INCLUDES AND YAML_LIBRARIES) - - if (YAML_FOUND) - if (NOT YAML_FIND_QUIETLY) - message (STATUS "Found components for YAML") - message (STATUS "YAML_ROOT_DIR = ${YAML_ROOT_DIR}") - message (STATUS "YAML_INCLUDES = ${YAML_INCLUDES}") - message (STATUS "YAML_LIBRARIES = ${YAML_LIBRARIES}") - endif (NOT YAML_FIND_QUIETLY) - else (YAML_FOUND) - if (YAML_FIND_REQUIRED) - message (FATAL_ERROR "Could not find YAML!") - endif (YAML_FIND_REQUIRED) - endif (YAML_FOUND) - - ## Compatibility setting - set (YAML_CPP_FOUND ${YAML_FOUND}) - - ##_____________________________________________________________________________ - ## Mark advanced variables - - mark_as_advanced ( - YAML_ROOT_DIR - YAML_INCLUDES - YAML_LIBRARIES - ) - -endif (NOT YAML_FOUND) diff --git a/lib b/lib index bfdbe24c2..aae493fd5 160000 --- a/lib +++ b/lib @@ -1 +1 @@ -Subproject commit bfdbe24c267c74a97397d44dbf85edcb62cf9bb3 +Subproject commit aae493fd557288b8058a5861da1b609ecf418a27 diff --git a/src/ngscopeclient/CMakeLists.txt b/src/ngscopeclient/CMakeLists.txt index 12ba9d4b0..b6839bd2c 100644 --- a/src/ngscopeclient/CMakeLists.txt +++ b/src/ngscopeclient/CMakeLists.txt @@ -1,5 +1,10 @@ -# Vulkan is required for compute shaders used in rendering -find_package(Vulkan REQUIRED) +# At the moment, this is meant to be built as part of scopehal-apps. +# Standalone build/install is a potential long-term goal. +#If there is interest in a standalone build, please reach out. + +# Vulkan is required for compute shaders used in rendering, but is pulled in from the top level CMakeLists. + +find_package(PNG REQUIRED) #Set up versioning (with a dummy string for now if Git isn't present) if(Git_FOUND) @@ -11,24 +16,8 @@ if(Git_FOUND) else() set(NGSCOPECLIENT_VERSION "unknown") endif() -include_directories(${CMAKE_CURRENT_BINARY_DIR}) -configure_file(ngscopeclient-version.h.in ngscopeclient-version.h) -#Set up include paths -include_directories( - SYSTEM - ${SIGCXX_INCLUDE_DIRS} - ${CAIROMM_INCLUDE_DIRS} - ${CMAKE_CURRENT_SOURCE_DIR}/../imgui/ - ${CMAKE_CURRENT_SOURCE_DIR}/../imgui/misc/cpp - ${CMAKE_CURRENT_SOURCE_DIR}/../implot/ - ${CMAKE_CURRENT_SOURCE_DIR}/../imgui-node-editor/ - ${CMAKE_CURRENT_SOURCE_DIR}/../ImGuiFileDialog/ - ${CMAKE_CURRENT_SOURCE_DIR}/../nativefiledialog-extended/src/include/ - ) -link_directories(${CAIROMM_LIBRARY_DIRS} ${SIGCXX_LIBRARY_DIRS}) -find_package(glfw3 REQUIRED) -find_package(PNG REQUIRED) +configure_file(ngscopeclient-version.h.in ngscopeclient-version.h) # use custom config for imguifiledialog add_compile_definitions(CUSTOM_IMGUIFILEDIALOG_CONFIG="../ngscopeclient/IGFDConfig.h") @@ -181,6 +170,23 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL endif() ############################################################################### +#Set up include paths +target_include_directories(ngscopeclient + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + SYSTEM + ${SIGCXX_INCLUDE_DIRS} + ${CAIROMM_INCLUDE_DIRS} + ${LIBFFTS_INCLUDE_DIRS} + yaml-cpp::yaml-cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../imgui/ + ${CMAKE_CURRENT_SOURCE_DIR}/../imgui/misc/cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../implot/ + ${CMAKE_CURRENT_SOURCE_DIR}/../imgui-node-editor/ + ${CMAKE_CURRENT_SOURCE_DIR}/../ImGuiFileDialog/ + ${CMAKE_CURRENT_SOURCE_DIR}/../nativefiledialog-extended/src/include/ + ) + #Linker settings target_link_libraries(ngscopeclient scopehal @@ -188,11 +194,18 @@ target_link_libraries(ngscopeclient nfd glfw PNG::PNG - cairomm-1.0 - cairo - ${SIGCXX_LIBRARIES} + yaml-cpp::yaml-cpp + ${CAIROMM_LINK_LIBRARIES} + ${SIGCXX_LINK_LIBRARIES} ) +#Needed to run from tree without install because Windows does not support RPATH and will otherwise not be able to find DLLs +if(WIN32) +add_custom_command(TARGET ngscopeclient POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $ + COMMAND_EXPAND_LISTS + ) +endif() ############################################################################### # Installation install(TARGETS ngscopeclient RUNTIME) @@ -272,7 +285,7 @@ if(WIXPATH AND WIN32) COMMAND ${WIXPATH}/candle -nologo ngscopeclient-files.wxs -arch x64 -out ngscopeclient-files.wixobj COMMAND ${WIXPATH}/candle -nologo ngscopeclient.wxs -arch x64 -out ngscopeclient.wixobj -ext WixUIExtension -ext WixUtilExtension COMMAND ${WIXPATH}/light -nologo ngscopeclient-files.wixobj ngscopeclient.wixobj -b dist/ngscopeclient_windows_x64 -out dist/ngscopeclient-${NGSCOPECLIENT_VERSION}-windows-x64.msi -ext WixUIExtension -ext WixUtilExtension) -else() +elseif(WIN32) message("Skipping MSI package build; define WIXPATH to enable") endif() diff --git a/tests/Acceleration/CMakeLists.txt b/tests/Acceleration/CMakeLists.txt index 6824f1ec7..3c3f36233 100644 --- a/tests/Acceleration/CMakeLists.txt +++ b/tests/Acceleration/CMakeLists.txt @@ -4,16 +4,21 @@ add_executable(Acceleration Buffers.cpp ) -catch_discover_tests(Acceleration) - -include_directories(${CAIROMM_INCLUDE_DIRS} ${SIGCXX_INCLUDE_DIRS}) -target_link_directories(Acceleration PUBLIC ${CAIROMM_LIBRARY_DIRS} ${SIGCXX_LIBRARY_DIRS}) +target_include_directories(Acceleration PRIVATE ${CAIROMM_INCLUDE_DIRS} ${SIGCXX_INCLUDE_DIRS} ${LIBFFTS_INCLUDE_DIRS}) -############################################################################### -#Linker settings target_link_libraries(Acceleration scopehal scopeprotocols ${YAML_LIBRARIES} Catch2::Catch2 ) + +#Needed because Windows does not support RPATH and will otherwise not be able to find DLLs when catch_discover_tests runs the executable +if(WIN32) +add_custom_command(TARGET Acceleration POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $ + COMMAND_EXPAND_LISTS + ) +endif() + +catch_discover_tests(Acceleration) diff --git a/tests/Filters/CMakeLists.txt b/tests/Filters/CMakeLists.txt index 828092bad..cdeec70dd 100644 --- a/tests/Filters/CMakeLists.txt +++ b/tests/Filters/CMakeLists.txt @@ -11,16 +11,20 @@ add_executable(Filters FrequencyMeasurement.cpp ) -catch_discover_tests(Filters) - -include_directories(${CAIROMM_INCLUDE_DIRS} ${SIGCXX_INCLUDE_DIRS}) -target_link_directories(Filters PUBLIC ${CAIROMM_LIBRARY_DIRS} ${SIGCXX_LIBRARY_DIRS}) - -############################################################################### -#Linker settings +target_include_directories(Filters PRIVATE ${CAIROMM_INCLUDE_DIRS} ${SIGCXX_INCLUDE_DIRS} ${LIBFFTS_INCLUDE_DIRS}) target_link_libraries(Filters scopehal scopeprotocols ${YAML_LIBRARIES} Catch2::Catch2 ) + +#Needed because Windows does not support RPATH and will otherwise not be able to find DLLs when catch_discover_tests runs the executable +if(WIN32) +add_custom_command(TARGET Filters POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $ + COMMAND_EXPAND_LISTS + ) +endif() + +catch_discover_tests(Filters) \ No newline at end of file diff --git a/tests/Primitives/CMakeLists.txt b/tests/Primitives/CMakeLists.txt index 5279a72a1..af9586a6d 100644 --- a/tests/Primitives/CMakeLists.txt +++ b/tests/Primitives/CMakeLists.txt @@ -6,16 +6,21 @@ add_executable(Primitives Sampling.cpp ) -catch_discover_tests(Primitives) - -include_directories(${CAIROMM_INCLUDE_DIRS} ${SIGCXX_INCLUDE_DIRS}) -target_link_directories(Primitives PUBLIC ${CAIROMM_LIBRARY_DIRS} ${SIGCXX_LIBRARY_DIRS}) +target_include_directories(Primitives PRIVATE ${CAIROMM_INCLUDE_DIRS} ${SIGCXX_INCLUDE_DIRS} ${LIBFFTS_INCLUDE_DIRS}) -############################################################################### -#Linker settings target_link_libraries(Primitives scopehal scopeprotocols ${YAML_LIBRARIES} Catch2::Catch2 ) + +#Needed because Windows does not support RPATH and will otherwise not be able to find DLLs when catch_discover_tests runs the executable +if(WIN32) +add_custom_command(TARGET Primitives POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $ + COMMAND_EXPAND_LISTS + ) +endif() + +catch_discover_tests(Primitives)