mirror of
https://github.com/crystalidea/qt-build-tools.git
synced 2024-11-30 07:11:59 +08:00
104 lines
4.3 KiB
Perl
104 lines
4.3 KiB
Perl
|
use strict;
|
||
|
use Cwd;
|
||
|
use Path::Tiny;
|
||
|
use IPC::Cmd qw[can_run run];
|
||
|
|
||
|
# check requirements:
|
||
|
die "Cannot proceed without the 'bin' folder'" if (!-e "bin");
|
||
|
can_run('cmake') or die 'cmake is not installed!';
|
||
|
|
||
|
my $current_dir = getcwd;
|
||
|
my $prefix_dir = path($current_dir)->parent(1); # one level up
|
||
|
$current_dir =~ s#/#\\#g; # convert separators to Windows-style
|
||
|
$prefix_dir =~ s#/#\\#g; # convert separators to Windows-style
|
||
|
|
||
|
my $arch = $ARGV[0];
|
||
|
my $openssl_v_major = "1.1.1"; # The 1.1.1 series is Long Term Support (LTS) release, supported until 11th September 2023
|
||
|
my $openssl_v_minor = "k";
|
||
|
my $openssl_version = "$openssl_v_major$openssl_v_minor";
|
||
|
my $openssl_dir = "$current_dir\\openssl-$openssl_version";
|
||
|
my $openssl_download = "https://www.openssl.org/source/openssl-$openssl_version.tar.gz";
|
||
|
my $openssl_arch = $arch eq "amd64" ? "WIN64A" : "WIN32";
|
||
|
|
||
|
$arch = "x86" if ($arch eq ''); # specify x86 is nothing is specified
|
||
|
die "Please specify architecture (x86 or amd64)" if ($arch ne "x86" && $arch ne "amd64"); # die if user specified anything except x86 or amd64
|
||
|
|
||
|
# will create a batch file
|
||
|
|
||
|
my $batfile = 'compile_win.bat';
|
||
|
|
||
|
open BAT, '>', $batfile;
|
||
|
|
||
|
printLineToBat ("SET PATH=%PATH%;%cd%\\bin"); # add bin folder to the path for 7z and wget
|
||
|
printLineToBat ("CALL \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" $arch");
|
||
|
printLineToBat ("SET _ROOT=%cd%");
|
||
|
printLineToBat ("SET PATH=%_ROOT%\\qtbase\\bin;%_ROOT%\\gnuwin32\\bin;%PATH%"); # http://doc.qt.io/qt-5/windows-building.html
|
||
|
printLineToBat ("SET OPENSSL_LIBS=-lUser32 -lAdvapi32 -lGdi32 -llibcrypto -llibssl");
|
||
|
|
||
|
printLineToBat ("IF EXIST qt6-build GOTO SECOND_STEP");
|
||
|
printLineToBat ("mkdir qt6-build");
|
||
|
printLineToBat (":SECOND_STEP");
|
||
|
printLineToBat ("cd qt6-build");
|
||
|
|
||
|
printLineToBat ("if \"%~1\"==\"step2\" goto step2");
|
||
|
|
||
|
# step1: compile openssl and do configure. For some reason, can't continue script execution after configure, have to make step2
|
||
|
printLineToBat ("IF EXIST $openssl_dir\\build GOTO OPENSSL_ALREAD_COMPILED");
|
||
|
printLineToBat ("wget --no-check-certificate $openssl_download");
|
||
|
printLineToBat ("7z x openssl-$openssl_version.tar.gz");
|
||
|
printLineToBat ("7z x openssl-$openssl_version.tar");
|
||
|
printLineToBat ("rm openssl-$openssl_version.tar.gz");
|
||
|
printLineToBat ("rm openssl-$openssl_version.tar");
|
||
|
printLineToBat ("cd $openssl_dir"); # go to openssl dir
|
||
|
printLineToBat ("perl Configure VC-$openssl_arch no-asm no-shared no-tests --prefix=%cd%\\build --openssldir=%cd%\\build");
|
||
|
printLineToBat ("nmake");
|
||
|
printLineToBat ("nmake install");
|
||
|
# do some clean up:
|
||
|
printLineToBat ("rm test\\*.exe");
|
||
|
printLineToBat ("rm test\\*.pdb");
|
||
|
printLineToBat ("rm test\\*.obj");
|
||
|
printLineToBat ("del /s /f /q out32");
|
||
|
printLineToBat ("del /s /f /q out32.dbg");
|
||
|
printLineToBat ("cd .."); # go back to qtbase
|
||
|
|
||
|
printLineToBat (":OPENSSL_ALREAD_COMPILED");
|
||
|
|
||
|
# openssl: see https://bugreports.qt.io/browse/QTBUG-65501
|
||
|
|
||
|
my $skipped_modules = "qt3d qt5compat qtactiveqt qtcharts qtcoap qtconnectivity qtdatavis3d qtdeclarative qtdoc qtlottie qtmqtt qtmultimedia qtnetworkauth qtopcua qtpositioning qtquick3d qtquicktimeline qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools qtsvg qttranslations qtvirtualkeyboard qtwayland qtwebchannel qtwebengine qtwebsockets qtwebview";
|
||
|
|
||
|
my $skipped_modules_cmd;
|
||
|
|
||
|
foreach (split(/\s/, $skipped_modules)) {
|
||
|
$skipped_modules_cmd .= "-skip $_ ";
|
||
|
}
|
||
|
|
||
|
# -developer-build creates an in-source build for developer usage.
|
||
|
# -developer-build adds /WX (treat warning as error) and Qt fails to be compiled
|
||
|
# in this case add extra -no-warnings-are-errors parameter
|
||
|
|
||
|
printLineToBat ("..\\configure -opensource -debug-and-release -confirm-license -opengl desktop -mp -nomake tests -nomake examples -prefix $prefix_dir $skipped_modules_cmd -openssl-linked -- -DOPENSSL_ROOT_DIR=\"$openssl_dir\\build\" -DOPENSSL_INCLUDE_DIR=\"$openssl_dir\\build\\include\" -DOPENSSL_USE_STATIC_LIBS=ON");
|
||
|
|
||
|
printLineToBat ("goto :EOF");
|
||
|
|
||
|
# step 2:
|
||
|
printLineToBat (":step2");
|
||
|
|
||
|
printLineToBat ("cmake --build . --parallel");
|
||
|
printLineToBat ("cmake --install . --config Release");
|
||
|
printLineToBat ("cmake --install . --config Debug");
|
||
|
|
||
|
# clean up
|
||
|
printLineToBat ("rmdir qt6-build /s /q");
|
||
|
|
||
|
close BAT;
|
||
|
|
||
|
system ($batfile);
|
||
|
system ("$batfile step2");
|
||
|
|
||
|
system ("pause");
|
||
|
|
||
|
sub printLineToBat
|
||
|
{
|
||
|
print BAT "$_[0]\n";
|
||
|
}
|