Заметки для кросс-платформенной сборки

Статичный 64 битный windows binary на Ubuntu 15.10 (С Werewolf)

Установите компилятор

sudo apt-get install g++-mingw-w64-x86-64

По умолчанию используется Win32 модель потоков в которой отсутсвуют std::mutex и подобные. Поменяем

sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix

Предположим что мы работаем в ~/dev/. Скачайте Boost исходники и распакуйте в ~/dev/boost_1_60_0/. Перейдите в эту папку. Добавим конфигурацию для кросс-платформенного компилятора. Предупреждение: это перезапишет файл.

echo "using gcc : mingw : x86_64-w64-mingw32-g++ ;" > ~/user-config.jam

Собираем Boost как обычно, но укажем staging директорию

./bootstrap.sh
./b2 toolset=gcc-mingw target-os=windows variant=release link=static runtime-link=static address-model=64 \
  --build-type=minimal --with-filesystem --with-program_options --with-date_time \
  --stagedir=stage-mingw-64
cd ..

Скачивам и собираем OpenSSL

git clone https://github.com/openssl/openssl
cd openssl
git checkout OpenSSL_1_0_2g
./Configure mingw64 no-rc2 no-rc4 no-rc5 no-idea no-bf no-cast no-whirlpool no-md2 no-md4 no-ripemd no-mdc2 \
  no-camellia no-seed no-comp no-krb5 no-gmp no-rfc3779 no-ec2m no-ssl2 no-jpake no-srp no-sctp no-srtp \
  --prefix=~/dev/stage --cross-compile-prefix=x86_64-w64-mingw32-
make depend
make
make install
cd ..

...zlib

git clone https://github.com/madler/zlib
cd zlib
git checkout v1.2.8
CC=x86_64-w64-mingw32-gcc CFLAGS=-O3 ./configure --static --64 --prefix=~/dev/stage
make
make install
cd ..

Подготавливаем инструкции для CMake в файле ~/dev/toolchain-mingw.cmake

set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

Скачайте miniupnpc, распакуйте в ~/dev/miniupnpc/. Теперь мы можем собрать i2pd

git clone https://github.com/PurpleI2P/i2pd
mkdir i2pd-mingw-64-build
cd i2pd-mingw-64-build
BOOST_ROOT=~/dev/boost_1_60_0 cmake -G 'Unix Makefiles' ~/dev/i2pd/build -DBUILD_TYPE=Release \
  -DCMAKE_TOOLCHAIN_FILE=~/dev/toolchain-mingw.cmake -DWITH_AESNI=ON -DWITH_UPNP=ON -DWITH_STATIC=ON \
  -DWITH_HARDENING=ON -DCMAKE_INSTALL_PREFIX:PATH=~/dev/i2pd-mingw-64-static \
  -DZLIB_ROOT=~/dev/stage -DBOOST_LIBRARYDIR:PATH=~/dev/boost_1_60_0/stage-mingw-64/lib \
  -DOPENSSL_ROOT_DIR:PATH=~/dev/stage
make
x86_64-w64-mingw32-strip i2pd.exe

На выходе Вы получаете релизную сборку.