Dukales

Qt 4.8.4 static MinGW 4.8.0 Win64 Core i7

Oct 18th, 2012
352
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 11.08 KB | None | 0 0
  1. #!/usr/bin/env bash
  2.  
  3. set -o verbose
  4. set -o xtrace
  5. set -o errexit
  6.  
  7. LINKAGE=static
  8. #static shared
  9. MARCH=corei7-avx
  10. #native corei7-avx corei7
  11. MTUNE=corei7-avx
  12. #corei7-avx generic
  13. ADDRESS_MODEL=64
  14. #32 64
  15. #for boost::
  16. THREADAPI=pthread
  17. #win32 pthread
  18. #required: -DBOOST_THREAD_POSIX -DBOOST_THREAD_USE_LIB -lpthreadGC2
  19.  
  20. export MINGWDIR=/c/mingw
  21. export QTDIR=${PWD}
  22. PATH=/usr/bin:${MINGWDIR}/bin:/c/Windows/system32:${QTDIR}:${QTDIR}/bin
  23. #${MINGWDIR}/x86_64-w64-mingw32/lib32
  24. export QMAKESPEC=win32-g++-x${ADDRESS_MODEL}-$(g++ -dumpversion)-${MARCH}-${MTUNE} # "win32-g++*" !const!
  25. #export QMAKESPEC=win32-g++
  26. export LANG=en
  27.  
  28. export QT_INSTALL_PREFIX=${QTDIR}/../Qt-${LINKAGE}
  29. QT_INSTALL_PREFIX_W=$(pwd -W)/../Qt-${LINKAGE}
  30. rm -vrf ${QT_INSTALL_PREFIX}/*
  31. BUILD_DIR=${QT_INSTALL_PREFIX}-build
  32. rm -vf ${QTDIR}/qmake/*.o # https://bugreports.qt-project.org/browse/QTBUG-9694
  33. rm -vrf ${BUILD_DIR}/
  34. mkdir -vp ${BUILD_DIR}/
  35. cp -vf "$0" ${BUILD_DIR}/
  36. #head -n 13 "$0" > ${BUILD_DIR}/redo-install-${LINKAGE}.sh
  37. #tail -n 4 "$0" | head -n 1 >> ${BUILD_DIR}/redo-install-${LINKAGE}.sh
  38.  
  39. if [[ ${ADDRESS_MODEL} -eq 32 ]]
  40. then
  41.     PATH=${MINGWDIR}/x86_64-w64-mingw32/lib32:${PATH}
  42.     LFLAGS_WIN32="-Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc"
  43.     CFLAGS_WIN32=""
  44.     BIT_CAPACIY="-m32"
  45. else
  46.     PATH=${MINGWDIR}/i686-w64-mingw32/lib64:${PATH}
  47.     LFLAGS_WIN32=""
  48.     CFLAGS_WIN32=""
  49.     BIT_CAPACIY="-m64"
  50. fi
  51.  
  52. if [[ "${LINKAGE}" -eq "static" ]]
  53. then
  54.     CXXLINKAGE=""
  55. else
  56.     CXXLINKAGE="-DBOOST_ALL_DYN_LINK=1"
  57. fi
  58.  
  59. #C:\mingw\x86_64-w64-mingw32\lib32;C:\mingw\i686-w64-mingw32\lib64;
  60. export PATH
  61.  
  62. if [[ "${THREADAPI}" = "win32" ]]
  63. then
  64.     THREADS="-mthreads -DBOOST_THREAD_WIN32 -DBOOST_THREAD_USE_LIB"
  65. else
  66.     THREADS="-pthread -DBOOST_THREAD_POSIX -DBOOST_THREAD_USE_LIB"
  67. fi
  68.  
  69. GRAPHITE=
  70. #"-fgraphite-identity -floop-interchange -floop-block -floop-parallelize-all"
  71. #The flag -fomit-frame-pointer is enabled at -O1, -O2, -O3 and -Os on arches where it doesn't interfere with debugging, such as AMD64, but not x86. So if you're on x86 you should add it to your CFLAGS. Also don't use -momit-leaf-frame-pointer together with -fomit-frame-pointer. It's pointless as -fomit-frame-pointer already omits all frame pointers. In fact if you use both, -momit-leaf-frame-pointer overrides -fomit-frame-pointer creating less optimized code.
  72. # -mfpmath=both is experimental thats not use it
  73. OPTFLAGS="\
  74. ${CFLAGS_WIN32} \
  75. ${GRAPHITE} \
  76. -fbranch-target-load-optimize2 \
  77. -fcx-limited-range -fforce-addr \
  78. -fgcse-las -fgcse-sm -fgcse-after-reload \
  79. -ftree-loop-im"
  80.  
  81. #!http://comments.gmane.org/gmane.comp.gnu.mingw.w64.general/6317
  82. # my workaround: if you want to use "-mfpmath=both" (or, equivalently, "-mfpmath=sse+387") with "-std=gnu++11" option, then specify "-D__FLT_EVAL_METHOD__=2 -Wp,-w" option to g++ extra
  83. ARCH="${BIT_CAPACIY} -march=${MARCH} -mtune=${MTUNE}"
  84. #
  85. # echo "" | gcc -march=native -v -E - 2>&1 | grep cc1
  86.  
  87. USE_RTTI=
  88. #"-frtti" # configure -rtti
  89.  
  90. USE_LTO_CXX="-flto"
  91. USE_LTO_LINK=
  92. #"-flto"
  93. #"-flto -fuse-linker-plugin"
  94.  
  95. COMMON="-v -pipe ${ARCH} ${USE_RTTI} \
  96. -mtls-dialect=gnu2 \
  97. -fsignaling-nans -fno-math-errno"
  98. STLP_CXXOTHER=
  99. #"-D_REENTRANT=1 -D_STLP_NEW_PLATFORM_SDK=1 -D_STLP_USE_EXCEPTIONS"
  100. LISTING=""
  101. #"-Wa,-adhlns=\"\[email protected]\""
  102. X=
  103. #"-std=gnu++1y -D__FLT_EVAL_METHOD__=2 -Wp,-w"
  104. CXXOTHER="${COMMON} \
  105. ${CXXLINKAGE} \
  106. ${STLP_CXXOTHER} \
  107. ${X} \
  108. ${LISTING} \
  109. ${USE_LTO_CXX}"
  110. LOTHER="-${LINKAGE} ${COMMON} \
  111. ${LFLAGS_WIN32} \
  112. ${USE_LTO_LINK}"
  113.  
  114. STLP_CXXDEBUG=
  115. #"-D_STLP_DEBUG=1 -D_DEBUG=1 -D_STLP_DEBUG_MODE_THROWS=1 -D_STLP_DEBUG_ALLOC=1 -D_STLP_DEBUG_UNINITIALIZED=1"
  116. CXXDEBUG="-Og -g -ggdb \
  117. ${STLP_CXXDEBUG}"
  118. LDEBUG="-Wl,-Og"
  119. CXXRELEASE=" \
  120. -O3 \
  121. ${OPTFLAGS}"
  122. LRELEASE="-Wl,-s \
  123. -Wl,-O3 \
  124. ${OPTFLAGS}"
  125.  
  126. QMAKE_LIBDIR="\"C:/libs/boost/lib\""
  127. QMAKE_INCDIR="\"C:/libs/boost/include\""
  128. QMAKE_LIBS=
  129.  
  130. QMAKESPEC_DIR="${QTDIR}/mkspecs/${QMAKESPEC}"
  131. rm -vrf "${QMAKESPEC_DIR}/"
  132. mkdir -vp "${QMAKESPEC_DIR}/"
  133. cp -vrf ${QTDIR}/mkspecs/win32-g++-4.6/* "${QMAKESPEC_DIR}/"
  134. #http://sourceware.org/bugzilla/show_bug.cgi?id=13201
  135. #http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50367 : WORKAROUND -flto-partition=none does not works
  136. #-fkeep-inline-functions -Wl,--as-needed
  137. cat - <<__EOF> "${QMAKESPEC_DIR}/qmake.conf"
  138. #
  139. # qmake configuration for ${QMAKESPEC}
  140. #
  141. # Written for MinGW
  142. #
  143. # Cross compile example for i686-w64-mingw32-g++:
  144. #   configure -xplatform ${QMAKESPEC} -device-option CROSS_COMPILE=i686-w64-mingw32-
  145. #
  146.  
  147. MAKEFILE_GENERATOR  = MINGW
  148.  
  149. load(device_config)
  150.  
  151. equals(QMAKE_HOST.os, Windows): EXE_SUFFIX = .exe
  152.  
  153. TEMPLATE        = app
  154. CONFIG          += ${LINKAGE} exceptions rtti qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target
  155. QT          += core gui
  156. DEFINES         += UNICODE QT_LARGEFILE_SUPPORT
  157. QMAKE_COMPILER_DEFINES  += __GNUC__ WIN32
  158.  
  159. QMAKE_EXT_OBJ           = .o
  160. QMAKE_EXT_RES           = _res.o
  161.  
  162. QMAKE_CC        = \$\${CROSS_COMPILE}gcc
  163. QMAKE_LEX       = flex
  164. QMAKE_LEXFLAGS      =
  165. QMAKE_YACC      = byacc
  166. QMAKE_YACCFLAGS     = -d
  167. QMAKE_CFLAGS        = ${CXXOTHER}
  168. QMAKE_CFLAGS_DEPS   = -M
  169. QMAKE_CFLAGS_WARN_ON    = -Wall -Wextra
  170. QMAKE_CFLAGS_WARN_OFF   = -w
  171. QMAKE_CFLAGS_RELEASE    = ${CXXRELEASE}
  172. QMAKE_CFLAGS_DEBUG  = ${CXXDEBUG}
  173. QMAKE_CFLAGS_YACC   = -Wno-unused -Wno-parentheses
  174.  
  175. QMAKE_CXX       = \$\${CROSS_COMPILE}g++
  176. QMAKE_CXXFLAGS      = -x c++ \$\$QMAKE_CFLAGS
  177. QMAKE_CXXFLAGS_DEPS = \$\$QMAKE_CFLAGS_DEPS
  178. QMAKE_CXXFLAGS_WARN_ON  = \$\$QMAKE_CFLAGS_WARN_ON
  179. QMAKE_CXXFLAGS_WARN_OFF = \$\$QMAKE_CFLAGS_WARN_OFF
  180. QMAKE_CXXFLAGS_RELEASE  = \$\$QMAKE_CFLAGS_RELEASE
  181. QMAKE_CXXFLAGS_DEBUG    = \$\$QMAKE_CFLAGS_DEBUG
  182. QMAKE_CXXFLAGS_YACC = \$\$QMAKE_CFLAGS_YACC
  183. QMAKE_CXXFLAGS_THREAD   = \$\$QMAKE_CFLAGS_THREAD
  184. QMAKE_CXXFLAGS_RTTI_ON  = -frtti
  185. QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
  186. QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions ${THREADS}
  187. QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
  188.  
  189. QMAKE_INCDIR        = ${QMAKE_INCDIR}
  190. QMAKE_LIBDIR        = ${QMAKE_LIBDIR}
  191. QMAKE_LIBS          = ${QMAKE_LIBS}
  192. QMAKE_INCDIR_QT     = \$\$[QT_INSTALL_HEADERS]
  193. QMAKE_LIBDIR_QT     = \$\$[QT_INSTALL_LIBS]
  194.  
  195. QMAKE_RUN_CC        = \$(CC) -c \$(CFLAGS) \$(INCPATH) -o \$obj \$src
  196. QMAKE_RUN_CC_IMP    = \$(CC) -c \$(CFLAGS) \$(INCPATH) -o \$@ \$<
  197. QMAKE_RUN_CXX       = \$(CXX) -c \$(CXXFLAGS) \$(INCPATH) -o \$obj \$src
  198. QMAKE_RUN_CXX_IMP   = \$(CXX) -c \$(CXXFLAGS) \$(INCPATH) -o \$@ \$<
  199.  
  200. QMAKE_LINK      = \$\${CROSS_COMPILE}g++
  201. QMAKE_LINK_C        = \$\${CROSS_COMPILE}gcc
  202. QMAKE_LFLAGS        = ${LOTHER}
  203. QMAKE_LFLAGS_EXCEPTIONS_ON = ${THREADS}
  204. QMAKE_LFLAGS_EXCEPTIONS_OFF =
  205. QMAKE_LFLAGS_RELEASE    = ${LRELEASE}
  206. QMAKE_LFLAGS_DEBUG  = ${LDEBUG}
  207. QMAKE_LFLAGS_CONSOLE    = -Wl,-subsystem,console
  208. QMAKE_LFLAGS_WINDOWS    = -Wl,-subsystem,windows
  209. QMAKE_LFLAGS_DLL        = -${LINKAGE}
  210. QMAKE_LINK_OBJECT_MAX   = 10
  211. QMAKE_LINK_OBJECT_SCRIPT= object_script
  212. QMAKE_PREFIX_STATICLIB  = lib
  213. QMAKE_EXTENSION_STATICLIB = a
  214.  
  215.  
  216. QMAKE_LIBS      =
  217. QMAKE_LIBS_CORE         = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
  218. QMAKE_LIBS_GUI          = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32
  219. QMAKE_LIBS_NETWORK      = -lws2_32
  220. QMAKE_LIBS_OPENGL       = -lglu32 -lopengl32 -lgdi32 -luser32
  221. QMAKE_LIBS_COMPAT       = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
  222. QMAKE_LIBS_QT_ENTRY     = -lmingw32 -lqtmain
  223.  
  224. !isEmpty(QMAKE_SH) {
  225.     MINGW_IN_SHELL      = 1
  226.     QMAKE_DIR_SEP       = /
  227.     QMAKE_QMAKE     ~= s,\\\\\\\\,/,
  228.     QMAKE_COPY      = cp
  229.     QMAKE_COPY_DIR      = cp -r
  230.     QMAKE_MOVE      = mv
  231.     QMAKE_DEL_FILE      = rm
  232.     QMAKE_MKDIR     = mkdir -p
  233.     QMAKE_DEL_DIR       = rmdir
  234.     QMAKE_CHK_DIR_EXISTS = test -d
  235. } else {
  236.     QMAKE_COPY      = copy /y
  237.     QMAKE_COPY_DIR      = xcopy /s /q /y /i
  238.     QMAKE_MOVE      = move
  239.     QMAKE_DEL_FILE      = del
  240.     QMAKE_MKDIR     = mkdir
  241.     QMAKE_DEL_DIR       = rmdir
  242.     QMAKE_CHK_DIR_EXISTS    = if not exist
  243. }
  244.  
  245. QMAKE_MOC       = \$\$[QT_INSTALL_BINS]\$\${DIR_SEPARATOR}moc\$\${EXE_SUFFIX}
  246. QMAKE_UIC       = \$\$[QT_INSTALL_BINS]\$\${DIR_SEPARATOR}uic\$\${EXE_SUFFIX}
  247. QMAKE_IDC       = \$\$[QT_INSTALL_BINS]\$\${DIR_SEPARATOR}idc\$\${EXE_SUFFIX}
  248.  
  249. QMAKE_IDL       = midl
  250. QMAKE_LIB       = \$\${CROSS_COMPILE}ar -ru
  251. QMAKE_RC        = \$\${CROSS_COMPILE}windres
  252. QMAKE_ZIP       = zip -r -9
  253.  
  254. QMAKE_STRIP     = \$\${CROSS_COMPILE}strip
  255. QMAKE_STRIPFLAGS_LIB    += --strip-unneeded
  256. load(qt_config)
  257.  
  258. #SIMD defines:
  259. CONFIG *= mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 avx
  260. CONFIG -= embed_manifest_exe
  261. CONFIG -= embed_manifest_dll
  262. __EOF
  263. #cp -vf qmake.conf mkspecs/${QMAKESPEC}/
  264.  
  265. rm -vrf "${QT_INSTALL_PREFIX}/"
  266. mkdir -vp "${QT_INSTALL_PREFIX}/"
  267. cp -vrf "${QTDIR}/mkspecs" "${QT_INSTALL_PREFIX}/"
  268.  
  269. CONF_CACHE="${BUILD_DIR}/configure.cache"
  270. cat - <<__EOF> "${CONF_CACHE}"
  271. -opensource
  272. -confirm-license
  273. -platform
  274. ${QMAKESPEC}
  275. -arch
  276. windows
  277. -${LINKAGE}
  278. -stl
  279. -debug-and-release
  280. -no-ltcg
  281. -no-fast
  282. -nomake
  283. examples
  284. -nomake
  285. demos
  286. -rtti
  287. -exceptions
  288. -process
  289. -qmake
  290. -declarative
  291. -declarative-debug
  292. -script
  293. -scripttools
  294. -opengl
  295. desktop
  296. -no-openvg
  297. -no-nis
  298. -no-incredibuild-xge
  299. -no-openssl
  300. -iconv
  301. -graphicssystem
  302. raster
  303. -qt-zlib
  304. -qt-libpng
  305. -qt-libmng
  306. -qt-libtiff
  307. -qt-libjpeg
  308. -no-vcproj
  309. -no-dsp
  310. -no-qt3support
  311. -no-style-plastique
  312. -no-style-motif
  313. -no-style-cleanlooks
  314. -no-style-cde
  315. -no-webkit
  316. -no-phonon
  317. -no-phonon-backend
  318. -no-multimedia
  319. -no-audio-backend
  320. -native-gestures
  321. -prefix
  322. ${QT_INSTALL_PREFIX_W}
  323. __EOF
  324.  
  325.  
  326. #SQL plugins
  327. #@cmd /K @echo %~s1
  328. MYSQL_PATH="C:/PROGRA~1/MySQL/MYSQLS~1.6"
  329. if [ -d ${MYSQL_PATH} ]
  330. then
  331.     gendef - "${MYSQL_PATH}/lib/libmysql.dll" > "${MYSQL_PATH}/lib/libmysql.def"
  332.     dlltool -k --input-def "${MYSQL_PATH}/lib/libmysql.def" --dllname "${MYSQL_PATH}/lib/libmysql.dll" --output-lib "${MYSQL_PATH}/lib/libmysql.a"
  333.     echo "-plugin-sql-mysql -qt-sql-mysql -I ${MYSQL_PATH}/include -L ${MYSQL_PATH}/lib -l mysql" >> "${CONF_CACHE}"
  334.     MYSQL_DIR_SRC="${QTDIR}/src/plugins/sqldrivers/mysql"
  335. fi
  336.  
  337. PSQL_PATH="C:/PROGRA~1/POSTGR~1/9.2"
  338. if [ -d ${PSQL_PATH} ]
  339. then
  340.     gendef - "${PSQL_PATH}/bin/libpq.dll" > "${PSQL_PATH}/bin/libpq.def"
  341.     dlltool -k --input-def "${PSQL_PATH}/bin/libpq.def" --dllname "${PSQL_PATH}/bin/libpq.dll" --output-lib "${PSQL_PATH}/lib/libpq.a"
  342.     echo "-plugin-sql-psql -qt-sql-psql -I ${PSQL_PATH}/include -L ${PSQL_PATH}/lib -l pq" >> "${CONF_CACHE}"
  343.     PSQL_DIR_SRC="${QTDIR}/src/plugins/sqldrivers/psql"
  344. fi
  345.  
  346. echo "-plugin-sql-odbc -qt-sql-odbc" >> "${CONF_CACHE}"
  347. ODBC_DIR_SRC="${QTDIR}/src/plugins/sqldrivers/odbc"
  348.  
  349. pushd "${BUILD_DIR}"
  350. time "${QTDIR}/configure.exe" -redo
  351. popd
  352.  
  353. cat - <<__EOF> "${BUILD_DIR}/install.sh"
  354. #!/usr/bin/env bash
  355.  
  356. set -o verbose
  357. set -o xtrace
  358. set -o errexit
  359.  
  360. PATH=${PATH}
  361. time make --directory="${BUILD_DIR}/" install
  362.  
  363. if [ -d ${MYSQL_PATH} ]
  364. then
  365.     qmake -spec "${QMAKESPEC}" "INCLUDEPATH+=${MYSQL_PATH}/include" "LIBS+=${MYSQL_PATH}/lib/libmysql.a" "${MYSQL_DIR_SRC}/mysql.pro"
  366.     time make --directory="${MYSQL_DIR_SRC}/" debug-install release-install
  367. fi
  368.  
  369. if [ -d ${PSQL_PATH} ]
  370. then
  371.     qmake -spec "${QMAKESPEC}" "INCLUDEPATH+=${PSQL_PATH}/include" "LIBS+=${PSQL_PATH}/lib/libpq.a" "${PSQL_DIR_SRC}/psql.pro"
  372.     time make --directory="${PSQL_DIR_SRC}/" debug-install release-install
  373. fi
  374.  
  375. qmake -spec "${QMAKESPEC}" "${ODBC_DIR_SRC}/odbc.pro"
  376. time make --directory="${ODBC_DIR_SRC}/" debug-install release-install
  377.  
  378. __EOF
  379.  
  380. #bash "${BUILD_DIR}/install.sh" &
Advertisement
Add Comment
Please, Sign In to add comment