| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- # 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")
|