mirror of
https://github.com/guezoloic/LearnOpenGL.git
synced 2026-01-25 01:34:15 +00:00
rework(CMakeLists): rework file and add shader compilation
This commit is contained in:
103
CMakeLists.txt
103
CMakeLists.txt
@@ -1,55 +1,84 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(learnopengl)
|
||||
project(OpenGL_Minecraft)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
file(GLOB_RECURSE CPP_SOURCES CONFIGURE_DEPENDS src/*.cpp)
|
||||
file(GLOB_RECURSE CPP_HEADERS CONFIGURE_DEPENDS src/*.hpp)
|
||||
file(GLOB_RECURSE CPP_SOURCES CONFIGURE_DEPENDS "src/*.cpp" "src/**/*.cpp")
|
||||
|
||||
# GLAD (add C file)
|
||||
list(APPEND CPP_SOURCES lib/glad/src/glad.c)
|
||||
add_executable(main ${CPP_SOURCES} ${CPP_HEADERS})
|
||||
|
||||
# GLFW
|
||||
# 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})
|
||||
message(${SHADER})
|
||||
|
||||
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 ${SHADER} to CPP"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
list(APPEND SHADER_C_FILES ${OUTPUT_C})
|
||||
endforeach()
|
||||
|
||||
add_executable(main ${CPP_SOURCES} ${SHADER_C_FILES})
|
||||
add_definitions(-g)
|
||||
|
||||
target_include_directories(main PRIVATE
|
||||
inc # project
|
||||
res/render # ressources (primitive)
|
||||
lib/glad/include # glad
|
||||
lib/glfw/include # glfw
|
||||
lib/glm # glm
|
||||
lib/imgui # imgui
|
||||
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)
|
||||
|
||||
# GLAD
|
||||
target_include_directories(main PRIVATE lib/glad/include)
|
||||
|
||||
# GLM
|
||||
target_include_directories(main PRIVATE lib/glm)
|
||||
|
||||
# STB
|
||||
target_include_directories(main PRIVATE lib/stb)
|
||||
|
||||
target_include_directories(main PRIVATE inc/)
|
||||
|
||||
target_link_libraries(main PRIVATE glfw)
|
||||
|
||||
# search for OpenGL libs
|
||||
find_package(OpenGL REQUIRED)
|
||||
target_link_libraries(main PRIVATE OpenGL::GL)
|
||||
|
||||
if(APPLE)
|
||||
target_link_libraries(main PRIVATE
|
||||
"-framework Cocoa"
|
||||
"-framework IOKit"
|
||||
"-framework CoreVideo"
|
||||
)
|
||||
elseif(WIN32)
|
||||
target_link_libraries(main PRIVATE
|
||||
opengl32
|
||||
gdi32
|
||||
user32
|
||||
shell32
|
||||
)
|
||||
elseif(UNIX)
|
||||
target_link_libraries(main PRIVATE
|
||||
X11
|
||||
pthread
|
||||
dl
|
||||
m
|
||||
)
|
||||
endif()
|
||||
# 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()
|
||||
|
||||
Reference in New Issue
Block a user