]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - LinuxGUI/build_qt.sh
Fix the boot issue for pfSense 2.7.x (#2775)
[Ventoy.git] / LinuxGUI / build_qt.sh
1 #!/bin/bash
2
3 force_copy() {
4 [ -e "$2" ] && rm -f "$2"
5 cp -a "$1" "$2"
6 }
7
8 compile_file() {
9 name=$(basename $2)
10 obj=${name%.*}
11
12 echo "$1 ${obj}.o ..."
13 $1 -O2 -Wall -std=gnu99 -Wno-unused-function -Wno-format-truncation -Wno-address-of-packed-member -DSTATIC=static -DINIT= -D_FILE_OFFSET_BITS=64 \
14 -I./Ventoy2Disk \
15 -I./Ventoy2Disk/Core \
16 -I./Ventoy2Disk/Web \
17 -I./Ventoy2Disk/QT \
18 -I./Ventoy2Disk/Include \
19 -I./Ventoy2Disk/Lib/libhttp/include \
20 -I./Ventoy2Disk/Lib/fat_io_lib/include \
21 -I./Ventoy2Disk/Lib/xz-embedded/linux/include \
22 -I./Ventoy2Disk/Lib/xz-embedded/linux/include/linux \
23 -I./Ventoy2Disk/Lib/xz-embedded/userspace \
24 -I ./Ventoy2Disk/Lib/exfat/src/libexfat \
25 -I ./Ventoy2Disk/Lib/exfat/src/mkfs \
26 -I ./Ventoy2Disk/Lib/fat_io_lib \
27 -c $2 -o ${obj}.o
28 }
29
30 compile_dir() {
31 dir=$1
32 for i in $(ls $dir/*.c); do
33 compile_file "$2" "$i"
34 done
35 }
36
37 compile_lib() {
38 compile_dir ./Ventoy2Disk/Core "$1"
39 compile_dir ./Ventoy2Disk/Web "$1"
40 compile_dir ./Ventoy2Disk/QT "$1"
41 compile_dir ./Ventoy2Disk/Lib/exfat/src/libexfat "$1"
42 compile_dir ./Ventoy2Disk/Lib/exfat/src/mkfs "$1"
43 compile_dir ./Ventoy2Disk/Lib/fat_io_lib "$1"
44 compile_file "$1" Ventoy2Disk/Lib/xz-embedded/linux/lib/decompress_unxz.c
45
46 rm -f libVentoyQT_$3.a
47 $2 -rcs libVentoyQT_$3.a *.o
48 rm -f *.o
49 }
50
51 build_qt() {
52 echo "$1 main.o ..."
53 $1 -c $2 $3 -o main.o ./Ventoy2Disk/QT/main.cpp
54
55 echo "$1 partcfgdialog.o ..."
56 $1 -c $2 $3 -o partcfgdialog.o ./Ventoy2Disk/QT/partcfgdialog.cpp
57
58 echo "$1 ventoy2diskwindow.o ..."
59 $1 -c $2 $3 -o ventoy2diskwindow.o ./Ventoy2Disk/QT/ventoy2diskwindow.cpp
60
61 echo "$1 moc_partcfgdialog.o ..."
62 $1 -c $2 $3 -o moc_partcfgdialog.o ./Ventoy2Disk/QT/build/moc_partcfgdialog.cpp
63
64 echo "$1 moc_ventoy2diskwindow.o ..."
65 $1 -c $2 $3 -o moc_ventoy2diskwindow.o ./Ventoy2Disk/QT/build/moc_ventoy2diskwindow.cpp
66
67 echo "$1 Ventoy2Disk.qt5_${6} ..."
68 $1 $4 -o Ventoy2Disk.qt5_${6} *.o $5
69 rm -f *.o
70 }
71
72 build_qt_app() {
73
74 DEFINES="-DQT_CHECK_EUID -DQT_DEPRECATED_WARNINGS -DSTATIC=static -DINIT= -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB"
75 CXXFLAGS="-pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $DEFINES -Wno-deprecated-declarations -Wno-deprecated-copy"
76 INCPATH=" -I./Ventoy2Disk -I. -I./Ventoy2Disk/Core -I./Ventoy2Disk/Web -I./Ventoy2Disk/QT -I./Ventoy2Disk/QT/build -I./Ventoy2Disk/Include -I./Ventoy2Disk/Lib/libhttp/include -I./Ventoy2Disk/Lib/fat_io_lib/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include/linux -I./Ventoy2Disk/Lib/xz-embedded/userspace -I./Ventoy2Disk/Lib/exfat/src/libexfat -I./Ventoy2Disk/Lib/fat_io_lib -I$QT_INC_PATH -I$QT_INC_PATH/QtWidgets -I$QT_INC_PATH/QtGui -I$QT_INC_PATH/QtCore -I. -I."
77
78 SUBLIBS="./libVentoyQT_${2}.a"
79 LIBS="$SUBLIBS $QT_LIB_PATH/libQt5Widgets.so $QT_LIB_PATH/libQt5Gui.so $QT_LIB_PATH/libQt5Core.so -lpthread"
80
81 build_qt "$1" "$CXXFLAGS" "$INCPATH" "$LFLAGS" "$LIBS" "$3"
82 }
83
84 # build QT5 for i386
85 build_qt_i386() {
86 QT_INC_PATH="./EXLIB/i386/usr/include/i386-linux-gnu/qt5"
87 QT_LIB_PATH="./EXLIB/i386/usr/lib/i386-linux-gnu"
88 DEFINES="-DQT_CHECK_EUID -DQT_DEPRECATED_WARNINGS -DSTATIC=static -DINIT= -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB"
89 CXXFLAGS="-pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $DEFINES -Wno-deprecated-declarations"
90 INCPATH=" -I./Ventoy2Disk -I. -I./Ventoy2Disk/Core -I./Ventoy2Disk/Web -I./Ventoy2Disk/QT -I./Ventoy2Disk/QT/build -I./Ventoy2Disk/Include -I./Ventoy2Disk/Lib/libhttp/include -I./Ventoy2Disk/Lib/fat_io_lib/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include/linux -I./Ventoy2Disk/Lib/xz-embedded/userspace -I./Ventoy2Disk/Lib/exfat/src/libexfat -I./Ventoy2Disk/Lib/fat_io_lib -I$QT_INC_PATH -I$QT_INC_PATH/QtWidgets -I$QT_INC_PATH/QtGui -I$QT_INC_PATH/QtCore -I."
91 LFLAGS="-Wl,-O1 -Wl,-rpath-link,$QT_LIB_PATH -L$QT_LIB_PATH -Wl,-rpath-link,./EXLIB/i386/lib/i386-linux-gnu -L./EXLIB/i386/lib/i386-linux-gnu"
92 SUBLIBS="./libVentoyQT_i386.a"
93 LIBS="$SUBLIBS $QT_LIB_PATH/libQt5Widgets.so $QT_LIB_PATH/libQt5Gui.so $QT_LIB_PATH/libQt5Core.so -lpthread"
94
95 compile_lib "gcc -m32" "ar" "i386"
96 build_qt "g++ -m32" "$CXXFLAGS" "$INCPATH" "$LFLAGS" "$LIBS" "32"
97 }
98
99
100 #build QT5 for x86_64
101 build_qt_x86_64() {
102 compile_lib "gcc" "ar" "x86_64"
103 QT_INC_PATH="/opt/Qt5.9.0/5.9/gcc_64/include"
104 QT_LIB_PATH="/opt/Qt5.9.0/5.9/gcc_64/lib"
105 LFLAGS="-Wl,-O1 -Wl,-rpath-link,$QT_LIB_PATH -L$QT_LIB_PATH"
106 build_qt_app "g++" "x86_64" "64"
107
108 force_copy Ventoy2Disk.qt5_64 ../INSTALL/tool/x86_64/Ventoy2Disk.qt5
109 rm -f ./libVentoyQT_x86_64.a
110 }
111
112
113 # build QT5 for arm64
114 build_qt_aarch64() {
115 compile_lib "aarch64-linux-gnu-gcc" "aarch64-linux-gnu-ar" "aarch64"
116 QT_INC_PATH="./EXLIB/aarch64/usr/include/qt5"
117 QT_LIB_PATH="./EXLIB/aarch64/usr/lib64"
118 LFLAGS="-Wl,-O1 -Wl,-rpath-link,$QT_LIB_PATH -L$QT_LIB_PATH -Wl,-rpath-link,./EXLIB/aarch64/lib64 -L./EXLIB/aarch64/lib64"
119 build_qt_app "aarch64-linux-gnu-g++" "aarch64" "aa64"
120
121 force_copy Ventoy2Disk.qt5_aa64 ../INSTALL/tool/aarch64/Ventoy2Disk.qt5
122 rm -f ./libVentoyQT_aarch64.a
123 }
124
125 # build QT5 for mips64
126 build_qt_mips64el() {
127 QT_INC_PATH="./EXLIB/mips64el/usr/include/mips64el-linux-gnuabi64/qt5"
128 QT_LIB_PATH="./EXLIB/mips64el/usr/lib/mips64el-linux-gnuabi64"
129 DEFINES="-DQT_CHECK_EUID -DQT_DEPRECATED_WARNINGS -DSTATIC=static -DINIT= -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB"
130 CXXFLAGS="-pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $DEFINES -Wno-deprecated-declarations"
131 INCPATH=" -I./Ventoy2Disk -I. -I./Ventoy2Disk/Core -I./Ventoy2Disk/Web -I./Ventoy2Disk/QT -I./Ventoy2Disk/QT/build -I./Ventoy2Disk/Include -I./Ventoy2Disk/Lib/libhttp/include -I./Ventoy2Disk/Lib/fat_io_lib/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include/linux -I./Ventoy2Disk/Lib/xz-embedded/userspace -I./Ventoy2Disk/Lib/exfat/src/libexfat -I./Ventoy2Disk/Lib/fat_io_lib -I$QT_INC_PATH -I$QT_INC_PATH/QtWidgets -I$QT_INC_PATH/QtGui -I$QT_INC_PATH/QtCore -I."
132 LFLAGS="-Wl,-O1 -Wl,-rpath-link,$QT_LIB_PATH -L$QT_LIB_PATH -Wl,-rpath-link,./EXLIB/mips64el/lib/mips64el-linux-gnuabi64 -L./EXLIB/mips64el/lib/mips64el-linux-gnuabi64"
133 SUBLIBS="./libVentoyQT_mips64el.a"
134 LIBS="$SUBLIBS $QT_LIB_PATH/libQt5Widgets.so $QT_LIB_PATH/libQt5Gui.so $QT_LIB_PATH/libQt5Core.so -lpthread"
135
136 export PATH=/opt/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/:$PATH
137 compile_lib "mips-linux-gnu-gcc -mips64r2 -mabi=64" "mips-linux-gnu-ar" "mips64el"
138 build_qt "mips-linux-gnu-g++ -mips64r2 -mabi=64" "$CXXFLAGS" "$INCPATH" "$LFLAGS" "$LIBS" "m64e"
139
140 force_copy Ventoy2Disk.qt5_m64e ../INSTALL/tool/mips64el/Ventoy2Disk.qt5
141 rm -f ./libVentoyQT_mips64el.a
142 }
143
144
145 ####################################################################
146 ####################################################################
147 ####################################################################
148 ####################################################################
149
150 sed "s#../Ventoy2Disk#..#g" -i ./Ventoy2Disk/QT/build/moc_partcfgdialog.cpp
151 sed "s#../Ventoy2Disk#..#g" -i ./Ventoy2Disk/QT/build/moc_ventoy2diskwindow.cpp
152
153 #build qt5 i386 in centos 8 environment
154 if [ "$1" = "VENTOY_I386_QT_BUILD" ]; then
155 echo "build i386 qt ..."
156 build_qt_i386
157 exit 0
158 fi
159
160 if [ ! -f /opt/CentOS8/LinuxGUI/build.sh ]; then
161 mount --bind /home/share/Ventoy/LinuxGUI /opt/CentOS8/LinuxGUI
162 fi
163
164 chroot /opt/CentOS8 sh /buildqt.sh
165 force_copy ./Ventoy2Disk.qt5_32 ../INSTALL/tool/i386/Ventoy2Disk.qt5
166 rm -f ./libVentoyQT_i386.a
167
168 build_qt_x86_64
169 build_qt_aarch64
170 build_qt_mips64el