Skip to content
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

Compiling on armel or mipsel requires -latomic flag #17068

Closed
gibmat opened this issue Apr 27, 2022 · 2 comments
Closed

Compiling on armel or mipsel requires -latomic flag #17068

gibmat opened this issue Apr 27, 2022 · 2 comments
Labels
bug Something went wrong. build Pertains to compilation, language standard, external dependencies.

Comments

@gibmat
Copy link
Contributor

gibmat commented Apr 27, 2022

Operating System

Debian sid, armel or mipsel

OpenRCT2 build

OpenRCT2, v0.4.0

Describe the issue

After updating the Debian packages for OpenRCT2 to v0.4.0, the builds on both the armel and mipsel architectures are failing with the following linker error:

/usr/bin/cmake -E cmake_link_script CMakeFiles/openrct2.dir/link.txt --verbose=1
/usr/bin/c++ -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2 -fstrict-overflow -fstrict-aliasing -Werror -Wundef -Wmissing-declarations -Winit-self -Wall -Wextra -Wshadow -Wno-unknown-pragmas -Wno-missing-braces -Wno-comment -Wnonnull -Wno-unused-parameter -DDEBUG=0 -Wl,-z,relro -Wl,-z,now -fPIE -pie "CMakeFiles/openrct2.dir/src/openrct2-ui/CursorData.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/CursorRepository.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/SDLException.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/TextComposition.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/Ui.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/UiContext.Android.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/UiContext.Linux.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/UiContext.Win32.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/UiContext.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/WindowManager.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/audio/AudioChannel.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/audio/AudioContext.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/audio/AudioMixer.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/audio/FileAudioSource.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/audio/MemoryAudioSource.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/BitmapReader.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/HardwareDisplayDrawingEngine.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/SoftwareDrawingEngine.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/ApplyPaletteShader.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/ApplyTransparencyShader.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/DrawLineShader.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/DrawRectShader.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/OpenGLAPI.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/OpenGLFramebuffer.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/OpenGLShaderProgram.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/SwapFramebuffer.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/TextureCache.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/drawing/engines/opengl/TransparencyDepth.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/input/InputManager.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/input/MouseInput.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/input/ShortcutInput.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/input/ShortcutManager.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/input/Shortcuts.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/interface/Graph.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/interface/InGameConsole.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/interface/LandTool.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/interface/Theme.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/interface/ViewportInteraction.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/interface/Widget.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/interface/Window.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/scripting/CustomImages.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/scripting/CustomListView.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/scripting/CustomMenu.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/scripting/CustomWindow.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/scripting/UiExtensions.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/title/TitleSequencePlayer.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/About.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Banner.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Changelog.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Cheats.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/ClearScenery.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/CustomCurrency.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/DebugPaint.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/DemolishRidePrompt.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Dropdown.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/EditorBottomToolbar.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/EditorInventionsList.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/EditorMain.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/EditorObjectSelection.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/EditorObjectiveOptions.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/EditorScenarioOptions.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Error.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Finances.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Footpath.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/GameBottomToolbar.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Guest.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/GuestList.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/InstallTrack.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Land.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/LandRights.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/LoadSave.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Main.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Map.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/MapGen.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/MapTooltip.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/MazeConstruction.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Multiplayer.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/NetworkStatus.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/NewCampaign.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/NewRide.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/News.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/NewsOptions.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/ObjectLoadError.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Options.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Park.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/PatrolArea.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Player.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/RefurbishRidePrompt.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Research.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Ride.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/RideConstruction.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/RideList.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/SavePrompt.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/ScenarioSelect.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Scenery.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/SceneryScatter.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/ServerList.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/ServerStart.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/ShortcutKeys.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Sign.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Staff.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/StaffFirePrompt.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/StaffList.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TextInput.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Themes.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TileInspector.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TitleCommandEditor.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TitleEditor.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TitleExit.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TitleLogo.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TitleMenu.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TitleOptions.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Tooltip.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TopToolbar.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TrackDesignManage.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TrackDesignPlace.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/TrackList.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Transparency.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/ViewClipping.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Viewport.cpp.o" "CMakeFiles/openrct2.dir/src/openrct2-ui/windows/Water.cpp.o" -o openrct2  libopenrct2.a -lgzstream -lGL /usr/lib/arm-linux-gnueabi/libduktape.so -lstdc++fs /usr/lib/arm-linux-gnueabi/libssl.so /usr/lib/arm-linux-gnueabi/libcrypto.so -lcurl -lSDL2_ttf /usr/lib/arm-linux-gnueabi/libbenchmark.so.1.6.1 /usr/lib/arm-linux-gnueabi/libpng16.so /usr/lib/arm-linux-gnueabi/libz.so /usr/lib/arm-linux-gnueabi/libzip.so -ldl -lpthread /usr/lib/arm-linux-gnueabi/libicuuc.so /usr/lib/arm-linux-gnueabi/libfreetype.so -lfontconfig -lfreetype /usr/lib/arm-linux-gnueabi/libSDL2.so /usr/lib/arm-linux-gnueabi/libspeexdsp.so 
/usr/bin/ld: libopenrct2.a(ScriptEngine.cpp.o): in function `std::__atomic_base<unsigned long long>::load(std::memory_order) const':
/usr/include/c++/11/bits/atomic_base.h:481: undefined reference to `__atomic_load_8'
/usr/bin/ld: libopenrct2.a(Context.cpp.o): in function `std::__atomic_base<unsigned long long>::load(std::memory_order) const':
/usr/include/c++/11/bits/atomic_base.h:481: undefined reference to `__atomic_load_8'
/usr/bin/ld: libopenrct2.a(Profiling.cpp.o): in function `std::__atomic_base<unsigned long long>::fetch_add(unsigned long long, std::memory_order)':
/usr/include/c++/11/bits/atomic_base.h:636: undefined reference to `__atomic_fetch_add_8'
/usr/bin/ld: libopenrct2.a(Profiling.cpp.o): in function `std::__atomic_base<unsigned long long>::store(unsigned long long, std::memory_order)':
/usr/include/c++/11/bits/atomic_base.h:457: undefined reference to `__atomic_store_8'
/usr/bin/ld: libopenrct2.a(Profiling.cpp.o): in function `std::__atomic_base<unsigned long long>::load(std::memory_order) const':
/usr/include/c++/11/bits/atomic_base.h:481: undefined reference to `__atomic_load_8'
/usr/bin/ld: /usr/include/c++/11/bits/atomic_base.h:481: undefined reference to `__atomic_load_8'
/usr/bin/ld: /usr/include/c++/11/bits/atomic_base.h:481: undefined reference to `__atomic_load_8'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/openrct2.dir/build.make:2048: openrct2] Error 1

