From a3478fe3a5431b8a42b430dc302a7d237c638342 Mon Sep 17 00:00:00 2001 From: Istvan Matejcsok <119620946+matejcsok-ee@users.noreply.github.com> Date: Mon, 22 Jun 2026 17:14:08 +0200 Subject: [PATCH] refactor(cmake): de-churn batches A-E (fork-cleanup doc 02) - KICAD_WASM_LAYER cache var replaces 25 ${CMAKE_SOURCE_DIR}/../wasm reach-outs - pcbnew Python install: wrap-and-reindent -> early-return guard - list(REMOVE_ITEM) for PCBNEW_IO_LIBRARIES (cache-FORCE), eeschema importers, GAL_SRCS - add_shader redefined via wasm/cmake/WasmShaderOverride.cmake (upstream calls reused) - additive BUILD_KIWAY_DLL property overrides; api kiapi type var - pcb_calculator whole-file fork -> wasm block + guarded native body Upstream-byte-identical where possible. WASM build + e2e (9/9, -O1) verified. Co-Authored-By: Claude Opus 4.8 (1M context) --- kicad | 2 +- wasm/cmake/WasmShaderOverride.cmake | 56 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 wasm/cmake/WasmShaderOverride.cmake diff --git a/kicad b/kicad index a2c634f..b5ac6dc 160000 --- a/kicad +++ b/kicad @@ -1 +1 @@ -Subproject commit a2c634f2f5f061ce13dc09fae3801c618f2a9f81 +Subproject commit b5ac6dcbe40defcfa21938de80cd6d4ce3a23711 diff --git a/wasm/cmake/WasmShaderOverride.cmake b/wasm/cmake/WasmShaderOverride.cmake new file mode 100644 index 0000000..e90d229 --- /dev/null +++ b/wasm/cmake/WasmShaderOverride.cmake @@ -0,0 +1,56 @@ +# WASM shader override. +# +# Redefines add_shader() to convert GLSL 1.20 -> GLSL ES 3.0 before embedding the shader as a +# C++ string, so common/gal/CMakeLists.txt's unconditional add_shader() calls produce ES3 +# shaders on Emscripten while native keeps the upstream GLSL-1.20 path. The later definition +# wins, so this file must be include()d AFTER upstream's add_shader() definition and BEFORE the +# add_shader() calls. (Same conversion as tests/gal-regression/wasm/generate_shaders.py.) +# +# include()d (not add_subdirectory'd) from common/gal/CMakeLists.txt, so ${CMAKE_CURRENT_SOURCE_DIR} +# / ${CMAKE_CURRENT_BINARY_DIR} below resolve to that directory, exactly as the inline fork did. + +find_program( PYTHON3_EXECUTABLE python3 REQUIRED ) + +function( add_shader outTarget inFile shaderName ) + # Determine shader type from filename + string(FIND "${inFile}" "frag" _is_frag) + if(_is_frag GREATER -1) + set(SHADER_TYPE "fragment") + else() + set(SHADER_TYPE "vertex") + endif() + + set(es3GlslFile "${CMAKE_CURRENT_BINARY_DIR}/${shaderName}_es3.glsl") + set(outCppName "${shaderName}.cpp") + set(outHeaderName "${shaderName}.h") + + # Step 1: Convert GLSL 120 -> ES 3.0 + add_custom_command( + OUTPUT ${es3GlslFile} + COMMAND ${PYTHON3_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/shaders/convert_glsl_es3.py + ${CMAKE_CURRENT_SOURCE_DIR}/shaders/${inFile} + ${es3GlslFile} + ${SHADER_TYPE} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/shaders/${inFile} + ${CMAKE_CURRENT_SOURCE_DIR}/shaders/convert_glsl_es3.py + ) + + # Step 2: Embed as C++ string (same as native path) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${outCppName} + ${CMAKE_BINARY_DIR}/include/gal/shaders/${outHeaderName} + COMMAND ${CMAKE_COMMAND} + -DSOURCE_FILE="${es3GlslFile}" + -DOUT_CPP_DIR="${CMAKE_CURRENT_BINARY_DIR}/" + -DOUT_HEADER_DIR="${CMAKE_BINARY_DIR}/include/gal/shaders/" + -DOUT_CPP_FILENAME="${outCppName}" + -DOUT_HEADER_FILENAME="${outHeaderName}" + -DOUT_VAR_NAME="${shaderName}" + -P ${KICAD_CMAKE_MODULE_PATH}/BuildSteps/CreateShaderCpp.cmake + DEPENDS ${es3GlslFile} + ) + + target_sources( ${outTarget} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${outCppName} ) + target_include_directories( ${outTarget} PUBLIC ${CMAKE_BINARY_DIR}/include/gal/shaders/ ) +endfunction()