pcbjam/tests/gal-regression/native/CMakeLists.txt
Viktor Vaczi 051fb87cab feat(gal-test): Add 100% GAL API test coverage (28 scenarios)
Expand GAL native test harness from 24 to 28 scenarios covering all 70
GAL methods. New scenarios:

- scenario_text_attrs.cpp (24): Text attribute APIs (SetGlyphSize,
  SetFontBold/Italic/Underlined, SetTextMirrored, justification)
- scenario_glyphs.cpp (25): DrawGlyph/DrawGlyphs with stroke glyphs
- scenario_bitmap.cpp (26): DrawBitmap with test patterns
- scenario_transform.cpp (27): Transform() API documentation

Additional API coverage in existing scenarios:
- Flush() in test harness
- SetFlip(), SetRotation() in screen-transform
- SetDepthRange() in depth-testing
- GetGridPoint() in grid-native

New stub files:
- kifont_stub.h: STROKE_GLYPH factory functions for letter glyphs
- bitmap_base_stub.h: Test pattern generators (checkerboard, gradient)

Note: Bitmap scenario shows empty panels - DrawBitmap uses legacy OpenGL
immediate mode (glBegin/glEnd) which doesn't work while shader is active.
This is a known limitation when testing outside KiCad's VIEW rendering flow.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 12:27:06 +01:00

144 lines
5 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(gal_native_test)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Suppress deprecation warnings on macOS
if(APPLE)
add_compile_definitions(GL_SILENCE_DEPRECATION)
endif()
# Find wxWidgets (system installation)
set(wxWidgets_CONFIG_EXECUTABLE "/opt/homebrew/bin/wx-config")
find_package(wxWidgets REQUIRED COMPONENTS core base gl)
include(${wxWidgets_USE_FILE})
# Find other required packages
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
# KiCad source root
set(KICAD_ROOT ${CMAKE_SOURCE_DIR}/../../../kicad)
# Generated shader files
set(SHADER_SOURCES
${CMAKE_SOURCE_DIR}/generated/glsl_kicad_frag.cpp
${CMAKE_SOURCE_DIR}/generated/glsl_kicad_vert.cpp
${CMAKE_SOURCE_DIR}/generated/glsl_smaa_base.cpp
${CMAKE_SOURCE_DIR}/generated/glsl_smaa_pass_1_frag_color.cpp
${CMAKE_SOURCE_DIR}/generated/glsl_smaa_pass_1_frag_luma.cpp
${CMAKE_SOURCE_DIR}/generated/glsl_smaa_pass_1_vert.cpp
${CMAKE_SOURCE_DIR}/generated/glsl_smaa_pass_2_frag.cpp
${CMAKE_SOURCE_DIR}/generated/glsl_smaa_pass_2_vert.cpp
${CMAKE_SOURCE_DIR}/generated/glsl_smaa_pass_3_frag.cpp
${CMAKE_SOURCE_DIR}/generated/glsl_smaa_pass_3_vert.cpp
)
# KiCad OpenGL GAL sources
set(KICAD_GAL_SOURCES
${KICAD_ROOT}/common/gal/opengl/opengl_gal.cpp
${KICAD_ROOT}/common/gal/opengl/gl_context_mgr.cpp
${KICAD_ROOT}/common/gal/opengl/shader.cpp
${KICAD_ROOT}/common/gal/opengl/vertex_manager.cpp
${KICAD_ROOT}/common/gal/opengl/vertex_item.cpp
${KICAD_ROOT}/common/gal/opengl/vertex_container.cpp
${KICAD_ROOT}/common/gal/opengl/cached_container.cpp
${KICAD_ROOT}/common/gal/opengl/cached_container_gpu.cpp
${KICAD_ROOT}/common/gal/opengl/cached_container_ram.cpp
${KICAD_ROOT}/common/gal/opengl/noncached_container.cpp
${KICAD_ROOT}/common/gal/opengl/gpu_manager.cpp
${KICAD_ROOT}/common/gal/opengl/opengl_compositor.cpp
${KICAD_ROOT}/common/gal/opengl/antialiasing.cpp
${KICAD_ROOT}/common/gal/opengl/utils.cpp
${KICAD_ROOT}/common/gal/opengl/gl_resources.cpp
${KICAD_ROOT}/common/gal/graphics_abstraction_layer.cpp
${KICAD_ROOT}/common/gal/color4d.cpp
${KICAD_ROOT}/common/gal/gal_display_options.cpp
${KICAD_ROOT}/common/gal/hidpi_gl_canvas.cpp
)
# Our stub and test files
set(STUB_SOURCES
${CMAKE_SOURCE_DIR}/kicad_stubs.cpp
${CMAKE_SOURCE_DIR}/gal_test_accessor.cpp
)
# Test scenario files
set(SCENARIO_SOURCES
${CMAKE_SOURCE_DIR}/../scenarios/gal_test_scenarios.cpp
# New modular scenarios
${CMAKE_SOURCE_DIR}/../scenarios/scenario_bezier_curves.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_arc_segments.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_segment_chain.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_group_caching.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_polylines_multi.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_hole_walls.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_grid_native.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_cursor_native.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_render_targets.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_screen_transform.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_clear_colors.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_depth_testing.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_negative_mode.cpp
# Additional scenarios (24-27)
${CMAKE_SOURCE_DIR}/../scenarios/scenario_text_attrs.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_glyphs.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_bitmap.cpp
${CMAKE_SOURCE_DIR}/../scenarios/scenario_transform.cpp
)
# Main executable
add_executable(gal_native_test
gal_native_test.cpp
${STUB_SOURCES}
${SCENARIO_SOURCES}
${KICAD_GAL_SOURCES}
${SHADER_SOURCES}
)
# Include directories - our stubs first, then KiCad, then wxWidgets
target_include_directories(gal_native_test PRIVATE
# Our stubs (for KiCad-specific types not in wxWidgets)
${CMAKE_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/../scenarios
${CMAKE_SOURCE_DIR}/generated
# KiCad includes
${KICAD_ROOT}/include
${KICAD_ROOT}/include/gal
${KICAD_ROOT}/include/gal/opengl
${KICAD_ROOT}/common # For gal/opengl/antialiasing.h
# KiCad libs
${KICAD_ROOT}/libs/kimath/include
${KICAD_ROOT}/libs/kimath/include/math
${KICAD_ROOT}/libs/kimath/include/geometry
${KICAD_ROOT}/libs/core/include
# KiCad thirdparty
${KICAD_ROOT}/thirdparty/thread-pool
# System includes
${OPENGL_INCLUDE_DIR}
${GLEW_INCLUDE_DIRS}
# Homebrew dependencies
/opt/homebrew/include # nlohmann-json, clipper2
)
# Link libraries
target_link_libraries(gal_native_test
${wxWidgets_LIBRARIES}
OpenGL::GL
GLEW::GLEW
)
# Compile definitions
target_compile_definitions(gal_native_test PRIVATE
GAL_TEST_BUILD=1
)
message(STATUS "KiCad root: ${KICAD_ROOT}")
message(STATUS "wxWidgets libraries: ${wxWidgets_LIBRARIES}")
message(STATUS "Building GAL native test with actual KiCad OPENGL_GAL sources")