From a quick online search, it looks like these two architectures need the -latomic linker flag set. Previously, OpenRCT2 0.3.5.1 compiled just fine.

Full logs:
https://buildd.debian.org/status/fetch.php?pkg=openrct2&arch=armel&ver=0.4.0%2Bds-1&stamp=1650978090&raw=0
https://buildd.debian.org/status/fetch.php?pkg=openrct2&arch=mipsel&ver=0.4.0%2Bds-1&stamp=1650981412&raw=0

Area(s) with issue?

Building the game

Steps to reproduce

  1. Compile the latest release on an armel or mipsel box.

Attachments

No response

@gibmat gibmat added the bug Something went wrong. label Apr 27, 2022
@Broxzier Broxzier added the build Pertains to compilation, language standard, external dependencies. label Apr 27, 2022
@gibmat
Copy link
Contributor Author

gibmat commented Apr 30, 2022

I've verified that the following patch fixes the compile error:

diff --git a/src/openrct2/CMakeLists.txt b/src/openrct2/CMakeLists.txt
index b07a5e0c7..6d4b69e0b 100644
--- a/src/openrct2/CMakeLists.txt
+++ b/src/openrct2/CMakeLists.txt
@@ -272,3 +272,6 @@ else ()
     # Dummy target to ease invocation
     add_custom_target(${PROJECT_NAME}-headers-check)
 endif ()
+
+# armel and mipsel builds need to explicitly link in libatomic
+target_link_libraries(${PROJECT_NAME} atomic)

I didn't do any logic to try to limit the linking of libatomic under just armel or mipsel builds, but it doesn't appear to break amd64 or ppc64el builds either, so it is probably safe to include it for all builds.

@tupaschoal
Copy link
Member

I've verified that the following patch fixes the compile error:

Can you open a PR for that please @gibmat ?

duncanspumpkin added a commit that referenced this issue May 7, 2022
janisozaur pushed a commit that referenced this issue May 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something went wrong. build Pertains to compilation, language standard, external dependencies.
Projects
None yet
Development

No branches or pull requests

3 participants