]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | # MINGW Settings: |
2 | # Due to inconsistencies between distributions, mingw versions, binaries, | |
3 | # and directories must be determined (or defined) prior to building. | |
4 | ||
5 | # This script expects the following variables: | |
6 | # * OS - currently ubuntu or suse. In the future we may attempt to detect the | |
7 | # platform. | |
8 | # * MINGW_CMAKE_FILE - if set, a cmake toolchain file will be created | |
9 | # * MINGW_POSIX_FLAGS - if set, Mingw Posix compatibility mode will be | |
10 | # enabled by defining the according flags. | |
11 | ||
12 | # -Common mingw settings- | |
13 | MINGW_PREFIX="x86_64-w64-mingw32-" | |
14 | MINGW_BASE="x86_64-w64-mingw32" | |
15 | MINGW_CPP="${MINGW_BASE}-c++" | |
16 | MINGW_DLLTOOL="${MINGW_BASE}-dlltool" | |
17 | MINGW_WINDRES="${MINGW_BASE}-windres" | |
18 | MINGW_STRIP="${MINGW_BASE}-strip" | |
19 | MINGW_OBJCOPY="${MINGW_BASE}-objcopy" | |
20 | # -Distribution specific mingw settings- | |
21 | case "$OS" in | |
22 | ubuntu) | |
23 | mingwPosix="-posix" | |
24 | mingwLibDir="/usr/lib/gcc" | |
25 | mingwVersion="$(${MINGW_CPP}${mingwPosix} -dumpversion)" | |
26 | mingwTargetLibDir="${mingwLibDir}/${MINGW_BASE}/${mingwVersion}" | |
27 | mingwLibpthreadDir="/usr/${MINGW_BASE}/lib" | |
28 | PTW32Include=/usr/share/mingw-w64/include | |
29 | PTW32Lib=/usr/x86_64-w64-mingw32/lib | |
30 | ;; | |
31 | suse) | |
32 | mingwPosix="" | |
33 | mingwLibDir="/usr/lib64/gcc" | |
34 | mingwVersion="$(${MINGW_CPP}${mingwPosix} -dumpversion)" | |
35 | mingwTargetLibDir="/usr/${MINGW_BASE}/sys-root/mingw/bin" | |
36 | mingwLibpthreadDir="$mingwTargetLibDir" | |
37 | PTW32Include=/usr/x86_64-w64-mingw32/sys-root/mingw/include | |
38 | PTW32Lib=/usr/x86_64-w64-mingw32/sys-root/mingw/lib | |
39 | ;; | |
40 | *) | |
41 | echo "$ID is unknown, automatic mingw configuration is not possible." | |
42 | exit 1 | |
43 | ;; | |
44 | esac | |
45 | # -Common mingw settings, dependent upon distribution specific settings- | |
46 | MINGW_FIND_ROOT_LIB_PATH="${mingwLibDir}/\${TOOLCHAIN_PREFIX}/${mingwVersion}" | |
47 | MINGW_CC="${MINGW_BASE}-gcc${mingwPosix}" | |
48 | MINGW_CXX="${MINGW_BASE}-g++${mingwPosix}" | |
49 | # End MINGW configuration | |
50 | ||
51 | ||
52 | if [[ -n $MINGW_CMAKE_FILE ]]; then | |
53 | cat > $MINGW_CMAKE_FILE <<EOL | |
54 | set(CMAKE_SYSTEM_NAME Windows) | |
55 | set(TOOLCHAIN_PREFIX ${MINGW_BASE}) | |
56 | set(CMAKE_SYSTEM_PROCESSOR x86_64) | |
57 | ||
58 | # We'll need to use posix threads in order to use | |
59 | # C++11 features, such as std::thread. | |
60 | set(CMAKE_C_COMPILER \${TOOLCHAIN_PREFIX}-gcc${mingwPosix}) | |
61 | set(CMAKE_CXX_COMPILER \${TOOLCHAIN_PREFIX}-g++${mingwPosix}) | |
62 | set(CMAKE_RC_COMPILER \${TOOLCHAIN_PREFIX}-windres) | |
63 | ||
64 | set(CMAKE_FIND_ROOT_PATH /usr/\${TOOLCHAIN_PREFIX} ${MINGW_FIND_ROOT_LIB_PATH}) | |
65 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | |
66 | # TODO: consider switching this to "ONLY". The issue with | |
67 | # that is that all our libs should then be under | |
68 | # CMAKE_FIND_ROOT_PATH and CMAKE_PREFIX_PATH would be ignored. | |
69 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) | |
70 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) | |
71 | EOL | |
72 | if [[ -n $MINGW_POSIX_FLAGS ]]; then | |
73 | cat >> $MINGW_CMAKE_FILE <<EOL | |
74 | # Some functions (e.g. localtime_r) will not be available unless we set | |
75 | # the following flag. | |
76 | add_definitions(-D_POSIX=1) | |
77 | add_definitions(-D_POSIX_C_SOURCE=1) | |
78 | add_definitions(-D_POSIX_=1) | |
79 | add_definitions(-D_POSIX_THREADS=1) | |
80 | EOL | |
81 | fi | |
82 | fi |