gui: Enable console line edit on setClientModel
[novacoin.git] / doc / crosscompiling_building Windows binary under Unix.txt
1 \feffДанный способ должен подходить для любой Unix системы: Linux, FreeBSD, MacOS X
2 Данное руководство писалось на Linux Mint 17.1 ( http://linuxmint.com/ ) и проверялось на Ubuntu 14.04 (https://www.ubuntu.com/)
3
4 1) Подготовка системы для кросскомпиляции.
5
6 sudo apt-get install git bison cmake flex g++ gperf ruby scons libghc-zlib-dev  libghc-zlib-bindings-dev
7
8 2) Установка MXE и зависимостей
9
10 cd /home/<ваше имя>/
11 git clone https://github.com/mxe/mxe.git
12  
13 sudo apt-get install autoconf automake autopoint libtool intltool libtoolize p7zip-full libgtk2.0-dev
14
15 2.1) gcc
16
17 cd /home/<ваше имя>/mxe
18 make gcc zlib libpng
19
20 Проверка того, что установка gcc прошла успешно:
21 В папке /home/<ваше имя>/mxe/usr/bin должен появиться файл i686-w64-mingw32.static-gcc и i686-w64-mingw32.static-g++
22 И при запуске /home/<ваше имя>/mxe/usr/bin/i686-w64-mingw32.static-gcc -v должно выдаваться
23 ......
24 Thread model: win32
25 gcc version 5.4.0 (GCC)
26
27 В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должны быть файлы:
28 libz.a
29 libpng.a
30
31 2.2) Openssl
32  
33 cd /home/<ваше имя>/mxe
34 make openssl
35
36 Проверка что установка Openssl прошла успешно:
37 В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должны появиться два файла
38 -libssl.a
39 -libcrypto.a
40 В папке mxe/usr/i686-w64-mingw32.static/include должна появиться папка openssl
41
42 2.3) Boost
43
44 cd /home/<ваше имя>/mxe
45 make boost
46
47 Проверка что установка Boost прошла успешно:
48 В /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib папке должны появиться файлы:
49 -libboost_имябиблиотеки_mt.a (libboost_atomic-mt.a и другие подобные файлы)
50 -libboost_имябиблиотеки_mt-d.a (libboost_atomic-mt-d.a и другие подобные файлы)
51
52 В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/include должна появиться папка boost
53
54 2.4) Berkeley DB
55 -Скачайте http://download.oracle.com/berkeley-db/db-6.0.20.tar.gz
56 -Распакуйте в домашнюю папку
57 -Откройте файл /home/<ваше имя>/db-6.0.20/src/dbinc/win_db.h
58 -Измените 
59 #include <WinIoCtl.h>
60 на
61 #include <winioctl.h>
62 -Сохраните файл
63 -Откройте терминал:
64
65 cd /home/<ваше имя>/db-6.0.20/dist
66 chmod +x configure
67 cd
68 cd /home/<ваше имя>/db-6.0.20/build_unix
69 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
70 ../dist/configure --host=i686-w64-mingw32.static --enable-mingw --enable-cxx --disable-shared --disable-replication
71 make
72
73 Проверка, что установка Berkeley DB прошла успешно:
74 В папке /home/<ваше имя>/db-6.0.20/build_unix должны появиться файлы:
75 libdb.a
76 libdb_cxx.a
77
78 2.5) qrencode
79 -Скачайте http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz
80 -Распакуйте в домашнюю папку
81 -Откройте терминал:
82
83 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
84 cd /home/<ваше имя>/qrencode-3.4.4
85 chmod +x configure
86 ./configure --host=i686-w64-mingw32.static --enable-static --disable-shared --without-tools
87 make
88
89 Проверка что qrencode успешно собралась:
90 в папке /home/<ваше имя>/qrencode-3.4.4/.libs должен быть файл:
91 libqrencode.a
92
93 2.6 Qt 5 и Qt 4
94
95 Qt 4
96 -Откройте терминал:
97
98 cd /home/<ваше имя>/mxe
99 make qt
100
101 Проверка что Qt4 собрался правильно:
102 -Откройте терминал:
103
104 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
105 i686-w64-mingw32.static-qmake-qt4 -v
106
107 -Должно появиться в ответ
108 QMake version 2.01a
109 Using Qt version 4.8.7 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt/lib
110
111 Qt 5
112 -Откройте терминал:
113
114 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
115 cd /home/<ваше имя>/mxe
116 make qtbase qttools qttranslations
117
118 Проверка что Qt5 собрался правильно:
119 -Откройте терминал:
120
121 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
122 i686-w64-mingw32.static-qmake-qt5 -v
123
124 -Должно появиться в ответ
125 QMake version 3.1
126 Using Qt version 5.8.0 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt5/lib
127
128 3. Компиляция
129
130 3.1 Скачиваем исходники
131 -Перейдите в домашнюю папку
132 -Откройте терминал:
133
134 git clone https://github.com/novacoin-project/novacoin.git
135
136 3.2 Собираем novacoind 
137 -Откройте файл makefile.mingw в текстовом редакторе (например, Pluma, gedit)
138 -Замените CC=gcc на 
139 CC=$(CROSS)gcc
140 CXX=$(CROSS)g++
141
142 -Добавьте  строчку USE_ASM:=1
143 -Поменяйте текущие INCLUDEPATHS, LIBPATHS, LIBS на:
144
145 BOOST_SUFFIX?=-mt
146 BOOST_THREAD_LIB_SUFFIX?=_win32-mt
147
148 INCLUDEPATHS= \
149  -I"$(CURDIR)" \
150  -I"/home/<ваше имя>/db-6.0.20/build_unix" \
151  
152 LIBPATHS= \
153  -L"$(CURDIR)/leveldb" \
154  -L"/home/<ваше имя>/db-6.0.20/build_unix" \
155
156 LIBS= \
157   -l leveldb \
158   -l memenv \
159   -l boost_system$(BOOST_SUFFIX) \
160   -l boost_filesystem$(BOOST_SUFFIX) \
161   -l boost_program_options$(BOOST_SUFFIX) \
162   -l boost_thread$(BOOST_THREAD_LIB_SUFFIX) \
163   -l boost_chrono$(BOOST_SUFFIX) \
164   -l db_cxx \
165   -l ssl \
166   -l crypto \
167   -l z \
168   -l pthread
169
170 -Поменяйте в последних строчках makefile.mingw
171 g++ -c $(CFLAGS) -o $@ $<
172 на
173 $(CXX) -c $(CFLAGS) -o $@ $<
174
175 g++ $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
176 на
177 $(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
178
179 -Если вы хотите использовать LevelDB как базу блоков то измените:
180 USE_LEVELDB:=0 
181 на
182 USE_LEVELDB:=1
183 (выше USE_IPV6:=1)
184 Откройте файл /home/<ваше имя>/novacoin/src/leveldb/Makefile
185 Вставьте ниже строчки CXXFLAGS += -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) следующие строки:
186
187 CC=$(CROSS)gcc
188 CXX=$(CROSS)g++
189 Сохраните файл
190
191 Снова возвращаемся в файл makefile.mingw, измените 
192 cd leveldb;TARGET_OS=NATIVE_WINDOWS make libleveldb.a libmemenv.a; cd ..
193 на 
194 cd leveldb; TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a; cd ..
195
196 Если вы хотите использовать BerkeleyDB как базу блоков, то просто удалите строчку USE_LEVELDB:=1
197
198 Измените
199 clean:
200         -del /Q novacoind.exe
201         -del /Q obj\*
202         -del /Q crypto\scrypt\asm\obj\*
203
204 на
205
206 clean:
207         -rm novacoind.exe
208         -rm obj/*
209         -rm crypto/scrypt/asm/obj/*
210
211 -Сохраните измененный файл makefile.mingw
212
213 -Откройте терминал:
214
215 cd /home/<ваше имя>/novacoin/src
216 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
217 make -j n CROSS=i686-w64-mingw32.static- -f makefile.mingw (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
218 strip novacoind.exe
219
220 Если всё сделано правильно, то файл novacoind.exe будет находится в папке /home/<ваше имя>/novacoin/src.
221
222 3.3 Собираем Novacoin QT
223
224 Внимание: Если вы хотите собирать Novacoin Qt с LevelDB, но пропустили шаг со сборкой novacoind.exe, то 
225 -Измените Makefile в папке leveldb также как в пункте 3.2
226 -Откройте терминал:
227
228 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
229 cd /home/<ваше имя>/novacoin/src/leveldb
230 TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a
231
232 -Откройте файл /home/<ваше имя>/novacoin/novacoin-qt.pro в текстовом редакторе (например, Pluma, gedit)
233 -Ниже 
234 # Dependency library locations can be customized with:
235 #    BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH,
236 #    BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively
237 замените прописанные пути к зависимостям на
238
239 BOOST_LIB_SUFFIX=-mt
240 BOOST_THREAD_LIB_SUFFIX=_win32-mt
241 BDB_INCLUDE_PATH=/home/<ваше имя>/db-6.0.20/build_unix
242 BDB_LIB_PATH=/home/<ваше имя>/db-6.0.20/build_unix
243 QRENCODE_INCLUDE_PATH=/home/<ваше имя>/qrencode-3.4.4
244 QRENCODE_LIB_PATH=/home/<ваше имя>/qrencode-3.4.4/.libs
245
246 Так же измените(если ещё не изменено) 
247 LIBS += -lshlwapi
248 genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a
249
250 на
251  
252 LIBS += -lshlwapi
253 #genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a
254
255 Если в файле нет такой строчки CONFIG += static , то добавьте её.
256
257 Измените 
258 win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat
259 на 
260 win32:QMAKE_LFLAGS *= -Wl,--large-address-aware -static 
261
262 Измените 
263 win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe
264 на
265 win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
266
267 -Сохраните измененный файл novacoin-qt.pro
268 -Откройте терминал и выполните следующие команды:
269
270 Qt4 + транзакционный индекс LevelDB
271
272 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
273 cd /home/<ваше имя>/novacoin
274 i686-w64-mingw32.static-qmake-qt4 "USE_IPV6=1" "USE_LEVELDB=1" "USE_ASM=1" novacoin-qt.pro
275 make -j n -f Makefile.Release  (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
276
277 Qt4 + транзакционный индекс BDB
278
279 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
280 cd /home/<ваше имя>/novacoin
281 i686-w64-mingw32.static-qmake-qt4 "USE_IPV6=1" "USE_ASM=1" novacoin-qt.pro
282 make -j n -f Makefile.Release  (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
283
284 Qt5 + транзакционный индекс LevelDB
285
286 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
287 cd /home/<ваше имя>/novacoin
288 i686-w64-mingw32.static-qmake-qt5 "USE_IPV6=1" "USE_LEVELDB=1" "USE_ASM=1" novacoin-qt.pro
289 make -j n -f Makefile.Release  (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
290
291 Qt5 + транзакционный индекс BDB
292
293 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
294 cd /home/<ваше имя>/novacoin
295 i686-w64-mingw32.static-qmake-qt5 "USE_IPV6=1" "USE_ASM=1" novacoin-qt.pro
296 make -j n -f Makefile.Release  (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
297
298 Если всё сделано правильно, то файл novacoin-qt.exe будет находится в папке /home/<ваше имя>/novacoin/release.
299
300 Если вы хотите уменьшить размер бинарных файлов, то
301 1) Перейдите на сайт http://upx.sourceforge.net/#downloadupx
302 2) Скачайте программу в соответсвии с вашей системой
303 3) Распакуйте программу в папку с бинарными Novacoin файлами.
304 4) Введите в терминале
305 ./upx -9 novacoind.exe
306 затем
307 ./upx -9 novacoin-qt.exe
308
309 И ваши novacoind и novacoin-qt станут меньше ~ в 3 раза.