Improve build system with debug symbols, clean modes, and parallel jobs

- Add build.md documentation for the WASM build system
- Default to debug builds with -gsource-map for WASM debugging
- Add --release flag to disable debug symbols
- Add --clean flag for full rebuild (deps + wxWidgets + KiCad)
- Add -j N flag for parallel compilation (default: 1 for sequential)
- Update Docker memory limit to 32GB
- Propagate DEBUG_BUILD and JOBS to all dependency scripts

Build modes:
- ./docker/build.sh --clean -j8  (full rebuild, parallel)
- ./docker/build.sh              (rebuild KiCad only)
- ./docker/build.sh --no-clean   (incremental)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Viktor Vaczi 2025-12-12 14:51:38 +01:00
commit af2adda002
16 changed files with 398 additions and 44 deletions

View file

@ -63,29 +63,38 @@ if [ ! -f "b2" ]; then
./bootstrap.sh --with-toolset=gcc
fi
# Determine boost variant based on DEBUG_BUILD
if [ "${DEBUG_BUILD:-1}" = "1" ]; then
BOOST_VARIANT="debug"
BOOST_DEBUG_FLAGS="-g -O0"
else
BOOST_VARIANT="release"
BOOST_DEBUG_FLAGS="-O2"
fi
# Create user-config.jam for Emscripten
cat > user-config.jam << 'EOF'
cat > user-config.jam << EOF
using clang : emscripten
: em++
: <cxxflags>"-pthread"
: <cxxflags>"${BOOST_DEBUG_FLAGS} -pthread"
<linkflags>"-pthread"
;
EOF
# Build only the locale library (and its dependencies)
# Most of Boost is header-only, we just need locale built
log_info "Building Boost.Locale..."
JOBS=${JOBS:-$(sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null || echo 4)}
log_info "Building Boost.Locale (${BOOST_VARIANT})..."
# JOBS is set in env.sh (default: 1 for sequential builds, use -j N to override)
./b2 -j${JOBS} \
--user-config=user-config.jam \
--prefix="${SYSROOT}" \
--with-locale \
toolset=clang-emscripten \
variant=release \
variant=${BOOST_VARIANT} \
link=static \
threading=multi \
runtime-link=static \
cxxflags="-pthread" \
cxxflags="${BOOST_DEBUG_FLAGS} -pthread" \
install
create_stamp "${BOOST_STAMP}"

View file

@ -56,6 +56,15 @@ log_info "Building Cairo ${CAIRO_VERSION} for WASM..."
mkdir -p "${CAIRO_BUILD}"
cd "${CAIRO_BUILD}"
# Determine meson build type based on DEBUG_BUILD
if [ "${DEBUG_BUILD:-1}" = "1" ]; then
MESON_BUILD_TYPE="debug"
MESON_DEBUG_FLAGS="'-g', '-O0'"
else
MESON_BUILD_TYPE="release"
MESON_DEBUG_FLAGS="'-O2'"
fi
# Cairo uses meson
cat > cross-file.txt << EOF
[binaries]
@ -81,7 +90,7 @@ pkg_config_libdir = '${SYSROOT}/lib/pkgconfig'
default_library = 'static'
b_staticpic = false
b_pie = false
c_args = ['-pthread', '-I${SYSROOT}/include', '-I${SYSROOT}/include/freetype2', '-I${SYSROOT}/include/pixman-1']
c_args = [${MESON_DEBUG_FLAGS}, '-pthread', '-I${SYSROOT}/include', '-I${SYSROOT}/include/freetype2', '-I${SYSROOT}/include/pixman-1']
c_link_args = ['-pthread', '-L${SYSROOT}/lib']
pkg_config_path = '${SYSROOT}/lib/pkgconfig'
EOF
@ -95,6 +104,7 @@ meson setup "${CAIRO_DIR}" \
--cross-file cross-file.txt \
--prefix="${SYSROOT}" \
--default-library=static \
--buildtype=${MESON_BUILD_TYPE} \
-Dfontconfig=disabled \
-Dfreetype=enabled \
-Dglib=disabled \
@ -108,7 +118,7 @@ meson setup "${CAIRO_DIR}" \
-Dfreetype2:default_library=static \
-Dlibpng:default_library=static
JOBS=${JOBS:-$(sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null || echo 4)}
# JOBS is set in env.sh (default: 1 for sequential builds, use -j N to override)
ninja -j${JOBS}
ninja install

View file

@ -53,9 +53,11 @@ mkdir -p "${FREETYPE_BUILD}"
cd "${FREETYPE_BUILD}"
emcmake cmake "${FREETYPE_DIR}" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE:-Debug} \
-DCMAKE_INSTALL_PREFIX="${SYSROOT}" \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_C_FLAGS="${DEBUG_CFLAGS:--g -O0}" \
-DCMAKE_CXX_FLAGS="${DEBUG_CFLAGS:--g -O0}" \
-DFT_DISABLE_BZIP2=ON \
-DFT_DISABLE_BROTLI=ON \
-DFT_DISABLE_HARFBUZZ=ON \

View file

@ -57,9 +57,11 @@ cd "${HARFBUZZ_BUILD}"
# HarfBuzz uses meson, but also has CMake support
emcmake cmake "${HARFBUZZ_DIR}" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE:-Debug} \
-DCMAKE_INSTALL_PREFIX="${SYSROOT}" \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_C_FLAGS="${DEBUG_CFLAGS:--g -O0}" \
-DCMAKE_CXX_FLAGS="${DEBUG_CFLAGS:--g -O0}" \
-DHB_HAVE_FREETYPE=ON \
-DHB_HAVE_GLIB=OFF \
-DHB_HAVE_ICU=OFF \

