# Local E2E test build (downloads rcheevos tarball)
/build/
/build-app/

# Local signing settings (app/packaging/env.example) and local package output (dist/ also holds tracked files)
/.env
/dist/Virtual Jaguar.app/
/dist/VirtualJaguar-*-local.zip

# Legacy local path (older CI recipe); keep ignored if present
/test_memory_map

# Build artifacts
*.o
*.so
*.dll
*.dylib
*.exe
*.js
*.bc

# ... but the site's committed vendored JS is source, not a build artifact
!site/assets/js/*.js

# Generated by scripts/gen-version-h.sh on every build
src/core/version.h

# macOS
.DS_Store
.build

# IDE / editor
/.claude/*
# ... but repo-checked-in agent skills are source, not local IDE state
!/.claude/skills
/.cursor
/.vscode

# Python virtual environments
.venv*/

# Test binaries and debug artifacts
test/test_blitter_simd
test/test_blitter_scalar
test/test_*
!test/test_*.c
!test/test_*.h
!test/test_*.sh
!test/test_*.py
# Compiled test tools. Enumerating each binary meant every new tool could be
# committed by an unlucky `git add -A` -- and a Mach-O binary tracked into the
# tree makes Linux CI skip the rebuild and fail with "Exec format error".
test/tools/test_*
!test/tools/test_*.c
!test/tools/test_*.h
!test/tools/test_*.sh
!test/tools/test_*.py
# Hand-built tool binaries that don't match the test_* prefix.
tools/jagcd/jagcd-chd-check
tools/jagcd/chdman
tools/jagcd/*.exe
test/tools/blit_memo_verify
test/tools/dsp_halt_backtrace
test/tools/dsp_idle_ab
test/tools/idle_skip_scale_ab
test/tools/dsp_idle_probe_falsify
test/tools/gpu_idle_ab
test/tools/gpu_idle_probe_falsify
test/tools/i2s_lag_probe
test/tools/test_memory_map
test/tools/test_op_gpu_object
test/tools/test_dsp_audio_diag
test/tools/cd_wedge_probe
test/tools/xenowings_ingame_video
test/tools/wmcj_intro_logo
test/tools/fb_flicker_probe
test/tools/fmv_seek_probe
test/tools/sram_test
test/tools/netlink_pair
test/tools/perf_iface_witness
test/tools/netlink_game
test/tools/joymatrix_identity
test/tools/teamtap_rom_probe
test/tools/teamtap_ports
test/tools/mouse_decode_test
test/tools/rotary_decode_test
test/tools/analog_decode_test
test/tools/audio_wav_dump
test/tools/paddle_decode_test
test/tools/procontroller_decode_test
test/tools/sixd_decode_test
test/tools/tuning_identity
test/tools/gdb_determinism_probe
# vjtrace flight-recorder analyzer/smoke tools -- built on demand by
# test/tools/vjtrace_selftest.sh (and by hand per each tool's own header
# comment); never tracked, same Mach-O-on-Linux-CI hazard as above.
test/tools/vjtrace_smoke
test/tools/trace_dump
test/tools/trace_diff
test/tools/field_diff
test/tools/trace_memdiff
test/dump_caller
test/dump_pc
test/heap_search
test/*.dSYM/
test/tools/*.dSYM/

# Test logs
*.log
test/*.log

# SRAM and CDROM save files (left at repo root by test harnesses
# that don't redirect the core's save path)
/*.srm
/*.cdrom.srm

# Test ROMs (keep source scripts, ignore binaries)
test/roms/*.jag
test/roms/*.rom
# The private ROM/disc tree. Both forms are ignored deliberately: the data
# lives OUTSIDE every checkout and this path is a symlink to it, so neither
# the directory nor the link may ever be tracked. A tracked symlink here was
# self-referential and let a forced checkout replace the real directory,
# destroying the collection once already (2026-07-30).
test/roms/private/
test/roms/private

# Reference docs (large PDFs, not source)
docs/atari-jaguar-1999/

# LLDB scripts (local debug helpers)
test/lldb_*.cmd
test/lldb_*.py
/test/tools/test_benchmark
/test/tools/test_blitter_compare
/test/tools/test_screenshot
test/tools/build/

# Acid-test build outputs
test/acid/acid_run
test/acid/tests/**/*.jag

# On-demand JaguarDemos clone (see test/jaguar-demos/PIN). Not a submodule:
# pinning 23 MiB of demo sources into every core clone is unnecessary when
# CI/local fetch can check out one SHA.
test/vendor/

# On-demand Jaguar assembler toolchain clones (see
# tools/jaguar-toolchain/PIN / setup.sh fetch). Same rationale as
# test/vendor/ above: pinned SHAs make the sources reproducible without
# vendoring them into this repo's history.
/tools/vendor/
/test/tools/test_frame_timing
/test/tools/audio_timeline
/test/tools/cd_visual_verify
/test/tools/cue2cdi
/test/tools/fb_row_digest
/test/tools/tom_window_trace
/test/tools/frame_hash_ab
/test/tools/hires_box_check
/test/tools/hires_state_digest
/test/tools/hires_shot
/test/tools/padtest_probe
test/tools/__pycache__/
.build-config
.link-mode

# gcov instrumentation output (make coverage)
*.gcda
*.gcno
coverage.xml
test/tools/netlink_latency
test/tools/netlink_delay_proxy
test/tools/netlink_discover_probe
test/tools/netlink_rebuild_witness
test/tools/netlink_mismatch_witness

# Skip ledger written by `make test` (scripts/test-skip.sh)
test/.skipped-checks

# Created by `make platform=windows_msvc*` on a non-Windows host:
# those blocks run `reg query ... 2>nul`, and outside cmd.exe `nul`
# is a plain file. Committing it makes every Windows checkout fail
# with "error: invalid path 'nul'".
/nul

# Generated static site (scripts/build_site.py output)
/_site/
__pycache__/
/test/tools/cart_boot_probe
/test/tools/counter_rate_scan
/test/tools/gpu_bench_read
/test/tools/gpu_disasm_dump
/test/tools/frame_cost_probe
/test/tools/gpu_pipe_probe
/test/tools/irq_rate_probe
/test/tools/m68k_pc_histogram
/test/tools/risc_backtrace_histogram
/test/tools/risc_pc_histogram
/test/tools/menu_step_probe
/test/tools/present_rate_probe
test/tools/blitter_static_leak
test/tools/voicemodem_pair
test/tools/voicechat_pair
/test/tools/netlink_discover_probe
/test/tools/netlink_rebuild_witness
test/roms/tier1/

# Standalone app (app/): CMake build trees
/app/build*/
