diff --git a/CMakeLists.txt b/CMakeLists.txt index 3aee1f1..30e583f 100644 --- a/CMakeLists.txt +++ b/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() \ No newline at end of file +# 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()