View file

@ -53,9 +53,16 @@ mkdir -p "${NGSPICE_BUILD}"
cd "${NGSPICE_BUILD}"
# ngspice uses autoconf
# First we need to configure for shared library mode (libngspice)
export CFLAGS="-pthread"
export CXXFLAGS="-pthread"
# Set compiler flags based on debug mode
if [ "${DEBUG_BUILD:-1}" = "1" ]; then
export CFLAGS="-g -O0 -pthread"
export CXXFLAGS="-g -O0 -pthread"
NGSPICE_DEBUG_FLAG="--enable-debug"
else
export CFLAGS="-O2 -pthread"
export CXXFLAGS="-O2 -pthread"
NGSPICE_DEBUG_FLAG="--disable-debug"
fi
export LDFLAGS="-pthread"
# Configure ngspice as a static library for WASM
@ -67,7 +74,7 @@ emconfigure "${NGSPICE_DIR}/configure" \
--build=$(uname -m)-linux-gnu \
--disable-shared \
--enable-static \
--disable-debug \
${NGSPICE_DEBUG_FLAG} \
--disable-dependency-tracking \
--disable-openmp \
--enable-cider \

View file

@ -61,10 +61,10 @@ cd "${OCC_BUILD}"
# Enable core geometry and data exchange modules only
emcmake cmake "${OCC_DIR}" \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE:-Debug} \
-DCMAKE_INSTALL_PREFIX="${SYSROOT}" \
-DCMAKE_CXX_FLAGS="-pthread -O2" \
-DCMAKE_C_FLAGS="-pthread -O2" \
-DCMAKE_CXX_FLAGS="${DEBUG_CFLAGS:--g -O0} -pthread" \
-DCMAKE_C_FLAGS="${DEBUG_CFLAGS:--g -O0} -pthread" \
-DBUILD_LIBRARY_TYPE=Static \
-DBUILD_MODULE_ApplicationFramework=OFF \
-DBUILD_MODULE_Draw=OFF \

View file

@ -52,6 +52,15 @@ log_info "Building Pixman ${PIXMAN_VERSION} for WASM..."
mkdir -p "${PIXMAN_BUILD}"
cd "${PIXMAN_BUILD}"
# Determine meson build type based on DEBUG_BUILD
if [ "${DEBUG_BUILD:-1}" = "1" ]; then
MESON_BUILD_TYPE="debug"
MESON_DEBUG_FLAGS="'-g', '-O0'"
else
MESON_BUILD_TYPE="release"
MESON_DEBUG_FLAGS="'-O2'"
fi
# Pixman uses meson
cat > cross-file.txt << EOF
[binaries]
@ -68,7 +77,7 @@ cpu = 'wasm32'
endian = 'little'
[built-in options]
c_args = ['-pthread']
c_args = [${MESON_DEBUG_FLAGS}, '-pthread']
c_link_args = ['-pthread']
EOF
@ -76,11 +85,12 @@ meson setup "${PIXMAN_DIR}" \
--cross-file cross-file.txt \
--prefix="${SYSROOT}" \
--default-library=static \
--buildtype=${MESON_BUILD_TYPE} \
-Dgtk=disabled \
-Dlibpng=disabled \
-Dtests=disabled
JOBS=${JOBS:-$(sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null || echo 4)}
# JOBS is set in env.sh (default: 1 for sequential builds, use -j N to override)
ninja -j${JOBS}
ninja install

View file

@ -55,9 +55,10 @@ mkdir -p "${PROTOBUF_BUILD}"
cd "${PROTOBUF_BUILD}"
emcmake cmake "${PROTOBUF_DIR}" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE:-Debug} \
-DCMAKE_INSTALL_PREFIX="${SYSROOT}" \
-DCMAKE_CXX_FLAGS="-pthread" \
-DCMAKE_C_FLAGS="${DEBUG_CFLAGS:--g -O0} -pthread" \
-DCMAKE_CXX_FLAGS="${DEBUG_CFLAGS:--g -O0} -pthread" \
-Dprotobuf_BUILD_TESTS=OFF \
-Dprotobuf_BUILD_EXAMPLES=OFF \
-Dprotobuf_BUILD_PROTOC_BINARIES=OFF \

View file

@ -54,7 +54,7 @@ cd "${ZSTD_BUILD}"
# Zstd uses CMake in build/cmake directory
emcmake cmake "${ZSTD_DIR}/build/cmake" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE:-Debug} \
-DCMAKE_INSTALL_PREFIX="${SYSROOT}" \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DZSTD_BUILD_PROGRAMS=OFF \
@ -62,8 +62,8 @@ emcmake cmake "${ZSTD_DIR}/build/cmake" \
-DZSTD_BUILD_SHARED=OFF \
-DZSTD_BUILD_STATIC=ON \
-DZSTD_MULTITHREAD_SUPPORT=ON \
-DCMAKE_C_FLAGS="-pthread" \
-DCMAKE_CXX_FLAGS="-pthread"
-DCMAKE_C_FLAGS="${DEBUG_CFLAGS:--g -O0} -pthread" \
-DCMAKE_CXX_FLAGS="${DEBUG_CFLAGS:--g -O0} -pthread"
emmake make -j${JOBS}
emmake make install