roc-streaming / roc-toolkit

Real-time audio streaming over the network.
https://roc-streaming.org
Mozilla Public License 2.0
1.06k stars 213 forks source link

Build instructions in Developer cookbook failing for Arch Linux #531

Closed fastbyt3 closed 1 year ago

fastbyt3 commented 1 year ago

Following command taken from developer-cookbook when executed in Arch fails with error

scons -Q --build-3rdparty=all --enable-werror --enable-debug --enable-tests --enable-benchmarks --enable-examples --enable-doxygen test bench
# ...
sndio.c:(.text+0x1dd): undefined reference to `sio_open'
/usr/bin/ld: sndio.c:(.text+0x1f5): undefined reference to `sio_initpar'
/usr/bin/ld: sndio.c:(.text+0x274): undefined reference to `sio_setpar'
/usr/bin/ld: sndio.c:(.text+0x289): undefined reference to `sio_getpar'
/usr/bin/ld: sndio.c:(.text+0x2f3): undefined reference to `sio_start'
/usr/bin/ld: sndio.c:(.text+0x37d): undefined reference to `sio_close'
/usr/bin/ld: build/3rdparty/x86_64-pc-linux-gnu/gcc-12.2.1-release/sox-14.4.2/lib/libsox.a(libsox_la-sndio.o): in function `stopany':
sndio.c:(.text+0x3bf): undefined reference to `sio_close'

Full output: dev_build_output.log

config.log: config.log

/build/3rdparty/x86_64-pc-linux-gnu/gcc-12.2.1-release/sox-14.4.2/build.log: build.log

gavv commented 1 year ago

Thanks for detailed report, will take a look!

gavv commented 1 year ago

Hi, I was able to reproduce this in docker.

The problem was caused by presence of sndio on your system. If sndio is installed, and when we're building sox (--build-3rdparty-all) sox detects sndio it and uses it, but we don't add it to linker.

