Hello, we're working on a new target for MinGW compiler, we're intending to have a cross-compiler from Linux Arm64 to Windows Arm64. We want to have Boost library as a benchmark of how complete our C++ compiler is and gradually improve it to support more features. I'm struggling though to get the cross-compilation and subsequent testing working. 1) I'm having troubles to set up cross-building of Boost with MinGW (even standard MinGW from package manager Linux x64 -> Windows x64). I'm getting errors while building Context, Process and Stacktrace modules. (I added to the respective error messages to the end of the email or full logs can be found here: https://github.com/user-attachments/files/17133738/x64_boost_build.log) My build commands: git clone --recursive https://github.com/boostorg/boost.git boost-build cd boost-build git checkout develop git submodule update --init --recursive echo "using gcc : : x86_64-w64-mingw32-g++ ;" > "user-config-x64.jam" ./bootstrap.sh ./b2 --user-config=./user-config-x64.jam --prefix=./boost-x64 --debug-configuration target-os=windows address-model=64 variant=debug install > x64_boost_build.log
From the error messages, it seems like I'm doing something essential wrong as for example Process module tries to build assembler for ELF format and SYSV ABI and not Window's PE format and MS ABI.
2) Subsequently, I didn't have much luck finding resources for cross-testing of
Boost. Currently, I'm building and running tests in Ubuntu 22.04 in WSL on
Windows machine. In general, this approach seems to work decently, Boost itself
and its tests are built on Ubuntu as Windows binaries and when test executables
are run, WSL automatically propagates it to run those executables on underlaying
Windows. But a lot of tests are failing. I'm gradually investigating them and finding
issues like missing dlls because b2 uses LD_LIBRARY_PATH and Windows doesn't
understand it. I'm workarounding these issues but it's a slow process, so I wanted
to ask, is the cross-testing of Boost library supported, are you aware of some
examples where it's being used?
Thank you and kind regards,
Martin
-------------------------------------------------------------------------------
a) Context errors:
(similar also for jump_x86_64_sysv_elf_gas.S and ontop_x86_64_sysv_elf_gas.S)
gcc.compile.asm bin.v2/libs/context/build/gcc-10/debug/x86_64/link-static/
target-os-windows/threadapi-win32/threading-multi/visibility-hidden/
asm/make_x86_64_sysv_elf_gas.o
make_x86_64_sysv_elf_gas.S: Assembler messages:
make_x86_64_sysv_elf_gas.S:47: Warning: .type pseudo-op used outside of .def/.endef: ignored.
make_x86_64_sysv_elf_gas.S:47: Error: junk at end of line, first unrecognized character is `m'
/home/vejby/boost-build/libs/context/src/asm/make_x86_64_sysv_elf_gas.S:157:
Warning: .size pseudo-op used outside of .def/.endef: ignored.
/home/vejby/boost-build/libs/context/src/asm/make_x86_64_sysv_elf_gas.S:157:
Error: junk at end of line, first unrecognized character is `m'
/home/vejby/boost-build/libs/context/src/asm/make_x86_64_sysv_elf_gas.S:160:
Error: junk at end of line, first unrecognized character is `-'
"x86_64-w64-mingw32-g++" -x assembler-with-cpp -m64 -O0 -fno-inline -Wall -g
-fvisibility=hidden -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTEXT_NO_LIB=1
-DBOOST_CONTEXT_SOURCE -D_WIN32_WINNT=0x0601 -I"."
-I"/home/vejby/boost-build/libs/assert/include"
-I"/home/vejby/boost-build/libs/context/include"
-I"/home/vejby/boost-build/libs/core/include"
-I"/home/vejby/boost-build/libs/move/include"
-I"/home/vejby/boost-build/libs/mp11/include"
-I"/home/vejby/boost-build/libs/predef/include"
-I"/home/vejby/boost-build/libs/smart_ptr/include"
-I"/home/vejby/boost-build/libs/throw_exception/include"
-I"/home/vejby/boost-build/libs/type_traits/include" -c -o
"bin.v2/libs/context/build/gcc-10/debug/x86_64/link-static/target-os-windows/
threadapi-win32/threading-multi/visibility-hidden/asm/make_x86_64_sysv_elf_gas.o"
"/home/vejby/boost-build/libs/context/src/asm/make_x86_64_sysv_elf_gas.S"
...failed gcc.compile.asm
bin.v2/libs/context/build/gcc-10/debug/x86_64/link-static/target-os-windows/
threadapi-win32/threading-multi/visibility-hidden/asm/make_x86_64_sysv_elf_gas.o...
-------------------------------------------------------------------------------
b) Process errors:
gcc.compile.c++ bin.v2/libs/process/build/gcc-10/debug/x86_64/
boost.process.fs-boost/link-static/target-os-windows/threadapi-win32/
threading-multi/visibility-hidden/ext/exe.o
/home/vejby/boost-build/libs/process/src/ext/exe.cpp: In function
‘boost::filesystem::path boost::process::v2::ext::exe
(HANDLE, boost::system::error_code&)’:
/home/vejby/boost-build/libs/process/src/ext/exe.cpp:78:9: error:
‘QueryFullProcessImageNameW’ was not declared in this scope
78 | if (QueryFullProcessImageNameW(proc, 0, buffer, &size))
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
"x86_64-w64-mingw32-g++" -fvisibility-inlines-hidden -m64 -O0 -fno-inline
-Wall -g -fvisibility=hidden -DBOOST_ALL_NO_LIB=1
-DBOOST_ASIO_NO_DEPRECATED -DBOOST_ATOMIC_STATIC_LINK=1
-DBOOST_FILESYSTEM_NO_LIB=1 -DBOOST_FILESYSTEM_STATIC_LINK=1
-DBOOST_PROCESS_SOURCE=1 -DBOOST_REGEX_NO_LIB=1 -DBOOST_SYSTEM_NO_LIB=1
-DBOOST_SYSTEM_STATIC_LINK=1 -DWIN32_LEAN_AND_MEAN -I"."
-I"/home/vejby/boost-build/libs/algorithm/include"
-I"/home/vejby/boost-build/libs/assert/include"
-I"/home/vejby/boost-build/libs/bind/include"
-I"/home/vejby/boost-build/libs/container_hash/include"
-I"/home/vejby/boost-build/libs/core/include"
-I"/home/vejby/boost-build/libs/describe/include"
-I"/home/vejby/boost-build/libs/detail/include"
-I"/home/vejby/boost-build/libs/filesystem/include"
-I"/home/vejby/boost-build/libs/function/include"
-I"/home/vejby/boost-build/libs/function_types/include"
-I"/home/vejby/boost-build/libs/fusion/include"
-I"/home/vejby/boost-build/libs/iterator/include"
-I"/home/vejby/boost-build/libs/move/include"
-I"/home/vejby/boost-build/libs/mp11/include"
-I"/home/vejby/boost-build/libs/optional/include"
-I"/home/vejby/boost-build/libs/predef/include"
-I"/home/vejby/boost-build/libs/process/include"
-I"/home/vejby/boost-build/libs/regex/include"
-I"/home/vejby/boost-build/libs/scope/include"
-I"/home/vejby/boost-build/libs/smart_ptr/include"
-I"/home/vejby/boost-build/libs/system/include"
-I"/home/vejby/boost-build/libs/throw_exception/include"
-I"/home/vejby/boost-build/libs/tuple/include"
-I"/home/vejby/boost-build/libs/type_index/include"
-I"/home/vejby/boost-build/libs/type_traits/include"
-I"/home/vejby/boost-build/libs/unordered/include"
-I"/home/vejby/boost-build/libs/variant2/include"
-I"/home/vejby/boost-build/libs/winapi/include" -c -o
"bin.v2/libs/process/build/gcc-10/debug/x86_64/boost.process.fs-boost/
link-static/target-os-windows/threadapi-win32/threading-multi/
visibility-hidden/ext/exe.o"
"/home/vejby/boost-build/libs/process/src/ext/exe.cpp"
...failed gcc.compile.c++
bin.v2/libs/process/build/gcc-10/debug/x86_64/boost.process.fs-boost/
link-static/target-os-windows/threadapi-win32/threading-multi/
visibility-hidden/ext/exe.o...
-------------------------------------------------------------------------------
gcc.compile.c++ bin.v2/libs/process/build/gcc-10/debug/x86_64/
boost.process.fs-boost/link-static/target-os-windows/threadapi-win32/
threading-multi/visibility-hidden/windows/default_launcher.o
In file included from /home/vejby/boost-build/libs/process/src/windows/
default_launcher.cpp:16:
./boost/process/v2/windows/default_launcher.hpp:220:3: error:
‘STARTUPINFOEXW’ does not name a type; did you mean ‘STARTUPINFOW’?
220 | STARTUPINFOEXW startup_info{{sizeof(STARTUPINFOEXW), nullptr, nullptr, nullptr,
| ^~~~~~~~~~~~~~
| STARTUPINFOW
./boost/process/v2/windows/default_launcher.hpp: In member function
‘boost::process::v2::windows::default_launcher::enable_init