Files
LearnOpenGL/CMakeLists.txt
N. Pattakos 47a6664845 fix warning: getenv not secure
Just silence the warning. Yes, the Right Thing to do would be to use the newer and safer ways instead of getenv, but silencing it is simpler and suffices for this project's needs :)
2022-01-08 00:20:23 +01:00

238 lines
7.5 KiB
CMake

cmake_minimum_required (VERSION 3.0)
cmake_policy(VERSION 3.0)
project (LearnOpenGL)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build (Debug or Release)" FORCE)
ENDIF(NOT CMAKE_BUILD_TYPE)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
if(WIN32)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
endif(WIN32)
link_directories(${CMAKE_SOURCE_DIR}/lib)
# find the required packages
find_package(GLM REQUIRED)
message(STATUS "GLM included at ${GLM_INCLUDE_DIR}")
find_package(GLFW3 REQUIRED)
message(STATUS "Found GLFW3 in ${GLFW3_INCLUDE_DIR}")
find_package(ASSIMP REQUIRED)
message(STATUS "Found ASSIMP in ${ASSIMP_INCLUDE_DIR}")
# find_package(SOIL REQUIRED)
# message(STATUS "Found SOIL in ${SOIL_INCLUDE_DIR}")
# find_package(GLEW REQUIRED)
# message(STATUS "Found GLEW in ${GLEW_INCLUDE_DIR}")
if(WIN32)
set(LIBS glfw3 opengl32 assimp freetype irrKlang)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
elseif(UNIX AND NOT APPLE)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
find_package(OpenGL REQUIRED)
add_definitions(${OPENGL_DEFINITIONS})
find_package(X11 REQUIRED)
# note that the order is important for setting the libs
# use pkg-config --libs $(pkg-config --print-requires --print-requires-private glfw3) in a terminal to confirm
set(LIBS ${GLFW3_LIBRARY} X11 Xrandr Xinerama Xi Xxf86vm Xcursor GL dl pthread freetype ${ASSIMP_LIBRARY})
set (CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -ldl")
elseif(APPLE)
INCLUDE_DIRECTORIES(/System/Library/Frameworks)
FIND_LIBRARY(COCOA_LIBRARY Cocoa)
FIND_LIBRARY(OpenGL_LIBRARY OpenGL)
FIND_LIBRARY(IOKit_LIBRARY IOKit)
FIND_LIBRARY(CoreVideo_LIBRARY CoreVideo)
MARK_AS_ADVANCED(COCOA_LIBRARY OpenGL_LIBRARY)
SET(APPLE_LIBS ${COCOA_LIBRARY} ${IOKit_LIBRARY} ${OpenGL_LIBRARY} ${CoreVideo_LIBRARY})
SET(APPLE_LIBS ${APPLE_LIBS} ${GLFW3_LIBRARY} ${ASSIMP_LIBRARY})
set(LIBS ${LIBS} ${APPLE_LIBS})
else()
set(LIBS )
endif(WIN32)
set(CHAPTERS
1.getting_started
2.lighting
3.model_loading
4.advanced_opengl
5.advanced_lighting
6.pbr
7.in_practice
)
set(1.getting_started
1.1.hello_window
1.2.hello_window_clear
2.1.hello_triangle
2.2.hello_triangle_indexed
2.3.hello_triangle_exercise1
2.4.hello_triangle_exercise2
2.5.hello_triangle_exercise3
3.1.shaders_uniform
3.2.shaders_interpolation
3.3.shaders_class
4.1.textures
4.2.textures_combined
4.4.textures_exercise2
4.5.textures_exercise3
4.6.textures_exercise4
5.1.transformations
5.2.transformations_exercise2
6.1.coordinate_systems
6.2.coordinate_systems_depth
6.3.coordinate_systems_multiple
7.1.camera_circle
7.2.camera_keyboard_dt
7.3.camera_mouse_zoom
7.4.camera_class
)
set(2.lighting
1.colors
2.1.basic_lighting_diffuse
2.2.basic_lighting_specular
3.1.materials
3.2.materials_exercise1
4.1.lighting_maps_diffuse_map
4.2.lighting_maps_specular_map
4.4.lighting_maps_exercise4
5.1.light_casters_directional
5.2.light_casters_point
5.3.light_casters_spot
5.4.light_casters_spot_soft
6.multiple_lights
)
set(3.model_loading
1.model_loading
)
set(4.advanced_opengl
1.1.depth_testing
1.2.depth_testing_view
2.stencil_testing
3.1.blending_discard
3.2.blending_sort
5.1.framebuffers
5.2.framebuffers_exercise1
6.1.cubemaps_skybox
6.2.cubemaps_environment_mapping
8.advanced_glsl_ubo
9.1.geometry_shader_houses
9.2.geometry_shader_exploding
9.3.geometry_shader_normals
10.1.instancing_quads
10.2.asteroids
10.3.asteroids_instanced
11.1.anti_aliasing_msaa
11.2.anti_aliasing_offscreen
)
set(5.advanced_lighting
1.advanced_lighting
2.gamma_correction
3.1.1.shadow_mapping_depth
3.1.2.shadow_mapping_base
3.1.3.shadow_mapping
3.2.1.point_shadows
3.2.2.point_shadows_soft
4.normal_mapping
5.1.parallax_mapping
5.2.steep_parallax_mapping
5.3.parallax_occlusion_mapping
6.hdr
7.bloom
8.1.deferred_shading
8.2.deferred_shading_volumes
9.ssao
)
set(6.pbr
1.1.lighting
1.2.lighting_textured
2.1.1.ibl_irradiance_conversion
2.1.2.ibl_irradiance
2.2.1.ibl_specular
2.2.2.ibl_specular_textured
)
set(7.in_practice
1.debugging
2.text_rendering
#3.2d_game
)
configure_file(configuration/root_directory.h.in configuration/root_directory.h)
include_directories(${CMAKE_BINARY_DIR}/configuration)
# first create relevant static libraries requried for other projects
add_library(STB_IMAGE "src/stb_image.cpp")
set(LIBS ${LIBS} STB_IMAGE)
add_library(GLAD "src/glad.c")
set(LIBS ${LIBS} GLAD)
macro(makeLink src dest target)
add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink ${src} ${dest} DEPENDS ${dest} COMMENT "mklink ${src} -> ${dest}")
endmacro()
# then create a project file per tutorial
foreach(CHAPTER ${CHAPTERS})
foreach(DEMO ${${CHAPTER}})
file(GLOB SOURCE
"src/${CHAPTER}/${DEMO}/*.h"
"src/${CHAPTER}/${DEMO}/*.cpp"
"src/${CHAPTER}/${DEMO}/*.vs"
"src/${CHAPTER}/${DEMO}/*.fs"
"src/${CHAPTER}/${DEMO}/*.gs"
)
set(NAME "${CHAPTER}__${DEMO}")
add_executable(${NAME} ${SOURCE})
target_link_libraries(${NAME} ${LIBS})
if(WIN32)
set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${CHAPTER}")
set_target_properties(${NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${CHAPTER}/Debug")
elseif(UNIX AND NOT APPLE)
set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${CHAPTER}")
elseif(APPLE)
set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${CHAPTER}")
set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/bin/${CHAPTER}")
set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/bin/${CHAPTER}")
endif(WIN32)
# copy shader files to build directory
file(GLOB SHADERS
"src/${CHAPTER}/${DEMO}/*.vs"
# "src/${CHAPTER}/${DEMO}/*.frag"
"src/${CHAPTER}/${DEMO}/*.fs"
"src/${CHAPTER}/${DEMO}/*.gs"
)
foreach(SHADER ${SHADERS})
if(WIN32)
# configure_file(${SHADER} "test")
add_custom_command(TARGET ${NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${SHADER} $<TARGET_FILE_DIR:${NAME}>)
elseif(UNIX AND NOT APPLE)
file(COPY ${SHADER} DESTINATION ${CMAKE_SOURCE_DIR}/bin/${CHAPTER})
elseif(APPLE)
# create symbolic link for *.vs *.fs *.gs
get_filename_component(SHADERNAME ${SHADER} NAME)
makeLink(${SHADER} ${CMAKE_SOURCE_DIR}/bin/${CHAPTER}/${SHADERNAME} ${NAME})
endif(WIN32)
endforeach(SHADER)
# if compiling for visual studio, also use configure file for each project (specifically to set up working directory)
if(MSVC)
configure_file(${CMAKE_SOURCE_DIR}/configuration/visualstudio.vcxproj.user.in ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.vcxproj.user @ONLY)
endif(MSVC)
endforeach(DEMO)
endforeach(CHAPTER)
include_directories(${CMAKE_SOURCE_DIR}/includes)