mirror of
https://github.com/guezoloic/LearnOpenGL.git
synced 2026-01-25 04:34:14 +00:00
99 lines
2.4 KiB
CMake
99 lines
2.4 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
project(learnopengl)
|
|
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
file(GLOB_RECURSE CPP_SOURCES CONFIGURE_DEPENDS "src/*.cpp" "src/**/*.cpp ")
|
|
|
|
# GLAD (add C file)
|
|
list(APPEND CPP_SOURCES "lib/glad/src/glad.c")
|
|
|
|
# ImGUI (add CPP files)
|
|
set(IMGUI_SOURCES
|
|
"lib/imgui/imgui.cpp"
|
|
"lib/imgui/imgui_draw.cpp"
|
|
"lib/imgui/imgui_tables.cpp"
|
|
"lib/imgui/imgui_widgets.cpp"
|
|
"lib/imgui/backends/imgui_impl_glfw.cpp"
|
|
"lib/imgui/backends/imgui_impl_opengl3.cpp"
|
|
)
|
|
|
|
list(APPEND CPP_SOURCES ${IMGUI_SOURCES})
|
|
# find shader files
|
|
file(GLOB_RECURSE SHADERS CONFIGURE_DEPENDS
|
|
"res/**/*.frag"
|
|
"res/**/*.vert"
|
|
"res/**/*.glsl"
|
|
)
|
|
list(REMOVE_DUPLICATES SHADERS)
|
|
|
|
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/shaders)
|
|
|
|
set(SHADER_C_FILES)
|
|
foreach(SHADER ${SHADERS})
|
|
get_filename_component(NAME_WE ${SHADER} NAME_WE)
|
|
get_filename_component(EXT ${SHADER} EXT)
|
|
string(REPLACE "." "_" EXT_SAFE ${EXT})
|
|
set(OUTPUT_C ${CMAKE_BINARY_DIR}/shaders/${NAME_WE}${EXT_SAFE}.c)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${OUTPUT_C}
|
|
COMMAND python3
|
|
${CMAKE_SOURCE_DIR}/glsl2c.py
|
|
${SHADER}
|
|
${OUTPUT_C}
|
|
DEPENDS ${SHADER}
|
|
${CMAKE_SOURCE_DIR}/glsl2c.py
|
|
COMMENT "Converting shader ${NAME_WE}${EXT} to C file"
|
|
VERBATIM
|
|
)
|
|
|
|
list(APPEND SHADER_C_FILES ${OUTPUT_C})
|
|
endforeach()
|
|
|
|
add_custom_target(Shaders ALL DEPENDS ${SHADER_C_FILES})
|
|
|
|
add_executable(main ${CPP_SOURCES} ${SHADER_C_FILES})
|
|
add_definitions(-g)
|
|
|
|
add_dependencies(main Shaders)
|
|
|
|
target_include_directories(main PRIVATE
|
|
inc # project
|
|
res/inc # ressources (primitive)
|
|
lib/glad/include # glad
|
|
lib/glfw/include # glfw
|
|
lib/glm # glm
|
|
lib/imgui # imgui
|
|
lib/imgui/backends # imgui backends
|
|
lib/stb # stb
|
|
)
|
|
|
|
# GLFW (remove all flags)
|
|
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
|
add_subdirectory(lib/glfw)
|
|
|
|
target_link_libraries(main PRIVATE glfw)
|
|
|
|
# search for OpenGL libs
|
|
find_package(OpenGL REQUIRED)
|
|
target_link_libraries(main PRIVATE OpenGL::GL)
|
|
|
|
# find OpenGL dependancies
|
|
if(APPLE) # MacOS
|
|
target_link_libraries(main PRIVATE
|
|
"-framework Cocoa" "-framework IOKit" "-framework CoreVideo"
|
|
)
|
|
elseif(WIN32) # Windows
|
|
target_link_libraries(main PRIVATE
|
|
opengl32 gdi32 user32 shell32
|
|
)
|
|
elseif(UNIX) # Most UNIX computer
|
|
target_link_libraries(main PRIVATE
|
|
X11 pthread dl m
|
|
)
|
|
endif()
|