diff options
Diffstat (limited to 'mingw_conf.sh')
-rw-r--r-- | mingw_conf.sh | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/mingw_conf.sh b/mingw_conf.sh new file mode 100644 index 000000000..3af7de099 --- /dev/null +++ b/mingw_conf.sh @@ -0,0 +1,82 @@ +# 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" +MINGW_OBJCOPY="${MINGW_BASE}-objcopy" +# -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
\ No newline at end of file |