I've pushed a fix: now we disable sndio when we're building sox (because it's not actually needed in most cases). If you need sox with sndio enabled, you can use system version of sox instead of letting roc to build it.

gavv commented 1 year ago

@fastbyt3 Would be great if you could re-test fresh develop branch on your machine.

fastbyt3 commented 1 year ago

@gavv just tested the roc-toolkit build on develop branch with developer codebook instruction:

scons -Q --build-3rdparty=all \                                                
  --enable-werror --enable-debug --enable-tests --enable-benchmarks \
  --enable-examples --enable-doxygen test bench

and build was successful and tests got completed. In benchmarks, caught SigABRT

    BENCH   roc_core
2023-05-11T20:27:38+05:30
Running bin/x86_64-pc-linux-gnu/roc-bench-core
Run on (12 X 4500 MHz CPU s)
CPU Caches:
  L1 Data 32 KiB (x6)
  L1 Instruction 32 KiB (x6)
  L2 Unified 256 KiB (x6)
  L3 Unified 12288 KiB (x1)
Load Average: 6.44, 3.69, 1.95
***WARNING*** CPU scaling is enabled, the benchmark real time measurements may be noisy and will incur extra overhead.
----------------------------------------------------------------------------------------------
Benchmark                                                    Time             CPU   Iterations
----------------------------------------------------------------------------------------------
BM_MpscQueue/PushBack/iterations:5000000/threads:1       0.027 us        0.027 us      5000000
BM_MpscQueue/PushBack/iterations:5000000/threads:2       0.053 us        0.106 us     10000000
BM_MpscQueue/PushBack/iterations:5000000/threads:4       0.040 us        0.161 us     20000000
BM_MpscQueue/PushBack/iterations:5000000/threads:8       0.034 us        0.275 us     40000000
BM_MpscQueue/PushBack/iterations:5000000/threads:16      0.030 us        0.372 us     80000000
BM_MpscQueue/TryPopFront/1/iterations:5000000            0.089 us        0.089 us      5000000
BM_MpscQueue/TryPopFront/2/iterations:5000000            0.064 us        0.064 us      5000000
BM_MpscQueue/TryPopFront/4/iterations:5000000            0.114 us        0.114 us      5000000
BM_MpscQueue/TryPopFront/8/iterations:5000000            0.181 us        0.181 us      5000000
BM_MpscQueue/TryPopFront/16/iterations:5000000           0.421 us        0.260 us      5000000
BM_MpscQueue/PopFront/1/iterations:5000000               0.082 us        0.082 us      5000000
BM_MpscQueue/PopFront/2/iterations:5000000               0.066 us        0.066 us      5000000
BM_MpscQueue/PopFront/4/iterations:5000000               0.109 us        0.109 us      5000000
BM_MpscQueue/PopFront/8/iterations:5000000               0.201 us        0.201 us      5000000
BM_MpscQueue/PopFront/16/iterations:5000000              0.417 us        0.270 us      5000000
BM_Random_Fast                                            27.2 ns         27.1 ns     26086588
    BENCH   roc_pipeline
2023-05-11T20:28:23+05:30
Running bin/x86_64-pc-linux-gnu/roc-bench-pipeline
Run on (12 X 4500 MHz CPU s)
CPU Caches:
  L1 Data 32 KiB (x6)
  L1 Instruction 32 KiB (x6)
  L2 Unified 256 KiB (x6)
  L3 Unified 12288 KiB (x1)
Load Average: 7.43, 4.28, 2.23
***WARNING*** CPU scaling is enabled, the benchmark real time measurements may be noisy and will incur extra overhead.
--------------------------------------------------------------------------------------------------------
Benchmark                                                              Time             CPU   Iterations
--------------------------------------------------------------------------------------------------------
BM_PipelineContention/Schedule/iterations:1000000/threads:1        0.131 us        0.130 us      1000000
BM_PipelineContention/Schedule/iterations:1000000/threads:2        0.074 us        0.148 us      2000000
BM_PipelineContention/Schedule/iterations:1000000/threads:4        0.053 us        0.210 us      4000000
BM_PipelineContention/Schedule/iterations:1000000/threads:8        0.035 us        0.280 us      8000000
BM_PipelineContention/Schedule/iterations:1000000/threads:16       0.033 us        0.372 us     16000000
BM_PipelinePeakLoad_NoTasks/iterations:3000/real_time               4999 us         3009 us         3000 fa_avg=1.176 fa_p95=20 fb_avg=2.128 fb_p95=20 pr=0 sc=0 ss=0 t_avg=-nan t_p95=inf tp_frm=-nan tp_plc=-nan
BM_PipelinePeakLoad_PreciseSchedOff/iterations:3000/real_time       4999 us         3017 us         3000 fa_avg=2.344 fa_p95=20 fb_avg=0.58 fb_p95=20 pr=1.535k sc=0 ss=3.002k t_avg=0.096 t_p95=20 tp_frm=0 tp_plc=0.291
pure virtual method called
terminate called without an active exception

ERROR: caught SIGABRT

#1: 0x55e3871fb199 _ZN3roc4core20print_backtrace_safeEv+0x17
#2: 0x55e3871f960a _ZN3roc4core14die_gracefullyEPKcb+0x87
#3: 0x55e3871f90cb _ZN3roc4core12_GLOBAL__N_114signal_handlerEiP9siginfo_tPv+0x31
#4: 0x7f142be4fab0 __sigaction+0x50
#5: 0x7f142be9f26c pthread_key_delete+0x14c
#6: 0x7f142be4fa08 gsignal+0x18
#7: 0x7f142be38538 abort+0xd7
#8: 0x7f142c09ca6f _ZN9__gnu_cxx27__verbose_terminate_handlerEv.cold+0x66
#9: 0x7f142c0b011c _ZN10__cxxabiv111__terminateEPFvvE+0xc
#10: 0x7f142c0b0189 _ZSt9terminatev+0x19
#11: 0x7f142c0b0ec7 __cxa_pure_virtual+0x27
#12: 0x55e3871f33c8 _ZN3roc8pipeline12PipelineLoop13process_task_ERNS0_12PipelineTaskEb+0x8e
#13: 0x55e3871f2cf4 _ZN3roc8pipeline12PipelineLoop20maybe_process_tasks_Ev+0xf8
#14: 0x55e3871f2bcc _ZN3roc8pipeline12PipelineLoop13process_tasksEv+0x18
#15: 0x55e3871ec8c7 _ZN3roc8pipeline12_GLOBAL__N_112TestPipeline14do_processing_ERNS_3ctl11ControlTaskE+0x23
#16: 0x55e3871ed4cc _ZN3roc3ctl19ControlTaskExecutorINS_8pipeline12_GLOBAL__N_112TestPipelineEE12execute_taskERNS0_11Co+0x0
#17: 0x55e3871f04f7 _ZN3roc3ctl16ControlTaskQueue13execute_task_ERNS0_11ControlTaskE+0x187
#18: 0x55e3871f07b6 _ZN3roc3ctl16ControlTaskQueue14process_tasks_Ev+0xaa
#19: 0x55e3871ef319 _ZN3roc3ctl16ControlTaskQueue3runEv+0x7d
#20: 0x55e3871fa189 _ZN3roc4core6Thread14thread_runner_EPv+0x23
#21: 0x7f142be9d44b pthread_condattr_setpshared+0x51b
#22: 0x7f142bf20e40 __clone+0x120
scons: *** [bench/roc_pipeline] Error -6
gavv commented 1 year ago

@fastbyt3 Thanks!

I think crash in benchmarks is not related to archlinux, it seems to be specific to our code. So far I was not able to reproduce it. I've created a separate issue: https://github.com/roc-streaming/roc-toolkit/issues/537

Will close this one, thanks for debugging.