pipewire/src/tools/meson.build
Christian F.K. Schaller f5259828b6 tools: add pw-avb-virtual for virtual AVB graph nodes
Add a standalone tool that creates virtual AVB talker/listener endpoints
visible in the PipeWire graph (e.g. Helvum). Uses the loopback transport
so no AVB hardware or network access is needed.

The sink node consumes audio silently, the source produces silence.
Supports --milan flag for Milan v1.2 mode and --name for custom node
name prefix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 07:43:19 +00:00

150 lines
4.4 KiB
Meson

tools_sources = [
[ 'pw-mon', [ 'pw-mon.c' ] ],
[ 'pw-config', [ 'pw-config.c' ] ],
[ 'pw-container', [ 'pw-container.c' ] ],
[ 'pw-dot', [ 'pw-dot.c' ] ],
[ 'pw-dump', [ 'pw-dump.c' ] ],
[ 'pw-profiler', [ 'pw-profiler.c' ] ],
[ 'pw-mididump', [ 'pw-mididump.c', 'midifile.c', 'midievent.c', 'midiclip.c' ] ],
[ 'pw-metadata', [ 'pw-metadata.c' ] ],
[ 'pw-loopback', [ 'pw-loopback.c' ] ],
[ 'pw-link', [ 'pw-link.c' ] ],
]
foreach t : tools_sources
executable(t.get(0),
t.get(1),
install: true,
dependencies : [pipewire_dep, mathlib],
)
endforeach
executable('pw-cli',
'pw-cli.c',
install: true,
dependencies: [pipewire_dep, readline_dep]
)
if ncurses_dep.found()
executable('pw-top',
'pw-top.c',
install: true,
dependencies : [pipewire_dep, ncurses_dep],
)
endif
build_pw_cat = false
build_pw_cat_with_ffmpeg = false
pwcat_deps = [ sndfile_dep ]
if get_option('pw-cat').allowed() and sndfile_dep.found()
build_pw_cat = true
if pw_cat_ffmpeg.allowed() and avcodec_dep.found() and avformat_dep.found() and avutil_dep.found()
pwcat_deps += [avcodec_dep, avformat_dep, avutil_dep]
build_pw_cat_with_ffmpeg = true
endif
pwcat_sources = [
'pw-cat.c',
'midifile.c',
'midiclip.c',
'midievent.c',
'dfffile.c',
'dsffile.c',
]
pwcat_aliases = [
'pw-play',
'pw-record',
'pw-midiplay',
'pw-midirecord',
'pw-midi2play',
'pw-midi2record',
'pw-dsdplay',
'pw-encplay',
'pw-sysex',
]
pw_cat = executable('pw-cat',
pwcat_sources,
install: true,
dependencies : [pwcat_deps, pipewire_dep, mathlib],
)
foreach alias : pwcat_aliases
custom_target(
alias,
build_by_default: true,
install: false,
command: [ln, '-sf', meson.project_build_root() + '/@INPUT@', '@OUTPUT@'],
input: pw_cat,
output: alias,
)
install_symlink(
alias,
pointing_to: pw_cat.name(),
install_dir: pipewire_bindir,
)
endforeach
elif not sndfile_dep.found() and get_option('pw-cat').enabled()
error('pw-cat is enabled but required dependency `sndfile` was not found.')
endif
summary({'Build pw-cat tool': build_pw_cat}, bool_yn: true, section: 'pw-cat/pw-play/pw-dump tool')
if build_pw_cat
summary({'Build pw-cat with FFmpeg integration': build_pw_cat_with_ffmpeg}, bool_yn: true, section: 'pw-cat/pw-play/pw-dump tool')
endif
build_avb_virtual = get_option('avb').require(
host_machine.system() == 'linux',
error_message: 'AVB support is only available on Linux'
).allowed()
if build_avb_virtual
avb_tool_inc = include_directories('../modules')
avb_tool_sources = [
'pw-avb-virtual.c',
'../modules/module-avb/avb.c',
'../modules/module-avb/adp.c',
'../modules/module-avb/acmp.c',
'../modules/module-avb/aecp.c',
'../modules/module-avb/aecp-aem.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-available.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-control.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-name.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-clock-source.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-sampling-rate.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-deregister-unsolicited-notifications.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-register-unsolicited-notifications.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-stream-format.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-lock-entity.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-configuration.c',
'../modules/module-avb/aecp-aem-cmds-resps/reply-unsol-helpers.c',
'../modules/module-avb/es-builder.c',
'../modules/module-avb/avdecc.c',
'../modules/module-avb/descriptors.c',
'../modules/module-avb/maap.c',
'../modules/module-avb/mmrp.c',
'../modules/module-avb/mrp.c',
'../modules/module-avb/msrp.c',
'../modules/module-avb/mvrp.c',
'../modules/module-avb/srp.c',
'../modules/module-avb/stream.c',
]
executable('pw-avb-virtual',
avb_tool_sources,
install: true,
include_directories: [configinc, avb_tool_inc],
dependencies: [mathlib, dl_lib, rt_lib, pipewire_dep],
)
endif
if dbus_dep.found()
executable('pw-reserve',
'reserve.h',
'reserve.c',
'pw-reserve.c',
install: true,
dependencies : [dbus_dep, pipewire_dep],
)
endif