[3.0] Update SDL and ClangSharp#2570
Conversation
|
Minimum allowed coverage is Generated by 🐒 cobertura-action against ad14c0e |
8622118 to
dc21675
Compare
CMAKE_LIBRARY_ARCHITECTURE fixes the issue where system libraries weren't being found. Eg: "SDL_X11 (Wanted: ON): ON" was OFF without this setting. Eg: "Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so " was a not found error without this setting. I removed the pkg-config settings since they didn't seem to do anything and I couldn't figure out if they were correct in the first place. I'm assuming CMake figures these out automatically (it should automatically find the host version of the pkg-config executable and I'm *assuming* (please verify) it uses the CMAKE_LIBRARY_ARCHITECTURE variable to figure out which set of .pc files to use).
x64/amd64 is handled the same way for consistency.
…x package resolution issues
|
All native library builds modified in this PR shall attempt to be built by CI. |
This is because it otherwise gets confusing in the "run project" dropdown.
Exanite
left a comment
There was a problem hiding this comment.
Self code review complete. My review comments mainly explain why the changes were made. I didn't make an effort to comment how the code works this time though. This is because I want to rework this setup eventually.
| set(PKG_CONFIG_EXECUTABLE "/usr/bin/${ZIG_ARCH}-${ZIG_OS}-${LINUX_ABI}-pkg-config") | ||
| set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/${ZIG_ARCH}-${ZIG_OS}-${LINUX_ABI}/pkgconfig") | ||
| set(ENV{PKG_CONFIG_PATH} "/usr/lib/pkgconfig:/usr/share/pkgconfig") | ||
| set(CMAKE_FIND_ROOT_PATH "/usr/${ZIG_ARCH}-${ZIG_OS}-${LINUX_ABI}") |
There was a problem hiding this comment.
This folder doesn't exist on Ubuntu and the include, lib, and bin folders instead have the following format:
/usr/bin/{target-triple}
/usr/include/{target-triple}
/usr/lib/{target-triple}
Setting CMAKE_LIBRARY_ARCHITECTURE lets CMake find these automatically.
There was a problem hiding this comment.
I prefixed the OpenAL example project name and folder name since it was confusing in the "run project" dropdown of Rider (and maybe other IDEs).
| git submodule update --init --recursive --depth 1 ..\..\..\eng\submodules\openal-soft | ||
| ) | ||
|
|
||
| call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" arm64 |
There was a problem hiding this comment.
arm64 seems to work when using MSVC, but breaks for Clang. Using amd64_arm64 specifies the host_target setting properly.
| rm -rf build | ||
| mkdir build | ||
| cd build | ||
| cmake ../../../../eng/submodules/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos "-DCMAKE_OSX_ARCHITECTURES=arm64;armv7s" -DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 -DCMAKE_BUILD_TYPE=Release -DSDL_STATIC=ON |
There was a problem hiding this comment.
armv7s was breaking the build since Xcode doesn't support it anymore. Looking it up online also shows that armv7s is old and unsupported.
| mkdir build | ||
| cd build | ||
| cmake ../../../../eng/submodules/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos "-DCMAKE_OSX_ARCHITECTURES=arm64;armv7s" -DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 -DCMAKE_BUILD_TYPE=Release -DSDL_STATIC=ON | ||
| cmake ../../../../eng/submodules/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos "-DCMAKE_OSX_ARCHITECTURES=arm64" -DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 -DCMAKE_BUILD_TYPE=Release -DSDL_STATIC=ON -DSDL_TEST_LIBRARY=OFF |
There was a problem hiding this comment.
DSDL_TEST_LIBRARY was defaulting to ON and led to some build issues on Linux x64. I've updated all the build scripts to consistently disable it.
| libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ | ||
| libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ | ||
| libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev | ||
| pkg-config cmake ninja-build gnome-desktop-testing \ |
There was a problem hiding this comment.
These also specify :amd64 purely for consistency.
| libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ | ||
| libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev | ||
| pkg-config cmake ninja-build gnome-desktop-testing \ | ||
| libglib2.0-dev-bin \ |
There was a problem hiding this comment.
Executables must use the host architecture, so they are unsuffixed.
Compile dependencies must use the target architecture, so they are suffixed (armhf in this case).
| Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenAL", "OpenAL", "{662A1AEC-91F2-48FA-AA29-6F27038D30F2}" | ||
| EndProject | ||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial001.HelloSound", "examples\CSharp\OpenAL\Tutorial001.HelloSound\Tutorial001.HelloSound.csproj", "{946C912C-5BBB-446A-A566-0D1696D19F59}" | ||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAL.Tutorial001.HelloSound", "examples\CSharp\OpenAL\OpenAL.Tutorial001.HelloSound\OpenAL.Tutorial001.HelloSound.csproj", "{946C912C-5BBB-446A-A566-0D1696D19F59}" |
There was a problem hiding this comment.
I'll probably convert this .sln file to an .slnx file as my next PR and ensure that Nuke works with the new format (should work after updating Nuke).
(cherry picked from commit ecc5677)
…e, but dependencies first by default is most consistent) (cherry picked from commit ad2d940)
…'s native build process
apt-get seems to be recommended over apt for scripting purposes. apt is designed for humans and does not guarantee backwards compatibility. See https://manpages.debian.org/stretch/apt/apt.8.en.html
|
Some of the native library builds modified in this PR were not referenced in the PR description. Please ensure that the PR description contains |
Exanite
left a comment
There was a problem hiding this comment.
Self code review completed for the new changes I added.
Should be ready for review and merging now.
|
|
||
| if [ ! -e ../../../eng/submodules/openal-soft/CMakeLists.txt ]; then | ||
| git submodule update --init --recursive --depth 1 ../../../eng/submodules/openal-soft | ||
| # Dependencies |
There was a problem hiding this comment.
I added marker comments to each script to make the code easier to skim and to enforce a light structure to the scripts.
I also made each script follow the "dependencies, submodule, build" section order.
In case we have exceptions to this rule in the future, we should explain with a comment.
Note I plan to further rework these in a separate PR.
| cmake python3 libpipewire-0.3-dev:armhf qt6-base-dev:armhf pulseaudio:armhf \ | ||
| gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf | ||
| else | ||
| if [[ -z ${SILKDOTNET_DockerBuild+x} ]]; then |
There was a problem hiding this comment.
I reordered this so that it matches the actual execution order, which is to enter Docker, then install packages.
| exit | ||
| else | ||
| dpkg --add-architecture armhf | ||
| apt-get update |
There was a problem hiding this comment.
Very subtle detail, but apt-get is recommended for scripting purposes. apt is for human usage.
Reference: https://manpages.debian.org/stretch/apt/apt.8.en.html
| sudo apt install -y libasound2-dev:amd64 libpulse-dev:amd64 libsoundio-dev:amd64 libsndfile1-dev:amd64 \ | ||
| libmysofa-dev:amd64 qtbase5-dev:amd64 libdbus-1-dev:amd64 libjack-dev:amd64 portaudio19-dev:amd64 git \ | ||
| cmake build-essential python3 libpipewire-0.3-dev:amd64 qt6-base-dev:amd64 pulseaudio:amd64 | ||
| sudo apt-get update |
There was a problem hiding this comment.
I'm debating whether to add a Debian docker container step here as well.
Currently x64 builds on Ubuntu while ARM builds on Debian.
I'll experiment with this in a separate PR.

Summary of the PR
This PR updates ClangSharp and SDL. This was originally part of #2567, but proved to be a more involved change than anticipated due to SDL build problems.
Related issues, Discord discussions, or proposals
This will fix #2402
This PR should also be closed since this PR effectively supersedes it: #2433
Further Comments
Tasks
Native builds
(Currently disabling this command by adding a space; the builds are already committed so there's no reason to run them again)
/ build-native SDL OpenAL-Soft