From 206d6ee0b0daa19336b8a6615de6a7202bc23ac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Such=C3=A1nek?= Date: Wed, 30 Apr 2025 20:33:47 +0000 Subject: [PATCH] Set KICAD_USE_EGL automagically Fixes https://gitlab.com/kicad/code/kicad/-/issues/20630 Fixes https://gitlab.com/kicad/code/kicad/-/issues/12543 --- CMakeLists.txt | 104 +++++++++++++++++++------------------- cmake/FindwxWidgets.cmake | 8 +++ 2 files changed, 59 insertions(+), 53 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d6436552f7..34dee8cdfc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,12 +115,6 @@ option( KICAD_UPDATE_CHECK "Build in update check" ON ) -# EGL is only needed on Linux with Wayland -cmake_dependent_option( KICAD_USE_EGL - "Build KiCad with EGL backend support for Wayland." - OFF "UNIX_NOT_APPLE" - OFF) - cmake_dependent_option( KICAD_USE_BUNDLED_GLEW "Use the bundled version of GLEW - only available when KICAD_USE_EGL is set" ON "KICAD_USE_EGL" @@ -286,16 +280,6 @@ add_compile_definitions( $<$:KICAD_GAL_PROFILE> ) add_compile_definitions( $<$:KICAD_WIN32_VERIFY_CODESIGN> ) add_compile_definitions( $<$:KICAD_UPDATE_CHECK> ) -if( KICAD_USE_EGL ) - message( STATUS "Configuring KiCad for the wxGLCanvas EGL backend" ) - add_compile_definitions( KICAD_USE_EGL ) -endif() - -if( KICAD_WAYLAND ) - message( STATUS "Configuring KiCad to support Wayland features" ) - add_compile_definitions( KICAD_WAYLAND ) -endif() - if( KICAD_IPC_API ) add_definitions( -DKICAD_IPC_API ) endif() @@ -755,43 +739,6 @@ if( KICAD_BUILD_I18N ) find_package( Gettext REQUIRED ) endif() -# -# Find OpenGL library, required -# -if( KICAD_USE_EGL ) - find_package( OpenGL REQUIRED COMPONENTS OpenGL EGL ) -else() - set( OpenGL_GL_PREFERENCE "LEGACY" ) # CMake 3.11+ setting; see 'cmake --help-policy CMP0072' - find_package( OpenGL REQUIRED ) -endif() - -# -# Find GLEW library, required -# -# The EGL canvas on GTK requires the use of a GLEW version compiled with an EGL flag. -# The one built in the thirdparty directory has the flag for EGL set, so we use it unless told -# otherwise. Then we search for the system GLEW version and use that instead. -# -if( KICAD_USE_EGL AND KICAD_USE_BUNDLED_GLEW AND UNIX AND NOT APPLE ) - if( OpenGL_EGL_FOUND ) - message( STATUS "Found OpenGL EGL library: ${OPENGL_egl_LIBRARY}" ) - else() - message( FATAL_ERROR "OpenGL EGL library not found" ) - endif() - - # Add the custom GLEW target - add_subdirectory( thirdparty/glew ) - - # Set the standard package variables to point to our custom target to mimic the system version. - set( GLEW_LIBRARIES glew ) - set( GLEW_FOUND TRUE ) - include_directories( SYSTEM $ ) -else() - find_package( GLEW REQUIRED ) - check_find_package_result( GLEW_FOUND "GLEW" ) - include_directories( SYSTEM ${GLEW_INCLUDE_DIR} ) -endif() - # # Find GLM library, required # @@ -1077,6 +1024,8 @@ else() message( FATAL_ERROR "Unable to detect wxWidgets port") endif() +message(STATUS "wxUSE_GLCANVAS_EGL=${wxWidgets_GLCANVAS_EGL}") + if( NOT MSVC ) if( ${wxWidgets_VERSION_STRING} VERSION_LESS 3.2 ) message( FATAL_ERROR "wxWidgets 3.2.0 or greater is required" ) @@ -1093,6 +1042,55 @@ if( MINGW ) endif() endif() +# +# Find OpenGL library, required +# +if( wxWidgets_GLCANVAS_EGL EQUAL 1 ) + set( KICAD_USE_EGL ON ) + find_package( OpenGL REQUIRED COMPONENTS OpenGL EGL ) +else() + set( KICAD_USE_EGL OFF ) + set( OpenGL_GL_PREFERENCE "LEGACY" ) # CMake 3.11+ setting; see 'cmake --help-policy CMP0072' + find_package( OpenGL REQUIRED ) +endif() + +if( KICAD_USE_EGL ) + message( STATUS "Configuring KiCad for the wxGLCanvas EGL backend" ) + add_compile_definitions( KICAD_USE_EGL ) +endif() + +if( KICAD_WAYLAND ) + message( STATUS "Configuring KiCad to support Wayland features" ) + add_compile_definitions( KICAD_WAYLAND ) +endif() + +# +# Find GLEW library, required +# +# The EGL canvas on GTK requires the use of a GLEW version compiled with an EGL flag. +# The one built in the thirdparty directory has the flag for EGL set, so we use it unless told +# otherwise. Then we search for the system GLEW version and use that instead. +# +if( KICAD_USE_EGL AND KICAD_USE_BUNDLED_GLEW ) + if( OpenGL_EGL_FOUND ) + message( STATUS "Found OpenGL EGL library: ${OPENGL_egl_LIBRARY}" ) + else() + message( FATAL_ERROR "OpenGL EGL library not found" ) + endif() + + # Add the custom GLEW target + add_subdirectory( thirdparty/glew ) + + # Set the standard package variables to point to our custom target to mimic the system version. + set( GLEW_LIBRARIES glew ) + set( GLEW_FOUND TRUE ) + include_directories( SYSTEM $ ) +else() + find_package( GLEW REQUIRED ) + check_find_package_result( GLEW_FOUND "GLEW" ) + include_directories( SYSTEM ${GLEW_INCLUDE_DIR} ) +endif() + if( APPLE ) # Remove app bundles in ${KICAD_BIN} before installing anything new. # Must be defined before all includes so that it is executed first. diff --git a/cmake/FindwxWidgets.cmake b/cmake/FindwxWidgets.cmake index 99e403c480..56e2404199 100644 --- a/cmake/FindwxWidgets.cmake +++ b/cmake/FindwxWidgets.cmake @@ -784,6 +784,14 @@ else() DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") + execute_process( + COMMAND sh -c "echo '#include ' ; echo CMAKE_WXTEST_RESULT wxUSE_GLCANVAS_EGL" + COMMAND ${CMAKE_CXX_COMPILER} ${wxWidgets_CXX_FLAGS} -E - + COMMAND grep CMAKE_WXTEST_RESULT + COMMAND cut "-d " -f2 + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE wxWidgets_GLCANVAS_EGL ) + # parse definitions from cxxflags; # drop -D* from CXXFLAGS and the -D prefix string(REGEX MATCHALL "-D[^;]+"