New comment by meator on void-packages repository https://github.com/void-linux/void-packages/pull/50183#issuecomment-2135947149 Comment: > after several hours, i can't figure out how to fix cross compilation for `imhex` > > please help Worry not, I come to the rescue! Here's a patch: ```patch --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,12 @@ set(CMAKE_MODULE_PATH "${IMHEX_BASE_FOLDER}/cmake/modules") include("${IMHEX_BASE_FOLDER}/cmake/build_helpers.cmake") +# Void Linux flags for cross compiling libromfs +set(NATIVE_CMAKE_C_COMPILER "$ENV{CC_host}") +set(NATIVE_CMAKE_CXX_COMPILER "$ENV{CXX_host}") +set(NATIVE_CMAKE_C_FLAGS "$ENV{CFLAGS_host}") +set(NATIVE_CMAKE_CXX_FLAGS "$ENV{CXXFLAGS_host}") + # Setup project loadVersion(IMHEX_VERSION) setVariableInParent(IMHEX_VERSION ${IMHEX_VERSION}) ``` This is what's causing problems: https://github.com/WerWolv/libromfs/blob/master/generator/CMakeLists.txt#L5-L12 (`libromfs` isn't a part of `imhex`, it gets downloaded during the configure step[^1]) `ld` prints warnings about skipping aarch libraries when looking for libs. I believe that these warnings are harmless.
Here are the ld warnings.

``` ... /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libstdc++.so when searching for -lstdc++ /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libstdc++.a when searching for -lstdc++ /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libm.so when searching for -lm /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libm.a when searching for -lm /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libc.so when searching for -lc /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libc.a when searching for -lc /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 [141/369] Linking CXX executable plugins/builtin/libromfs/generator/generator-builtin /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libstdc++.so when searching for -lstdc++ /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libstdc++.a when searching for -lstdc++ /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libm.so when searching for -lm /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libm.a when searching for -lm /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libc.so when searching for -lc /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libc.a when searching for -lc /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 [142/369] Linking CXX executable main/gui/main/gui/libromfs/generator/generator-imhex /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libstdc++.so when searching for -lstdc++ /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libstdc++.a when searching for -lstdc++ /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libm.so when searching for -lm /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libm.a when searching for -lm /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libc.so when searching for -lc /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libc.a when searching for -lc /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 /usr/bin/ld: skipping incompatible /usr/aarch64-linux-gnu/usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1 ... ```

These flags could be theoretically set through `$configure_args`, but the variable expansion gets pretty funky with `$CFLAGS_host` and `$CXXFLAGS_host`. `libromfs`'s build system disregards the relevant `NATIVE_CMAKE_` variables when set through the environment, so the only two solutions I see is passing `-DNATIVE_CMAKE_` to cmake (impossible to do [because of parameter expansion](https://github.com/void-linux/void-packages/blob/master/common/build-style/cmake.sh#L78)) or modifying the build system like my patch does. [^1]: This is bad for obvious reasons, I believe that it pulls https://github.com/WerWolv/libromfs directly from master. This should probably be fixed.