cmake_minimum_required(VERSION 3.0) project(renderer_EGL LANGUAGES C CXX) find_package(PkgConfig) pkg_check_modules(RENDERER_EGL REQUIRED IMPORTED_TARGET egl gl ) pkg_check_modules(RENDERER_EGL_OPT IMPORTED_TARGET wayland-egl ) find_program(AWK NAMES gawk mawk original-awk awk) if(AWK MATCHES ".+-NOTFOUND") message(FATAL_ERROR "FATAL: some known version of awk couldn't be found (${AWK}).") else() message(STATUS "Using awk: ${AWK}") endif() include(MakeObject) function(build_shaders header_dir) file(GLOB headers "${header_dir}/*.h") set(EGL_SHADER_PROCESSED) foreach(shader ${ARGN}) set(out_f "${CMAKE_CURRENT_BINARY_DIR}/${shader}") add_custom_command(OUTPUT "${out_f}" COMMAND "${AWK}" -f "${CMAKE_CURRENT_SOURCE_DIR}/glsl.include.awk" "${CMAKE_CURRENT_SOURCE_DIR}/${shader}" > "${out_f}" MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${shader}" DEPENDS ${headers} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/shader" COMMENT "Preprocessing shader ${shader}" VERBATIM ) endforeach() set(CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}") make_object( EGL_SHADER ${ARGN} ) set(EGL_SHADER_OBJS "${EGL_SHADER_OBJS}" PARENT_SCOPE) set(EGL_SHADER_INCS "${EGL_SHADER_INCS}" PARENT_SCOPE) endfunction() build_shaders( shader shader/desktop.vert shader/desktop_rgb.frag shader/cursor.vert shader/cursor_rgb.frag shader/cursor_mono.frag shader/damage.vert shader/damage.frag shader/basic.vert shader/ffx_cas.frag shader/ffx_fsr1_easu.frag shader/ffx_fsr1_rcas.frag shader/downscale.frag shader/downscale_lanczos2.frag shader/downscale_linear.frag ) make_defines( "${CMAKE_CURRENT_SOURCE_DIR}/shader/desktop_rgb.frag" "${CMAKE_CURRENT_BINARY_DIR}/shader/desktop_rgb.def.h" ) add_library(renderer_EGL STATIC egl.c egldebug.c shader.c texture_util.c texture.c texture_buffer.c texture_framebuffer.c texture_dmabuf.c model.c desktop.c desktop_rects.c cursor.c draw.c damage.c framebuffer.c postprocess.c ffx.c filter.c filter_ffx_cas.c filter_ffx_fsr1.c filter_downscale.c ${EGL_SHADER_OBJS} "${CMAKE_CURRENT_BINARY_DIR}/shader/desktop_rgb.def.h" ${PROJECT_TOP}/repos/cimgui/imgui/backends/imgui_impl_opengl3.cpp ) target_compile_definitions(renderer_EGL PRIVATE CIMGUI_DEFINE_ENUMS_AND_STRUCTS=1 IMGUI_IMPL_OPENGL_ES3) target_link_libraries(renderer_EGL PkgConfig::RENDERER_EGL lg_common cimgui ) if(RENDERER_EGL_OPT_FOUND) target_link_libraries(renderer_EGL PkgConfig::RENDERER_EGL_OPT ) endif() target_include_directories(renderer_EGL PRIVATE src ${EGL_SHADER_INCS} )