summaryrefslogtreecommitdiffstats
path: root/Utilities/Release/win/qtbase-6.3.0-win-msvc.cmake
blob: ae3651d46e2a8b56d4e86b166efd38e89c551457 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.

# Run this script in a Visual Studio Command Prompt to generate Qt binaries.

cmake_minimum_required(VERSION 3.23)

if ("$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "x64")
  set(arch "x86_64")
elseif ("$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "x86")
  set(arch "i386")
elseif ("$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "arm64")
  set(arch "arm64")
else()
  message("VSCMD_ARG_TGT_ARCH env var not recognized.  Run this from a Visual Studio Command Prompt.")
  return()
endif()

if ("$ENV{VCToolsVersion}" MATCHES [[^([0-9][0-9])\.([0-9])]])
  set(toolset "msvc_v${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
else()
  message( "VCToolsVersion='$ENV{VCToolsVersion}' env var not recognized.  Run this from a Visual Studio Command Prompt.")
  return()
endif()

set(srcname "qtbase-everywhere-src-6.3.0")
set(pkgname "qt-6.3.0-win-${arch}-${toolset}-1")
set(pkgname_host "qt-6.3.0-win-x86_64-${toolset}-1")
set(topdir "${CMAKE_CURRENT_BINARY_DIR}")
set(srcdir "${topdir}/${srcname}")
set(blddir "${topdir}/${pkgname}-build")
set(prefix "${topdir}/${pkgname}")
set(prefix_host "${topdir}/${pkgname_host}")

# Qt Source
if (NOT EXISTS "${srcdir}")
  file(DOWNLOAD "https://download.qt.io/official_releases/qt/6.3/6.3.0/submodules/qtbase-everywhere-src-6.3.0.tar.xz" qt.tar.xz
       EXPECTED_HASH SHA256=b865aae43357f792b3b0a162899d9bf6a1393a55c4e5e4ede5316b157b1a0f99)
  file(ARCHIVE_EXTRACT INPUT qt.tar.xz)
  file(REMOVE qt.tar.xz)
endif()

# Download and use LLVM's clang-cl to compiler for arm64
if (arch STREQUAL "arm64" AND CMAKE_ARGV3 STREQUAL "clang-cl")
  set(ENV{PATH} "c:/Program Files/LLVM/bin;$ENV{PATH}")
  set(ENV{CC} "clang-cl --target=arm64-pc-windows-msvc")
  set(ENV{CXX} "clang-cl --target=arm64-pc-windows-msvc")
endif()

# Build Qt
if (NOT EXISTS "${blddir}")
  file(MAKE_DIRECTORY "${blddir}")
  if ("${arch}" STREQUAL "arm64")
    set(qt_platform "win32-arm64-msvc")
    set(qt_host_path -qt-host-path "${prefix_host}")
  else()
    set(qt_platform "win32-msvc")
    unset(qt_host_path)
  endif()

  execute_process(
    RESULT_VARIABLE result
    WORKING_DIRECTORY "${blddir}"
    COMMAND
      ${srcdir}/configure.bat
      -prefix ${prefix}
      -static
      -static-runtime
      -release
      -opensource -confirm-license
      -platform ${qt_platform}
      ${qt_host_path}
      -gui
      -widgets
      -qt-doubleconversion
      -qt-freetype
      -qt-harfbuzz
      -qt-pcre
      -qt-zlib
      -qt-libpng
      -qt-libjpeg
      -no-gif
      -no-icu
      -no-pch
      -no-opengl
      -no-dbus
      -no-accessibility
      -no-feature-androiddeployqt
      -no-feature-printsupport
      -no-feature-sql
      -nomake examples
      -nomake tests
  )
  if(NOT result EQUAL 0)
    message(FATAL_ERROR "configure.bat failed: ${result}")
  endif()

  execute_process(
    RESULT_VARIABLE result
    WORKING_DIRECTORY "${blddir}"
    COMMAND ninja
  )
  if(NOT result EQUAL 0)
    message(FATAL_ERROR "ninja failed: ${result}")
  endif()
endif()

# Install Qt
if (NOT EXISTS "${prefix}")
  execute_process(
    RESULT_VARIABLE result
    WORKING_DIRECTORY "${blddir}"
    COMMAND ninja install
  )
  if(NOT result EQUAL 0)
    message(FATAL_ERROR "ninja install failed: ${result}")
  endif()
endif()

# Package Qt
file(ARCHIVE_CREATE OUTPUT "${pkgname}.zip" PATHS "${pkgname}" FORMAT "zip")