-
Notifications
You must be signed in to change notification settings - Fork 6.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[speexdsp] Update CMake script for macOS/Linux #14758
Conversation
The CI ran into an error for the Windows builds. I don't get what's going on or what the appropriate fix should be. The error is as follows:
I'm not sure why it would have permission errors, but I'm looking into changing the output location for the EDIT: While writing this I had a realization of what I should do to fix this. I've pushed the change, so if I'm correct, the CI error should be gone now. |
56e9f01
to
9aaf27b
Compare
The CI had build errors for the Windows ARM targets. Apparently the Neon support in SpeexDSP is written for GCC's inline ASM syntax and is not compatible with MSVC. I updated the portfile to not enable the explicit Neon optimizations when using MSVC. |
Cool, thanks @LRFLEW ! |
The linux build of speexdsp still fails for me; it was missed here because |
From most recent completed nightly build: https://dev.azure.com/vcpkg/public/_build/results?buildId=46182 PASSING, REMOVE FROM FAIL LIST: ignition-msgs5:x64-linux (.\scripts\ci.baseline.txt) I'm assuming this got fixed by @strega-nil 's llvm changes: microsoft#14399 PASSING, REMOVE FROM FAIL LIST: libraqm:x64-windows-static (.\scripts\ci.baseline.txt) Cause unknown. PASSING, REMOVE FROM FAIL LIST: openssl-windows:arm-uwp (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: openssl-windows:x64-uwp (.\scripts\ci.baseline.txt) Probably fixed by microsoft#14308 ; also removed Supports: excluded entries for these. PASSING, REMOVE FROM FAIL LIST: speexdsp:x64-osx (.\scripts\ci.baseline.txt) Probably fixed by microsoft#14758 PASSING, REMOVE FROM FAIL LIST: sundials:arm64-windows (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: sundials:x64-windows (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: sundials:x86-windows (.\scripts\ci.baseline.txt) Probably fixed by microsoft#14618 PASSING, REMOVE FROM FAIL LIST: wepoll:arm-uwp (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: wepoll:x64-uwp (.\scripts\ci.baseline.txt) Probably fixed by microsoft#14456 -- and also fixed missing Supports. REGRESSION: ceres:x64-windows. If expected, add ceres:x64-windows=fail to .\scripts\ci.baseline.txt. REGRESSION: ceres:x86-windows. If expected, add ceres:x86-windows=fail to .\scripts\ci.baseline.txt. Probably broken by microsoft#14719 ; ceres has: ``` if (BUILD_BENCHMARKS) find_package(benchmark QUIET) if (benchmark_FOUND) message("-- Found Google benchmark library. Building Ceres benchmarks.") else() message("-- Failed to find Google benchmark library, disabling build of benchmarks.") update_cache_variable(BUILD_BENCHMARKS OFF) endif() mark_as_advanced(benchmark_DIR) endif() ``` so it passed there because Google Benchmark was not also installed. Worked around by `-DBUILD_BENCHMARKS=OFF`. REGRESSION: dirent:arm64-windows. If expected, add dirent:arm64-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Downloading https://github.com/tronkko/dirent/archive/1.23.2.tar.gz... -- Downloading https://github.com/tronkko/dirent/archive/1.23.2.tar.gz... Failed. Status: 28;"Timeout was reached" CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:184 (message): ``` REGRESSION: discord-rpc:arm64-windows. If expected, add discord-rpc:arm64-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Downloading https://github.com/discordapp/discord-rpc/archive/v3.4.0.tar.gz... -- Downloading https://github.com/discordapp/discord-rpc/archive/v3.4.0.tar.gz... Failed. Status: 28;"Timeout was reached" CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:184 (message): ``` REGRESSION: libunibreak:x86-windows. If expected, add libunibreak:x86-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Note: libunibreak only supports static library linkage. Building static library. -- Downloading https://github.com/adah1972/libunibreak/archive/8df6ef4ebe5dbd2a49539d05366337ab7fb57ae3.tar.gz... -- Downloading https://github.com/adah1972/libunibreak/archive/8df6ef4ebe5dbd2a49539d05366337ab7fb57ae3.tar.gz... Failed. Status: 28;"Timeout was reached" ``` REGRESSION: libzip:x86-windows. If expected, add libzip:x86-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Downloading https://github.com/nih-at/libzip/archive/66e496489bdae81bfda8b0088172871d8fda0032.tar.gz... -- Downloading https://github.com/nih-at/libzip/archive/66e496489bdae81bfda8b0088172871d8fda0032.tar.gz... Failed. Status: 28;"Timeout was reached" CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:184 (message): ``` REGRESSION: ocilib:x64-windows-static. If expected, add ocilib:x64-windows-static=fail to .\scripts\ci.baseline.txt. Probably broken by microsoft#13158 but it passed there: (Link target) -> chromium_base.lib(stack_trace_win.obj) : error LNK2001: unresolved external symbol __imp_SymCleanup [D:\buildtrees\ocilib\x64-windows-static-rel\4fc7a69e6d-337dbe59ca.clean\proj\dll\ocilib_dll_vs2019.vcxproj] Looks like it was skipped before that PR because the port conflicts with chromium-base which couldn't have been caught in that PR. Putting it back on ci.baseline.txt. REGRESSION: osgearth:x64-windows. If expected, add osgearth:x64-windows=fail to .\scripts\ci.baseline.txt. REGRESSION: osgearth:x86-windows. If expected, add osgearth:x86-windows=fail to .\scripts\ci.baseline.txt. Cause unknown. I think we should skip this one in ci.baseline.txt since I've never seen it work OK. REGRESSION: qt5-tools:x64-windows-static. If expected, add qt5-tools:x64-windows-static=fail to .\scripts\ci.baseline.txt. Last I heard @ras0219 was investigating this one but that's been a while now. I pinged him again.
From most recent completed nightly build: https://dev.azure.com/vcpkg/public/_build/results?buildId=46182 PASSING, REMOVE FROM FAIL LIST: ignition-msgs5:x64-linux (.\scripts\ci.baseline.txt) I'm assuming this got fixed by @strega-nil 's llvm changes: #14399 PASSING, REMOVE FROM FAIL LIST: libraqm:x64-windows-static (.\scripts\ci.baseline.txt) Cause unknown. PASSING, REMOVE FROM FAIL LIST: openssl-windows:arm-uwp (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: openssl-windows:x64-uwp (.\scripts\ci.baseline.txt) Probably fixed by #14308 ; also removed Supports: excluded entries for these. PASSING, REMOVE FROM FAIL LIST: speexdsp:x64-osx (.\scripts\ci.baseline.txt) Probably fixed by #14758 PASSING, REMOVE FROM FAIL LIST: sundials:arm64-windows (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: sundials:x64-windows (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: sundials:x86-windows (.\scripts\ci.baseline.txt) Probably fixed by #14618 PASSING, REMOVE FROM FAIL LIST: wepoll:arm-uwp (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: wepoll:x64-uwp (.\scripts\ci.baseline.txt) Probably fixed by #14456 -- and also fixed missing Supports. REGRESSION: ceres:x64-windows. If expected, add ceres:x64-windows=fail to .\scripts\ci.baseline.txt. REGRESSION: ceres:x86-windows. If expected, add ceres:x86-windows=fail to .\scripts\ci.baseline.txt. Probably broken by #14719 ; ceres has: ``` if (BUILD_BENCHMARKS) find_package(benchmark QUIET) if (benchmark_FOUND) message("-- Found Google benchmark library. Building Ceres benchmarks.") else() message("-- Failed to find Google benchmark library, disabling build of benchmarks.") update_cache_variable(BUILD_BENCHMARKS OFF) endif() mark_as_advanced(benchmark_DIR) endif() ``` so it passed there because Google Benchmark was not also installed. Worked around by `-DBUILD_BENCHMARKS=OFF`. REGRESSION: dirent:arm64-windows. If expected, add dirent:arm64-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Downloading https://github.com/tronkko/dirent/archive/1.23.2.tar.gz... -- Downloading https://github.com/tronkko/dirent/archive/1.23.2.tar.gz... Failed. Status: 28;"Timeout was reached" CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:184 (message): ``` REGRESSION: discord-rpc:arm64-windows. If expected, add discord-rpc:arm64-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Downloading https://github.com/discordapp/discord-rpc/archive/v3.4.0.tar.gz... -- Downloading https://github.com/discordapp/discord-rpc/archive/v3.4.0.tar.gz... Failed. Status: 28;"Timeout was reached" CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:184 (message): ``` REGRESSION: libunibreak:x86-windows. If expected, add libunibreak:x86-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Note: libunibreak only supports static library linkage. Building static library. -- Downloading https://github.com/adah1972/libunibreak/archive/8df6ef4ebe5dbd2a49539d05366337ab7fb57ae3.tar.gz... -- Downloading https://github.com/adah1972/libunibreak/archive/8df6ef4ebe5dbd2a49539d05366337ab7fb57ae3.tar.gz... Failed. Status: 28;"Timeout was reached" ``` REGRESSION: libzip:x86-windows. If expected, add libzip:x86-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Downloading https://github.com/nih-at/libzip/archive/66e496489bdae81bfda8b0088172871d8fda0032.tar.gz... -- Downloading https://github.com/nih-at/libzip/archive/66e496489bdae81bfda8b0088172871d8fda0032.tar.gz... Failed. Status: 28;"Timeout was reached" CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:184 (message): ``` REGRESSION: ocilib:x64-windows-static. If expected, add ocilib:x64-windows-static=fail to .\scripts\ci.baseline.txt. Probably broken by #13158 but it passed there: (Link target) -> chromium_base.lib(stack_trace_win.obj) : error LNK2001: unresolved external symbol __imp_SymCleanup [D:\buildtrees\ocilib\x64-windows-static-rel\4fc7a69e6d-337dbe59ca.clean\proj\dll\ocilib_dll_vs2019.vcxproj] Looks like it was skipped before that PR because the port conflicts with chromium-base which couldn't have been caught in that PR. Putting it back on ci.baseline.txt. REGRESSION: osgearth:x64-windows. If expected, add osgearth:x64-windows=fail to .\scripts\ci.baseline.txt. REGRESSION: osgearth:x86-windows. If expected, add osgearth:x86-windows=fail to .\scripts\ci.baseline.txt. Cause unknown. I think we should skip this one in ci.baseline.txt since I've never seen it work OK. REGRESSION: qt5-tools:x64-windows-static. If expected, add qt5-tools:x64-windows-static=fail to .\scripts\ci.baseline.txt. Last I heard @ras0219 was investigating this one but that's been a while now. I pinged him again.
@BillyONeal I was working on a macOS machine, so I hadn't tested it on Linux myself. I had assumed that it would work based on my analysis of the automake script. If you can provide logs of the errors you're getting, I can take a look. Otherwise, I'll see if I get issues in a Docker instance, but it might take me some time to get around to it. |
@LRFLEW Here you go:
To be clear, I don't think we're clamoring to do anything specifically here; this port has always been in ci.baseline.txt. Just letting you know in case you were depending on that to work. |
I had added handling for
I'm not depending on Linux support for what I'm doing, but I was intending on making Linux support work, and I don't mind taking time to see that through. |
From most recent completed nightly build: https://dev.azure.com/vcpkg/public/_build/results?buildId=46182 PASSING, REMOVE FROM FAIL LIST: ignition-msgs5:x64-linux (.\scripts\ci.baseline.txt) I'm assuming this got fixed by @strega-nil 's llvm changes: microsoft/vcpkg#14399 PASSING, REMOVE FROM FAIL LIST: libraqm:x64-windows-static (.\scripts\ci.baseline.txt) Cause unknown. PASSING, REMOVE FROM FAIL LIST: openssl-windows:arm-uwp (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: openssl-windows:x64-uwp (.\scripts\ci.baseline.txt) Probably fixed by microsoft/vcpkg#14308 ; also removed Supports: excluded entries for these. PASSING, REMOVE FROM FAIL LIST: speexdsp:x64-osx (.\scripts\ci.baseline.txt) Probably fixed by microsoft/vcpkg#14758 PASSING, REMOVE FROM FAIL LIST: sundials:arm64-windows (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: sundials:x64-windows (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: sundials:x86-windows (.\scripts\ci.baseline.txt) Probably fixed by microsoft/vcpkg#14618 PASSING, REMOVE FROM FAIL LIST: wepoll:arm-uwp (.\scripts\ci.baseline.txt) PASSING, REMOVE FROM FAIL LIST: wepoll:x64-uwp (.\scripts\ci.baseline.txt) Probably fixed by microsoft/vcpkg#14456 -- and also fixed missing Supports. REGRESSION: ceres:x64-windows. If expected, add ceres:x64-windows=fail to .\scripts\ci.baseline.txt. REGRESSION: ceres:x86-windows. If expected, add ceres:x86-windows=fail to .\scripts\ci.baseline.txt. Probably broken by microsoft/vcpkg#14719 ; ceres has: ``` if (BUILD_BENCHMARKS) find_package(benchmark QUIET) if (benchmark_FOUND) message("-- Found Google benchmark library. Building Ceres benchmarks.") else() message("-- Failed to find Google benchmark library, disabling build of benchmarks.") update_cache_variable(BUILD_BENCHMARKS OFF) endif() mark_as_advanced(benchmark_DIR) endif() ``` so it passed there because Google Benchmark was not also installed. Worked around by `-DBUILD_BENCHMARKS=OFF`. REGRESSION: dirent:arm64-windows. If expected, add dirent:arm64-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Downloading https://github.com/tronkko/dirent/archive/1.23.2.tar.gz... -- Downloading https://github.com/tronkko/dirent/archive/1.23.2.tar.gz... Failed. Status: 28;"Timeout was reached" CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:184 (message): ``` REGRESSION: discord-rpc:arm64-windows. If expected, add discord-rpc:arm64-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Downloading https://github.com/discordapp/discord-rpc/archive/v3.4.0.tar.gz... -- Downloading https://github.com/discordapp/discord-rpc/archive/v3.4.0.tar.gz... Failed. Status: 28;"Timeout was reached" CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:184 (message): ``` REGRESSION: libunibreak:x86-windows. If expected, add libunibreak:x86-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Note: libunibreak only supports static library linkage. Building static library. -- Downloading https://github.com/adah1972/libunibreak/archive/8df6ef4ebe5dbd2a49539d05366337ab7fb57ae3.tar.gz... -- Downloading https://github.com/adah1972/libunibreak/archive/8df6ef4ebe5dbd2a49539d05366337ab7fb57ae3.tar.gz... Failed. Status: 28;"Timeout was reached" ``` REGRESSION: libzip:x86-windows. If expected, add libzip:x86-windows=fail to .\scripts\ci.baseline.txt. Transient: ``` -- Downloading https://github.com/nih-at/libzip/archive/66e496489bdae81bfda8b0088172871d8fda0032.tar.gz... -- Downloading https://github.com/nih-at/libzip/archive/66e496489bdae81bfda8b0088172871d8fda0032.tar.gz... Failed. Status: 28;"Timeout was reached" CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:184 (message): ``` REGRESSION: ocilib:x64-windows-static. If expected, add ocilib:x64-windows-static=fail to .\scripts\ci.baseline.txt. Probably broken by microsoft/vcpkg#13158 but it passed there: (Link target) -> chromium_base.lib(stack_trace_win.obj) : error LNK2001: unresolved external symbol __imp_SymCleanup [D:\buildtrees\ocilib\x64-windows-static-rel\4fc7a69e6d-337dbe59ca.clean\proj\dll\ocilib_dll_vs2019.vcxproj] Looks like it was skipped before that PR because the port conflicts with chromium-base which couldn't have been caught in that PR. Putting it back on ci.baseline.txt. REGRESSION: osgearth:x64-windows. If expected, add osgearth:x64-windows=fail to .\scripts\ci.baseline.txt. REGRESSION: osgearth:x86-windows. If expected, add osgearth:x86-windows=fail to .\scripts\ci.baseline.txt. Cause unknown. I think we should skip this one in ci.baseline.txt since I've never seen it work OK. REGRESSION: qt5-tools:x64-windows-static. If expected, add qt5-tools:x64-windows-static=fail to .\scripts\ci.baseline.txt. Last I heard @ras0219 was investigating this one but that's been a while now. I pinged him again.
The CMake build for SpeexDSP in vcpkg was designed very narrowly for building on Windows. This is pretty clear with the presence of the lines like
add_definitions(-D_WINDOWS -D_USRDLL)
in the CMake file. This caused the build to fail for macOS and Linux. I went through, analyzing and understanding the project's autoconf setup, and writing a new CMake file that's more platform agnostic.To make it simpler, I have the script make certain assumptions about the build setup. The CMake file generally assumes that the compiler is either MSVC, GCC, or Clang. This is mostly present in conditions for the different definitions of
EXPORT
andVAR_ARRAYS
.The original script used
file(GLOB_RECURSE ...)
to list the source and header files for the project. I switched this to explicitly listing the files instead. Looking through the autoconf files of the project, there were some minor differences from what the original was doing. Some source files were only compiled for specific FFT's (smallft.c, kiss_fft.c, and kiss_fftr.c), and one of the header files in the include directory is not actually set to install (speex_buffer.h).The public header file speexdsp_types.h includes the integer type definitions for Windows and macOS, but Linux is expected to have speexdsp_config_types.h present. This file is generated by the autoconf configuration based on the headers and integer types available. If <stdint.h> is available (and has the fixed-size integer types), the configuration generated header will use it. For the CMake config file, I assume that it is available and configure the file directly to make it work correctly on Linux.
The download source for the project was change from the official source to the Github mirror with #11218. This appears to have been a workaround for an issue with CMake at the time which has since been resolved. Using a Git source does have the advantage of making
--head
builds possible, but the Github mirror is not kept up-to-date very well. (It was significantly behind until I made a PR that brought attention to the mirror). The official Git for the project is xiph's Gitlab. I asked on xiph's IRC about using it as the source in vcpkg, and they said that the original download url used is the preferred download source, and didn't want the Gitlab instance to be the main source, as the hosting for it is "donated" and they didn't want to send too much load onto it. As a compromise, I updated the portfile to use the official download link for release builds and the Gitlab instance for--head
builds.