Squashed 'external/toxcore/c-toxcore/' content from commit 67badf69
git-subtree-dir: external/toxcore/c-toxcore git-subtree-split: 67badf69416a74e74f6d7eb51dd96f37282b8455
This commit is contained in:
189
other/docker/windows/build_toxcore.sh
Normal file
189
other/docker/windows/build_toxcore.sh
Normal file
@ -0,0 +1,189 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e -x
|
||||
|
||||
#=== Cross-Compile Toxcore ===
|
||||
|
||||
build() {
|
||||
ARCH=${1}
|
||||
|
||||
echo "Building for $ARCH architecture"
|
||||
|
||||
# set some things
|
||||
|
||||
WINDOWS_TOOLCHAIN=$ARCH-w64-mingw32
|
||||
|
||||
# toxcore dependencies that we will copy to the user for static build of toxcore (e.g. vpx, opus, sodium)
|
||||
DEP_PREFIX_DIR="/root/prefix/$ARCH"
|
||||
|
||||
# where to put the result of this particular build
|
||||
RESULT_PREFIX_DIR="/prefix/$ARCH"
|
||||
rm -rf "$RESULT_PREFIX_DIR"
|
||||
mkdir -p "$RESULT_PREFIX_DIR"
|
||||
|
||||
rm -rf /tmp/*
|
||||
|
||||
# where to install static/shared toxcores before deciding whether they should be copied over to the user
|
||||
STATIC_TOXCORE_PREFIX_DIR="/tmp/static_prefix"
|
||||
SHARED_TOXCORE_PREFIX_DIR="/tmp/shared_prefix"
|
||||
mkdir -p "$STATIC_TOXCORE_PREFIX_DIR" "$SHARED_TOXCORE_PREFIX_DIR"
|
||||
|
||||
export MAKEFLAGS=j"$(nproc)"
|
||||
export CFLAGS=-O3
|
||||
|
||||
echo
|
||||
echo "=== Building toxcore $ARCH ==="
|
||||
export PKG_CONFIG_PATH="$DEP_PREFIX_DIR/lib/pkgconfig"
|
||||
|
||||
if [ "$CROSS_COMPILE" = "true" ]; then
|
||||
TOXCORE_DIR="/toxcore"
|
||||
else
|
||||
# get Toxcore root
|
||||
cd "$(cd "$(dirname -- "$0")" >/dev/null 2>&1 && pwd)"
|
||||
cd ../../../
|
||||
TOXCORE_DIR="$PWD"
|
||||
fi
|
||||
|
||||
cp -a "$TOXCORE_DIR" /tmp/toxcore
|
||||
cd /tmp/toxcore/build
|
||||
|
||||
echo "
|
||||
SET(CMAKE_SYSTEM_NAME Windows)
|
||||
|
||||
SET(CMAKE_C_COMPILER $WINDOWS_TOOLCHAIN-gcc)
|
||||
SET(CMAKE_CXX_COMPILER $WINDOWS_TOOLCHAIN-g++)
|
||||
SET(CMAKE_RC_COMPILER $WINDOWS_TOOLCHAIN-windres)
|
||||
|
||||
SET(CMAKE_FIND_ROOT_PATH /usr/$WINDOWS_TOOLCHAIN $DEP_PREFIX_DIR)
|
||||
" >windows_toolchain.cmake
|
||||
|
||||
if [ "$ENABLE_TEST" = "true" ]; then
|
||||
echo "SET(CROSSCOMPILING_EMULATOR /usr/bin/wine)" >>windows_toolchain.cmake
|
||||
fi
|
||||
|
||||
# Silly way to bypass a shellharden check
|
||||
read -ra EXTRA_CMAKE_FLAGS_ARRAY <<<"$EXTRA_CMAKE_FLAGS"
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=windows_toolchain.cmake \
|
||||
-DCMAKE_INSTALL_PREFIX="$STATIC_TOXCORE_PREFIX_DIR" \
|
||||
-DENABLE_SHARED=OFF \
|
||||
-DENABLE_STATIC=ON \
|
||||
-DCMAKE_C_FLAGS="$CMAKE_C_FLAGS" \
|
||||
-DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS" \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="$CMAKE_EXE_LINKER_FLAGS -fstack-protector" \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="$CMAKE_SHARED_LINKER_FLAGS" \
|
||||
"${EXTRA_CMAKE_FLAGS_ARRAY[@]}" \
|
||||
-S ..
|
||||
cmake --build . --target install -- -j"$(nproc)"
|
||||
|
||||
if [ "$ENABLE_TEST" = "true" ]; then
|
||||
rm -rf /root/.wine
|
||||
|
||||
# setup wine
|
||||
if [ "$ARCH" = "i686" ]; then
|
||||
export WINEARCH=win32
|
||||
else
|
||||
export WINEARCH=win64
|
||||
fi
|
||||
|
||||
winecfg
|
||||
export CTEST_OUTPUT_ON_FAILURE=1
|
||||
# add libgcc_s_sjlj-1.dll libwinpthread-1.dll into PATH env var of wine
|
||||
export WINEPATH="$(
|
||||
cd /usr/lib/gcc/"$WINDOWS_TOOLCHAIN"/*posix/
|
||||
winepath -w "$PWD"
|
||||
)"\;"$(winepath -w /usr/"$WINDOWS_TOOLCHAIN"/lib/)"
|
||||
|
||||
if [ "$ALLOW_TEST_FAILURE" = "true" ]; then
|
||||
set +e
|
||||
fi
|
||||
cmake --build . --target test -- ARGS="-j50"
|
||||
if [ "$ALLOW_TEST_FAILURE" = "true" ]; then
|
||||
set -e
|
||||
fi
|
||||
fi
|
||||
|
||||
# move static dependencies
|
||||
cp -a "$STATIC_TOXCORE_PREFIX_DIR"/* "$RESULT_PREFIX_DIR"
|
||||
cp -a "$DEP_PREFIX_DIR"/* "$RESULT_PREFIX_DIR"
|
||||
|
||||
# make libtox.dll
|
||||
cd "$SHARED_TOXCORE_PREFIX_DIR"
|
||||
for archive in "$STATIC_TOXCORE_PREFIX_DIR"/lib/libtox*.a; do
|
||||
"$WINDOWS_TOOLCHAIN"-ar xv "$archive"
|
||||
done
|
||||
|
||||
if [ "$CROSS_COMPILE" = "true" ]; then
|
||||
LIBWINPTHREAD="/usr/$WINDOWS_TOOLCHAIN/lib/libwinpthread.a"
|
||||
else
|
||||
LIBWINPTHREAD="/usr/$WINDOWS_TOOLCHAIN/sys-root/mingw/lib/libwinpthread.a"
|
||||
fi
|
||||
|
||||
"$WINDOWS_TOOLCHAIN"-gcc -Wl,--export-all-symbols \
|
||||
-Wl,--out-implib=libtox.dll.a \
|
||||
-shared \
|
||||
-o libtox.dll \
|
||||
*.obj \
|
||||
"$STATIC_TOXCORE_PREFIX_DIR"/lib/*.a \
|
||||
"$DEP_PREFIX_DIR"/lib/*.a \
|
||||
"$LIBWINPTHREAD" \
|
||||
-liphlpapi \
|
||||
-lws2_32 \
|
||||
-static-libgcc \
|
||||
-lssp
|
||||
cp libtox.dll.a "$RESULT_PREFIX_DIR"/lib
|
||||
mkdir -p "$RESULT_PREFIX_DIR"/bin
|
||||
cp libtox.dll "$RESULT_PREFIX_DIR"/bin
|
||||
|
||||
rm -rf /tmp/*
|
||||
|
||||
# remove everything from include directory except tox headers
|
||||
mv "$RESULT_PREFIX_DIR"/include/tox "$RESULT_PREFIX_DIR"/tox
|
||||
rm -rf "$RESULT_PREFIX_DIR"/include/*
|
||||
mv "$RESULT_PREFIX_DIR"/tox "$RESULT_PREFIX_DIR"/include/tox
|
||||
|
||||
sed -i "s|^prefix=.*|prefix=$RESULT_PREFIX_DIR|g" "$RESULT_PREFIX_DIR"/lib/pkgconfig/*.pc
|
||||
sed -i "s|^libdir=.*|libdir=$RESULT_PREFIX_DIR/lib|g" "$RESULT_PREFIX_DIR"/lib/*.la
|
||||
}
|
||||
|
||||
#=== Test Supported vs. Enabled ===
|
||||
|
||||
if [ "$ENABLE_ARCH_i686" != "true" ] && [ "$ENABLE_ARCH_x86_64" != "true" ]; then
|
||||
echo "Error: No architecture specified. Set either ENABLE_ARCH_i686 or ENABLE_ARCH_x86_64 or both."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_ARCH_i686" = "true" ] && [ "$SUPPORT_ARCH_i686" != "true" ]; then
|
||||
echo "Error: Can't build for i686 architecture because the image was created without SUPPORT_ARCH_i686 set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_ARCH_x86_64" = "true" ] && [ "$SUPPORT_ARCH_x86_64" != "true" ]; then
|
||||
echo "Error: Can't build for x86_64 architecture because the image was created without SUPPORT_ARCH_x86_64 set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_TEST" = "true" ] && [ "$SUPPORT_TEST" != "true" ]; then
|
||||
echo "Error: Can't build with tests because the image was created without SUPPORT_TEST set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#=== Build ===
|
||||
|
||||
if [ "$ENABLE_ARCH_i686" = "true" ]; then
|
||||
build i686
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_ARCH_x86_64" = "true" ]; then
|
||||
build x86_64
|
||||
fi
|
||||
|
||||
tree -h /prefix
|
||||
|
||||
echo
|
||||
echo "Built toxcore successfully!"
|
||||
echo
|
||||
|
||||
# since we are building as root
|
||||
if [ "$CROSS_COMPILE" = "true" ]; then
|
||||
chmod 777 /prefix -R
|
||||
fi
|
Reference in New Issue
Block a user