qtbase-6.3.0-win-msvc.cmake 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file Copyright.txt or https://cmake.org/licensing for details.
  3. # Run this script in a Visual Studio Command Prompt to generate Qt binaries.
  4. cmake_minimum_required(VERSION 3.23)
  5. if ("$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "x64")
  6. set(arch "x86_64")
  7. elseif ("$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "x86")
  8. set(arch "i386")
  9. elseif ("$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "arm64")
  10. set(arch "arm64")
  11. else()
  12. message("VSCMD_ARG_TGT_ARCH env var not recognized. Run this from a Visual Studio Command Prompt.")
  13. return()
  14. endif()
  15. if ("$ENV{VCToolsVersion}" MATCHES [[^([0-9][0-9])\.([0-9])]])
  16. set(toolset "msvc_v${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
  17. else()
  18. message( "VCToolsVersion='$ENV{VCToolsVersion}' env var not recognized. Run this from a Visual Studio Command Prompt.")
  19. return()
  20. endif()
  21. set(srcname "qtbase-everywhere-src-6.3.0")
  22. set(pkgname "qt-6.3.0-win-${arch}-${toolset}-1")
  23. set(pkgname_host "qt-6.3.0-win-x86_64-${toolset}-1")
  24. set(topdir "${CMAKE_CURRENT_BINARY_DIR}")
  25. set(srcdir "${topdir}/${srcname}")
  26. set(blddir "${topdir}/${pkgname}-build")
  27. set(prefix "${topdir}/${pkgname}")
  28. set(prefix_host "${topdir}/${pkgname_host}")
  29. # Qt Source
  30. if (NOT EXISTS "${srcdir}")
  31. 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
  32. EXPECTED_HASH SHA256=b865aae43357f792b3b0a162899d9bf6a1393a55c4e5e4ede5316b157b1a0f99)
  33. file(ARCHIVE_EXTRACT INPUT qt.tar.xz)
  34. file(REMOVE qt.tar.xz)
  35. endif()
  36. # Download and use LLVM's clang-cl to compiler for arm64
  37. if (arch STREQUAL "arm64" AND CMAKE_ARGV3 STREQUAL "clang-cl")
  38. set(ENV{PATH} "c:/Program Files/LLVM/bin;$ENV{PATH}")
  39. set(ENV{CC} "clang-cl --target=arm64-pc-windows-msvc")
  40. set(ENV{CXX} "clang-cl --target=arm64-pc-windows-msvc")
  41. endif()
  42. # Build Qt
  43. if (NOT EXISTS "${blddir}")
  44. file(MAKE_DIRECTORY "${blddir}")
  45. if ("${arch}" STREQUAL "arm64")
  46. set(qt_platform "win32-arm64-msvc")
  47. set(qt_host_path -qt-host-path "${prefix_host}")
  48. else()
  49. set(qt_platform "win32-msvc")
  50. unset(qt_host_path)
  51. endif()
  52. execute_process(
  53. RESULT_VARIABLE result
  54. WORKING_DIRECTORY "${blddir}"
  55. COMMAND
  56. ${srcdir}/configure.bat
  57. -prefix ${prefix}
  58. -static
  59. -static-runtime
  60. -release
  61. -opensource -confirm-license
  62. -platform ${qt_platform}
  63. ${qt_host_path}
  64. -gui
  65. -widgets
  66. -qt-doubleconversion
  67. -qt-freetype
  68. -qt-harfbuzz
  69. -qt-pcre
  70. -qt-zlib
  71. -qt-libpng
  72. -qt-libjpeg
  73. -no-gif
  74. -no-icu
  75. -no-pch
  76. -no-opengl
  77. -no-dbus
  78. -no-accessibility
  79. -no-feature-androiddeployqt
  80. -no-feature-printsupport
  81. -no-feature-sql
  82. -nomake examples
  83. -nomake tests
  84. )
  85. if(NOT result EQUAL 0)
  86. message(FATAL_ERROR "configure.bat failed: ${result}")
  87. endif()
  88. execute_process(
  89. RESULT_VARIABLE result
  90. WORKING_DIRECTORY "${blddir}"
  91. COMMAND ninja
  92. )
  93. if(NOT result EQUAL 0)
  94. message(FATAL_ERROR "ninja failed: ${result}")
  95. endif()
  96. endif()
  97. # Install Qt
  98. if (NOT EXISTS "${prefix}")
  99. execute_process(
  100. RESULT_VARIABLE result
  101. WORKING_DIRECTORY "${blddir}"
  102. COMMAND ninja install
  103. )
  104. if(NOT result EQUAL 0)
  105. message(FATAL_ERROR "ninja install failed: ${result}")
  106. endif()
  107. endif()
  108. # Package Qt
  109. file(ARCHIVE_CREATE OUTPUT "${pkgname}.zip" PATHS "${pkgname}" FORMAT "zip")