From 78701a08b76c2c68a2709ef129722957d927484c Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Sat, 12 May 2018 15:58:15 -0600 Subject: [PATCH] cmake: Add LOADER_REPO_ROOT to repo Also added in warning if git submodule update --init is not run. --- CMakeLists.txt | 37 +++++++++++++++++++++++++++++++++++++ cube/CMakeLists.txt | 45 ++++++++++++++++++++++++++++----------------- vulkaninfo/CMakeLists.txt | 25 ++++++++++++++++++++++++- 3 files changed, 89 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ecf42a..5f6f2ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,11 @@ endif() set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(TOOLS_TARGET_FOLDER lvl_cmake_targets) +# Output warning if vulkan headers submodule contents are not present +if (NOT EXISTS "${PROJECT_SOURCE_DIR}/Vulkan-Headers/include/vulkan/vulkan_core.h") + message(FATAL_ERROR "Please run 'git submodule update --init' before running cmake") +endif() + # Header file for CMake settings include_directories("${PROJECT_SOURCE_DIR}/Vulkan-Headers/include") @@ -54,6 +59,38 @@ if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") endif() endif() +if(NOT WIN32) + set (BUILDTGT_DIR build) + set (BINDATA_DIR Bin) + set (LIBSOURCE_DIR Lib) +else() + # For Windows, since 32-bit and 64-bit items can co-exist, we build each in its own build directory. + # 32-bit target data goes in build32, and 64-bit target data goes into build. So, include/link the + # appropriate data at build time. + if (DISABLE_BUILDTGT_DIR_DECORATION) + set (BUILDTGT_DIR "") + set (BINDATA_DIR "") + set (LIBSOURCE_DIR "") + elseif (CMAKE_CL_64) + set (BUILDTGT_DIR build) + set (BINDATA_DIR Bin) + set (LIBSOURCE_DIR Lib) + else() + set (BUILDTGT_DIR build32) + set (BINDATA_DIR Bin32) + set (LIBSOURCE_DIR Lib32) + endif() + if(DISABLE_BUILD_PATH_DECORATION) + set (DEBUG_DECORATION "") + set (RELEASE_DECORATION "") + else() + set (DEBUG_DECORATION "Debug") + set (RELEASE_DECORATION "Release") + endif() + +endif() + + option(BUILD_CUBE "Build cube" ON) option(BUILD_VULKANINFO "Build vulkaninfo" ON) option(BUILD_ICD "Build icd" ON) diff --git a/cube/CMakeLists.txt b/cube/CMakeLists.txt index 864b384..58bf965 100644 --- a/cube/CMakeLists.txt +++ b/cube/CMakeLists.txt @@ -113,23 +113,34 @@ file(COPY ${TEXTURES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -if(WIN32) - set (LIBRARIES "Vulkan::Vulkan") -elseif(UNIX) - set (LIBRARIES "Vulkan::Vulkan") +if(APPLE) + # TODO: Set libs for apple else() -endif() + if(DEFINED LOADER_REPO_ROOT) + message(STATUS "Using user-supplied path to locate Vulkan") + if(WIN32) + set (LOADER_SEARCH_PATHS + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${DEBUG_DECORATION}" + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${RELEASE_DECORATION}" + ) + elseif(UNIX) + set (LOADER_SEARCH_PATHS + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader" + ) + endif() -if(WIN32) - # For Windows, since 32-bit and 64-bit items can co-exist, we build each in its own build directory. - # 32-bit target data goes in build32, and 64-bit target data goes into build. So, include/link the - # appropriate data at build time. - if (CMAKE_CL_64) - set (BUILDTGT_DIR build) - else () - set (BUILDTGT_DIR build32) + find_library(LIBVK NAMES vulkan vulkan-1 + HINTS ${LOADER_SEARCH_PATHS} + ) + message(STATUS "Found Vulkan: ${LIBVK}") + else() + message(STATUS "Using find_package to locate Vulkan") + find_package(Vulkan) + set (LIBVK "Vulkan::Vulkan") endif() +endif() +if(WIN32) # Use static MSVCRT libraries foreach(configuration in CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO) @@ -181,7 +192,7 @@ if(APPLE) elseif(NOT WIN32) if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR}) add_executable(cube cube.c ${PROJECT_SOURCE_DIR}/cube/cube.vert ${PROJECT_SOURCE_DIR}/cube/cube.frag cube.vert.inc cube.frag.inc) - target_link_libraries(cube ${LIBRARIES}) + target_link_libraries(cube ${LIBVK}) endif() else() if (CMAKE_CL_64) @@ -191,7 +202,7 @@ else() endif() add_executable(cube WIN32 cube.c ${PROJECT_SOURCE_DIR}/cube/cube.vert ${PROJECT_SOURCE_DIR}/cube/cube.frag cube.vert.inc cube.frag.inc) - target_link_libraries(cube ${LIBRARIES}) + target_link_libraries(cube ${LIBVK}) endif() ###################################################################################### @@ -202,7 +213,7 @@ if(APPLE) elseif(NOT WIN32) if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR}) add_executable(cubepp cube.cpp ${PROJECT_SOURCE_DIR}/cube/cube.vert ${PROJECT_SOURCE_DIR}/cube/cube.frag cube.vert.inc cube.frag.inc) - target_link_libraries(cubepp ${LIBRARIES}) + target_link_libraries(cubepp ${LIBVK}) endif() else() if (CMAKE_CL_64) @@ -212,5 +223,5 @@ else() endif() add_executable(cubepp WIN32 cube.cpp ${PROJECT_SOURCE_DIR}/cube/cube.vert ${PROJECT_SOURCE_DIR}/cube/cube.frag cube.vert.inc cube.frag.inc) - target_link_libraries(cubepp ${LIBRARIES}) + target_link_libraries(cubepp ${LIBVK}) endif() diff --git a/vulkaninfo/CMakeLists.txt b/vulkaninfo/CMakeLists.txt index 74100ad..b13c153 100644 --- a/vulkaninfo/CMakeLists.txt +++ b/vulkaninfo/CMakeLists.txt @@ -15,7 +15,30 @@ if(APPLE) target_link_libraries(${API_LOWERCASE}info ${LIBRARIES} "-framework AppKit -framework QuartzCore") target_include_directories(${API_LOWERCASE}info PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo) else() - target_link_libraries(vulkaninfo Vulkan::Vulkan) + if(DEFINED LOADER_REPO_ROOT) + message(STATUS "Using user-supplied path to locate Vulkan") + if(WIN32) + set (LOADER_SEARCH_PATHS + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${DEBUG_DECORATION}" + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${RELEASE_DECORATION}" + ) + elseif(UNIX) + set (LOADER_SEARCH_PATHS + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader" + ) + endif() + + find_library(LIBVK NAMES vulkan vulkan-1 + HINTS ${LOADER_SEARCH_PATHS} + ) + message(STATUS "Found Vulkan: ${LIBVK}") + target_link_libraries(vulkaninfo ${LIBVK}) + else() + message(STATUS "Using find_package to locate Vulkan") + find_package(Vulkan) + set (LIBVK "Vulkan::Vulkan") + target_link_libraries(vulkaninfo Vulkan::Vulkan) + endif() endif() if(APPLE) -- 2.7.4