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