ComputePlayground/CMakeLists.txt

168 lines
4.6 KiB
CMake
Raw Normal View History

2022-11-09 23:54:43 +01:00
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)
# Use new OpenGL
cmake_policy(SET CMP0072 NEW)
2022-11-09 23:54:43 +01:00
# 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(ComputePlayground)
# 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_package(glfw3 CONFIG REQUIRED)
2022-11-09 23:54:43 +01:00
# Find GLEW
2022-11-09 23:54:43 +01:00
find_package(GLEW REQUIRED)
if(GLEW_FOUND)
set(GLEW_INCLUDE_DIR ${GLEW_INCLUDE_DIRS})
#get_filename_component(GLEW_LIBRARIES ${GLEW_LIBRARIES} DIRECTORY)
2022-11-09 23:54:43 +01:00
message(STATUS "GLEW_INCLUDE_DIR: ${GLEW_INCLUDE_DIR}")
#message(STATUS "GLEW_LIBRARIES: ${GLEW_LIBRARIES}")
2022-11-09 23:54:43 +01:00
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)
2022-11-09 23:54:43 +01:00
if(Stb_INCLUDE_DIR)
message(STATUS "Stb_INCLUDE_DIR: ${Stb_INCLUDE_DIR}")
2022-11-09 23:54:43 +01:00
else()
message(FATAL_ERROR "stb_image not found")
endif()
find_path(ComputeEngine_LIB_DIR
NAMES
ComputeEngine.lib
libComputeEngine.a
2022-11-09 23:54:43 +01:00
HINTS
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/lib
${ComputeEngine_ROOT}
${ComputeEngine_ROOT}/lib
2022-11-09 23:54:43 +01:00
${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)
2022-11-09 23:54:43 +01:00
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
2022-11-09 23:54:43 +01:00
${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}")
2022-11-09 23:54:43 +01:00
# Add source
add_subdirectory(src)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src
${OPENGL_INCLUDE_DIR}
${Stb_INCLUDE_DIR}
2022-11-09 23:54:43 +01:00
${ComputeEngine_INCLUDE_DIR}
${ComputeEngine_INCLUDE_DIRS}
${GLEW_INCLUDE_DIR}
${GLEW_INCLUDE_DIRS})
2022-11-09 23:54:43 +01:00
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()
2022-11-09 23:54:43 +01:00
# Copy shaders, assets and configs for binaries to access
#file(COPY shaders DESTINATION ${CMAKE_BINARY_DIR}/Release)
#file(COPY shaders DESTINATION ${CMAKE_BINARY_DIR})
add_custom_target(copy_shaders ALL
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_SOURCE_DIR}/shaders" "${CMAKE_BINARY_DIR}/shaders"
COMMENT "Copy shaders to build tree"
VERBATIM)
add_dependencies(${PROJECT_NAME} copy_shaders)