189 lines
5.0 KiB
CMake
189 lines
5.0 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
|
|
# So library linking is more sane.
|
|
cmake_policy(SET CMP0003 NEW)
|
|
|
|
# So syntax problems are errors.
|
|
cmake_policy(SET CMP0010 NEW)
|
|
|
|
# Input directories must have CMakeLists.txt
|
|
cmake_policy(SET CMP0014 NEW)
|
|
|
|
# Compile definitions.
|
|
cmake_policy(SET CMP0043 NEW)
|
|
|
|
# Use ROOT variables in find_package.
|
|
cmake_policy(SET CMP0074 NEW)
|
|
|
|
# Convert relative paths to absolute in target_sources()
|
|
cmake_policy(SET CMP0076 NEW)
|
|
|
|
# Copy files from source directory to destination directory, substituting any
|
|
# variables. Create destination directory if it does not exist.
|
|
|
|
macro(configure_files srcDir destDir)
|
|
message(STATUS "Configuring directory ${destDir}")
|
|
make_directory(${destDir})
|
|
|
|
file(GLOB templateFiles RELATIVE ${srcDir} ${srcDir}/*)
|
|
foreach(templateFile ${templateFiles})
|
|
set(srcTemplatePath ${srcDir}/${templateFile})
|
|
if(NOT IS_DIRECTORY ${srcTemplatePath})
|
|
message(STATUS "Configuring file ${templateFile}")
|
|
configure_file(
|
|
${srcTemplatePath}
|
|
${destDir}/${templateFile}
|
|
@ONLY)
|
|
endif(NOT IS_DIRECTORY ${srcTemplatePath})
|
|
endforeach(templateFile)
|
|
endmacro(configure_files)
|
|
|
|
# Initialize project
|
|
|
|
project(GPURayTracer)
|
|
|
|
# Add executable
|
|
add_executable(${PROJECT_NAME})
|
|
|
|
set(default_build_type "Release")
|
|
set(CMAKE_BINARY_DIR ${CMAKE_BINARY_DIR}/bin)
|
|
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
|
|
|
# Find GLFW
|
|
|
|
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
|
|
|
#find_path(GLFW_INCLUDE_DIR GLFW/glfw3.h
|
|
#HINTS
|
|
#${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
#${CMAKE_CURRENT_SOURCE_DIR}/lib
|
|
#${GLFW_ROOT}
|
|
#${GLFW_ROOT}/include)
|
|
#
|
|
#if(GLFW_INCLUDE_DIR)
|
|
#message(STATUS "GLFW_INCLUDE_DIR: ${GLFW_INCLUDE_DIR}")
|
|
#else()
|
|
#message(FATAL_ERROR "glfw3.h not found")
|
|
#endif()
|
|
#
|
|
#find_path(GLFW_LIB_DIR glfw3.lib
|
|
#HINTS
|
|
#${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
#${CMAKE_CURRENT_SOURCE_DIR}/lib
|
|
#${GLFW_ROOT}/lib
|
|
#${GLFW_ROOT}/lib-vc2019
|
|
#${GLFW_ROOT}/lib-vc2017
|
|
#${GLFW_ROOT}/lib-vc2015)
|
|
#
|
|
#if(GLFW_LIB_DIR)
|
|
#message(STATUS "GLFW_LIB_DIR: ${GLFW_LIB_DIR}")
|
|
#else()
|
|
#message(FATAL_ERROR "glfw3.lib not found")
|
|
#endif()
|
|
|
|
find_package(glfw3 CONFIG REQUIRED)
|
|
|
|
# Find GLEW
|
|
|
|
# set(GLEW_USE_STATIC_LIBS, true)
|
|
|
|
find_package(GLEW REQUIRED)
|
|
|
|
if(GLEW_FOUND)
|
|
set(GLEW_INCLUDE_DIR ${GLEW_INCLUDE_DIRS})
|
|
#get_filename_component(GLEW_LIBRARIES ${GLEW_LIBRARIES} DIRECTORY)
|
|
message(STATUS "GLEW_INCLUDE_DIR: ${GLEW_INCLUDE_DIR}")
|
|
#message(STATUS "GLEW_LIBRARIES: ${GLEW_LIBRARIES}")
|
|
else()
|
|
message(FATAL_ERROR "GLEW not found")
|
|
endif()
|
|
|
|
# Find OpenGL
|
|
|
|
if(NOT WIN32)
|
|
find_package(OpenGL REQUIRED)
|
|
endif()
|
|
|
|
# Find stb_image
|
|
|
|
find_package(Stb REQUIRED)
|
|
|
|
if(Stb_INCLUDE_DIR)
|
|
message(STATUS "Stb_INCLUDE_DIR: ${Stb_INCLUDE_DIR}")
|
|
else()
|
|
message(FATAL_ERROR "stb_image not found")
|
|
endif()
|
|
|
|
# Find ComputeEngine
|
|
|
|
find_path(ComputeEngine_LIB_DIR
|
|
NAMES
|
|
ComputeEngine.lib
|
|
libComputeEngine.a
|
|
HINTS
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/lib
|
|
${ComputeEngine_ROOT}
|
|
${ComputeEngine_ROOT}/lib
|
|
${ComputeEngine_ROOT}/lib/Release
|
|
${ComputeEngine_ROOT}/build/lib
|
|
${ComputeEngine_ROOT}/build/lib/Release
|
|
ComputeEngine/lib
|
|
ComputeEngine/lib/Release
|
|
ComputeEngine/build/lib
|
|
ComputeEngine/build/lib/Release)
|
|
|
|
if(ComputeEngine_LIB_DIR)
|
|
message(STATUS "ComputeEngine_LIB_DIR: ${ComputeEngine_LIB_DIR}")
|
|
else()
|
|
message(FATAL_ERROR "ComputeEngine.lib not found")
|
|
endif()
|
|
|
|
find_path(ComputeEngine_INCLUDE_DIR ComputeEngine.h
|
|
HINTS
|
|
${CMAKE_CURRENT_SOURCE_DIR}/ComputeEngine/src
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/lib
|
|
${ComputeEngine_ROOT}
|
|
${ComputeEngine_ROOT}/include
|
|
${ComputeEngine_ROOT}/build/include)
|
|
|
|
if(ComputeEngine_INCLUDE_DIR)
|
|
message(STATUS "ComputeEngine_INCLUDE_DIR: ${ComputeEngine_INCLUDE_DIR}")
|
|
else()
|
|
message(FATAL_ERROR "ComputeEngine.h not found")
|
|
endif()
|
|
|
|
message(STATUS "GLFW_INCLUDE_DIR: ${GLFW_INCLUDE_DIR}")
|
|
message(STATUS "OPENGL_INCLUDE_DIR: ${OPENGL_INCLUDE_DIR}")
|
|
message(STATUS "stb_image_INCLUDE_DIR: ${stb_image_INCLUDE_DIR}")
|
|
message(STATUS "GLEW_INCLUDE_DIR: ${GLEW_INCLUDE_DIR}")
|
|
message(STATUS "ComputeEngine_INCLUDE_DIR: ${ComputeEngine_INCLUDE_DIR}")
|
|
# Add source
|
|
|
|
add_subdirectory(src)
|
|
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
${OPENGL_INCLUDE_DIR}
|
|
${Stb_INCLUDE_DIR}
|
|
${ComputeEngine_INCLUDE_DIR}
|
|
${ComputeEngine_INCLUDE_DIRS}
|
|
${GLEW_INCLUDE_DIR}
|
|
${GLEW_INCLUDE_DIRS})
|
|
|
|
target_link_directories(${PROJECT_NAME} PUBLIC ${GLFW_LIB_DIR} ${GLEW_LIBRARIES} ${ComputeEngine_LIB_DIR} ${ComputeEngine_INCLUDE_DIR})
|
|
|
|
if(WIN32)
|
|
target_link_libraries(${PROJECT_NAME} glfw GLEW::GLEW ComputeEngine)
|
|
else()
|
|
target_link_libraries(${PROJECT_NAME} glfw OpenGL::GL GLEW::GLEW ComputeEngine)
|
|
endif()
|
|
|
|
# Copy shaders, assets and configs for binaries to access
|
|
file(COPY shaders DESTINATION ${CMAKE_BINARY_DIR}/Release)
|
|
file(COPY assets DESTINATION ${CMAKE_BINARY_DIR}/Release)
|
|
file(COPY configs DESTINATION ${CMAKE_BINARY_DIR}/Release)
|