mirror of
https://github.com/ceph/ceph
synced 2024-12-27 05:53:20 +00:00
f42e947a85
Distributions such as SUSE and Ubuntu differ significantly in their mingw environments. This adds an OS=(ubuntu|suse) flag, which can be used to specify which environment is being used for the build. Unless set explicitly, the scripts will try to automatically detect it. Depending on the OS selected, various mingw configuration options (binaries, library paths, etc.) as well as required packages are determined. Due to these options being configured at runtime, corresponding cmake files are generated on the fly. Signed-off-by: Mike Latimer <mlatimer@suse.com> Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com> Signed-off-by: Alessandro Pilotti <apilotti@cloudbasesolutions.com>
81 lines
3.0 KiB
Bash
81 lines
3.0 KiB
Bash
# MINGW Settings:
|
|
# Due to inconsistencies between distributions, mingw versions, binaries,
|
|
# and directories must be determined (or defined) prior to building.
|
|
|
|
# This script expects the following variables:
|
|
# * OS - currently ubuntu or suse. In the future we may attempt to detect the
|
|
# platform.
|
|
# * MINGW_CMAKE_FILE - if set, a cmake toolchain file will be created
|
|
# * MINGW_POSIX_FLAGS - if set, Mingw Posix compatibility mode will be
|
|
# enabled by defining the according flags.
|
|
|
|
# -Common mingw settings-
|
|
MINGW_PREFIX="x86_64-w64-mingw32-"
|
|
MINGW_BASE="x86_64-w64-mingw32"
|
|
MINGW_CPP="${MINGW_BASE}-c++"
|
|
MINGW_DLLTOOL="${MINGW_BASE}-dlltool"
|
|
MINGW_WINDRES="${MINGW_BASE}-windres"
|
|
MINGW_STRIP="${MINGW_BASE}-strip"
|
|
# -Distribution specific mingw settings-
|
|
case "$OS" in
|
|
ubuntu)
|
|
mingwPosix="-posix"
|
|
mingwLibDir="/usr/lib/gcc"
|
|
mingwVersion="$(${MINGW_CPP}${mingwPosix} -dumpversion)"
|
|
mingwTargetLibDir="${mingwLibDir}/${MINGW_BASE}/${mingwVersion}"
|
|
mingwLibpthreadDir="/usr/${MINGW_BASE}/lib"
|
|
PTW32Include=/usr/share/mingw-w64/include
|
|
PTW32Lib=/usr/x86_64-w64-mingw32/lib
|
|
;;
|
|
suse)
|
|
mingwPosix=""
|
|
mingwLibDir="/usr/lib64/gcc"
|
|
mingwVersion="$(${MINGW_CPP}${mingwPosix} -dumpversion)"
|
|
mingwTargetLibDir="/usr/${MINGW_BASE}/sys-root/mingw/bin"
|
|
mingwLibpthreadDir="$mingwTargetLibDir"
|
|
PTW32Include=/usr/x86_64-w64-mingw32/sys-root/mingw/include
|
|
PTW32Lib=/usr/x86_64-w64-mingw32/sys-root/mingw/lib
|
|
;;
|
|
*)
|
|
echo "$ID is unknown, automatic mingw configuration is not possible."
|
|
exit 1
|
|
;;
|
|
esac
|
|
# -Common mingw settings, dependent upon distribution specific settings-
|
|
MINGW_FIND_ROOT_LIB_PATH="${mingwLibDir}/\${TOOLCHAIN_PREFIX}/${mingwVersion}"
|
|
MINGW_CC="${MINGW_BASE}-gcc${mingwPosix}"
|
|
MINGW_CXX="${MINGW_BASE}-g++${mingwPosix}"
|
|
# End MINGW configuration
|
|
|
|
|
|
if [[ -n $MINGW_CMAKE_FILE ]]; then
|
|
cat > $MINGW_CMAKE_FILE <<EOL
|
|
set(CMAKE_SYSTEM_NAME Windows)
|
|
set(TOOLCHAIN_PREFIX ${MINGW_BASE})
|
|
set(CMAKE_SYSTEM_PROCESSOR x86_64)
|
|
|
|
# We'll need to use posix threads in order to use
|
|
# C++11 features, such as std::thread.
|
|
set(CMAKE_C_COMPILER \${TOOLCHAIN_PREFIX}-gcc${mingwPosix})
|
|
set(CMAKE_CXX_COMPILER \${TOOLCHAIN_PREFIX}-g++${mingwPosix})
|
|
set(CMAKE_RC_COMPILER \${TOOLCHAIN_PREFIX}-windres)
|
|
|
|
set(CMAKE_FIND_ROOT_PATH /usr/\${TOOLCHAIN_PREFIX} ${MINGW_FIND_ROOT_LIB_PATH})
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
# TODO: consider switching this to "ONLY". The issue with
|
|
# that is that all our libs should then be under
|
|
# CMAKE_FIND_ROOT_PATH and CMAKE_PREFIX_PATH would be ignored.
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
|
|
EOL
|
|
if [[ -n $MINGW_POSIX_FLAGS ]]; then
|
|
cat >> $MINGW_CMAKE_FILE <<EOL
|
|
# Some functions (e.g. localtime_r) will not be available unless we set
|
|
# the following flag.
|
|
add_definitions(-D_POSIX=1)
|
|
add_definitions(-D_POSIX_C_SOURCE=1)
|
|
add_definitions(-D_POSIX_=1)
|
|
add_definitions(-D_POSIX_THREADS=1)
|
|
EOL
|
|
fi
|
|
fi |