-
Notifications
You must be signed in to change notification settings - Fork 61
external_deps: revamp lib build, add cmake and configure wrapper, update lib feature disablement, update lib versions #1433
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
base: master
Are you sure you want to change the base?
Conversation
For
Everything else build. |
For
Everything else build. |
cc59996
to
bd1e318
Compare
|
When building newer Opus on Debian buster (the distro we use for our releases), I get this:
Debian Buster provides GCC 8, but GCC 11.3 or GCC 12 may be required: |
Telling Opus to not assume more than SSE2 fixed that. |
So, the MinGW GLEW and MSVC Vorbis errors are the only ones. |
So the Vorbis build error is actually a bug:
I added a workaround. |
I don't get why I get that GLEW build error with MinGW, the build function has not been modified, and the version has not been updated. |
Also the code is the same for both |
So, I don't know what happened, now I don't reproduce the MinGW GLEW error… Maybe I gorgot to prune the prefix folder and some stray files messed-up… |
Ah, I now see something: I reproduce the bug with MinGW from Ubuntu 24.04 Noble, not with MinGW from Debian 10 Buster. So, since we produce release builds with Debian Buster, it's not a big problem, but it should be fixed for the future… |
What's the purpose of migrating things to build with CMake? |
03961c7
to
c537fe9
Compare
So with this a static build for linux-amd64 completes and runs. |
Huh? It worked before, so I have a hard time believing that is suddenly necessary to change the build system of 8 packages. |
I never said this is a response to “What's the purpose of migrating things to build with CMake?”, I'm just reporting the status of me testing that branch. I said in first post:
So now I'm running those tests. |
What's the motivation behind this change? |
Purposes:
When using configure it is hard to compare the list of already used options with the new options, one has to read configure's whole output and compare with what's currently used. On the contrary with cmake, one just runs the existing command, then go to the build dir and run ccmake, and see what's enabled and should not, and report the difference to the build script. |
5860e20
to
c73312c
Compare
windows-amd64-mingw and windows-i686-mingw engine both build and run. |
For some reasons libpng now provides |
2773253
to
2dd223e
Compare
linux-i686-default and macos-amd64-default engine both build and run. |
26792b6
to
dbf2de7
Compare
Rebased following #1629. Resulting |
I tried to test builds before/after to see if the changes broke anything. There was a lot of stuff broken but much of it was also broken without the changes. I opened #1642 with fixes for those issues which are present both before and after. That fixes the GLEW Windows error mentioned in the OP. I got some issues with the macos bash not liking certain constructs:
|
I guess the problem is that the old Bash sometimes doesn't distinguished between "undefined" and "empty" variables. Maybe for the To answer some very old posts from the thread above:
We aren't using SDL audio. Regarding static vs. dynamic libs, I guess static is better for releases since the linker has the opportunity to remove unused code, reducing the file size. Dynamic may be better for development since then you don't have to link anything so the build could be faster. MSVC libs have to be dynamic because we can't produce static libs in its format. Fortuitously, MSVC is the one platform which is never used for releases, only development. So my conclusion would be static libs are preferable for everything but MSVC. |
After applying some fixes for the old Bash compatibility and the fix for pkgconfig from #1642, I successfully built and tested the Mac amd64 deps and client with the latest toolchain and OS on my arm64 Mac machine. |
make | ||
make install | ||
|
||
cmake_build \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's a regression with the PNG build for MSVC. It produces an unwanted file at lib/libpng.dll
. This is not a DLL, but a symlink to a mingw-format archive (useless for MSVC). In addition to this file being undesirable, something about the symlink causes tar to return an error code in the package
step.
CFLAGS="${CFLAGS} -O3" ./configure --prefix="${PREFIX}" --libdir="${PREFIX}/lib" --static --const | ||
make | ||
make install | ||
windows-*-*) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
zlib now produces both static and shared libs for mingw platforms. Previously it only produced DLLs. We should make only one or the other.
Another bug that is present in both master and this branch: |
There's a big problem with the |
Added a new commit |
@@ -8,7 +8,7 @@ set( CMAKE_CXX_COMPILER i686-w64-mingw32-g++ ) | |||
set( CMAKE_RC_COMPILER i686-w64-mingw32-windres ) | |||
|
|||
# Target prefix | |||
set( CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32 ) | |||
set( CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32;${CMAKE_PREFIX_PATH} ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Surely this doesn't do anything, as the toolchain file is executed before CMakeLists.txt, so CMAKE_PREFIX_PATH wouldn't be set (unless you set it on the command line.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh it's for building external_deps, not compiling the game. Could use a comment
case "${PLATFORM}" in | ||
windows-*-*) | ||
# CMake looks for libSDL2.a and aborts if missing if this file exists: | ||
rm -rf "${PKG_PREFIX}/lib/cmake/SDL2/SDL2staticTargets.cmake" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's this? I don't see a file like this anywhere, and if I revert this commit it does not appear.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For me, this file came up and sabotaged the build not for Windows, but for Linux targets by injecting a -lsamplerate
flag. Anyway on the slipher/deps-combined
branch I reverted that commit and did a proper fix by configuring the SDL build not to use the dependency.
-DCURL_USE_MBEDTLS=OFF \ | ||
-DCURL_USE_NSS=OFF \ | ||
-DCURL_USE_OPENSSL=OFF \ | ||
-DCURL_USE_WOLFSSL=ON \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why on?
The zlib build is not usable for MSVC because it produces a |
For MSVC platforms, the resulting JPEG, WebP, and Curl DLLs have a |
This is WIP, current external_deps build status:
I haven't tested if the engine builds and runs properly with those.WIPWhat this PR does:
CMakeLists.txt
file