# EWSDR DMR native adapter This optional shared library isolates `mbelib` and the imported DMR core from the Lazarus application. It intentionally does not depend on PulseAudio, ncurses, libsndfile or the DSD-FME command-line frontend. Build on Linux: ```sh cmake -S native/dmr -B build/dmr -DCMAKE_BUILD_TYPE=Release cmake --build build/dmr ``` The Pascal burst/FEC layer extracts three row-major `char[4][24]` AMBE+2 frames from each selected voice-slot burst and feeds them through this ABI. Decoded 8 kHz mono PCM is resampled to EWSDR's 48 kHz speaker/web route. For a build-tree run, either copy `libewsdr_dmr.so` beside the EWSDR executable or add `build/dmr` to `LD_LIBRARY_PATH`. `cmake --install build/dmr` installs the adapter system-wide. The GUI and daemon remain usable (with metadata but no voice) when this optional library is absent. ## Jenkins cross-build for Windows x64 Use `jenkins/build-mbelib-win64.sh` in a Jenkins job that checks out mbelib. It creates `install-win64` with `mbelib.h`, the import library, `libmbe.dll`, and the MinGW runtime DLLs. Configure the mbelib job to archive `install-win64/**`. In the EWSDR job, copy that artifact to `deps/mbelib` and then run `native/dmr/jenkins/build-ewsdr-dmr-win64.sh` before `lazbuild`. The script expects the resulting prefix at `$WORKSPACE/deps/mbelib/install-win64`, builds from `$WORKSPACE/native/dmr`, and stages the DLL bundle in `$WORKSPACE/bin/x86_64-win64` beside the future `ewsdr.exe`. All paths can be overridden with environment variables. Declarative/Scripted Pipeline example for the artifact transfer: ```groovy copyArtifacts( projectName: 'mbelib', selector: lastSuccessful(), filter: 'install-win64/**', target: 'deps/mbelib' ) sh 'native/dmr/jenkins/build-ewsdr-dmr-win64.sh' ```