Manually run cppwinrt (#203)
This commit is contained in:
Родитель
3018875eaa
Коммит
9a8b9715ec
|
@ -5,13 +5,17 @@ include(GNUInstallDirs)
|
|||
|
||||
# Set by build server to speed up build/reduce file/object size
|
||||
option(FAST_BUILD "Sets options to speed up build/reduce obj/executable size" OFF)
|
||||
option(WIL_BUILD_PACKAGING "Sets option to build the packaging, default on" On)
|
||||
option(WIL_BUILD_TESTS "Sets option to build the unit tests, default on" On)
|
||||
option(WIL_BUILD_PACKAGING "Sets option to build the packaging, default on" ON)
|
||||
option(WIL_BUILD_TESTS "Sets option to build the unit tests, default on" ON)
|
||||
|
||||
if (NOT DEFINED WIL_BUILD_VERSION)
|
||||
set(WIL_BUILD_VERSION "0.0.0")
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED CPPWINRT_VERSION)
|
||||
set(CPPWINRT_VERSION "2.0.210806.1")
|
||||
endif()
|
||||
|
||||
# Detect the Windows SDK version. If we're using the Visual Studio generator, this will be provided for us. Otherwise
|
||||
# we'll need to assume that this value comes from the command line (e.g. through the VS command prompt)
|
||||
if (DEFINED CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION)
|
||||
|
|
|
@ -11,7 +11,7 @@ goto :init
|
|||
echo USAGE:
|
||||
echo init.cmd [--help] [-c^|--compiler ^<clang^|msvc^>] [-g^|--generator ^<ninja^|msbuild^>]
|
||||
echo [-b^|--build-type ^<debug^|release^|relwithdebinfo^|minsizerel^>] [-l^|--linker link^|lld-link]
|
||||
echo [--fast] [-v^|--version X.Y.Z]
|
||||
echo [-v^|--version X.Y.Z] [--cppwinrt ^<version^>] [--fast]
|
||||
echo.
|
||||
echo ARGUMENTS
|
||||
echo -c^|--compiler Controls the compiler used, either 'clang' (the default) or 'msvc'
|
||||
|
@ -20,6 +20,7 @@ goto :init
|
|||
echo 'relwithdebinfo', or 'minsizerel'
|
||||
echo -v^|--version Specifies the version of the NuGet package produced. Primarily only used by the CI
|
||||
echo build and is typically not necessary when building locally
|
||||
echo --cppwinrt Manually specifies the version of C++/WinRT to use for generating headers
|
||||
echo --fast Used to (slightly) reduce compile times and build output size. This is primarily
|
||||
echo used by the CI build machines where resources are more constrained. This switch is
|
||||
echo temporary and will be removed once https://github.com/microsoft/wil/issues/9 is fixed
|
||||
|
@ -34,6 +35,7 @@ goto :init
|
|||
set CMAKE_ARGS=
|
||||
set BITNESS=
|
||||
set VERSION=
|
||||
set CPPWINRT_VERSION=
|
||||
set FAST_BUILD=0
|
||||
|
||||
:parse
|
||||
|
@ -107,7 +109,7 @@ goto :init
|
|||
if /I "%~1"=="-v" set VERSION_SET=1
|
||||
if /I "%~1"=="--version" set VERSION_SET=1
|
||||
if %VERSION_SET%==1 (
|
||||
if "%VERSION%" NEQ "" echo ERROR: Version alread specified & call :usage & exit /B 1
|
||||
if "%VERSION%" NEQ "" echo ERROR: Version already specified & call :usage & exit /B 1
|
||||
if /I "%~2"=="" echo ERROR: Version string missing & call :usage & exit /B 1
|
||||
|
||||
set VERSION=%~2
|
||||
|
@ -117,6 +119,17 @@ goto :init
|
|||
goto :parse
|
||||
)
|
||||
|
||||
if /I "%~1"=="--cppwinrt" (
|
||||
if "%CPPWINRT_VERSION%" NEQ "" echo ERROR: C++/WinRT version already specified & call :usage & exit /B 1
|
||||
if /I "%~2"=="" echo ERROR: C++/WinRT version string missing & call :usage & exit /B 1
|
||||
|
||||
set CPPWINRT_VERSION=%~2
|
||||
|
||||
shift
|
||||
shift
|
||||
goto :parse
|
||||
)
|
||||
|
||||
if /I "%~1"=="--fast" (
|
||||
if %FAST_BUILD% NEQ 0 echo ERROR: Fast build already specified
|
||||
set FAST_BUILD=1
|
||||
|
@ -173,6 +186,8 @@ goto :init
|
|||
|
||||
if "%VERSION%" NEQ "" set CMAKE_ARGS=%CMAKE_ARGS% -DWIL_BUILD_VERSION=%VERSION%
|
||||
|
||||
if "%CPPWINRT_VERSION%" NEQ "" set CMAKE_ARGS=%CMAKE_ARGS% -DCPPWINRT_VERSION=%CPPWINRT_VERSION%
|
||||
|
||||
if %FAST_BUILD%==1 set CMAKE_ARGS=%CMAKE_ARGS% -DFAST_BUILD=ON
|
||||
|
||||
set CMAKE_ARGS=%CMAKE_ARGS% -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
||||
|
|
|
@ -7,6 +7,31 @@ include_directories(${PROJECT_SOURCE_DIR}/include)
|
|||
# TODO: Might be worth trying to conditionally do this on SDK version, assuming there's a semi-easy way to detect that
|
||||
include_directories(BEFORE SYSTEM ./workarounds/wrl)
|
||||
|
||||
# Because we don't always use msbuild, we need to run nuget manually
|
||||
find_program(NUGET nuget)
|
||||
if (NOT NUGET)
|
||||
message(FATAL_ERROR "Unable to find the nuget CLI tool. Please install it from https://www.nuget.org/downloads and ensure it has been added to the PATH")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND
|
||||
${NUGET} install Microsoft.Windows.CppWinRT -Version ${CPPWINRT_VERSION} -OutputDirectory packages
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
RESULT_VARIABLE ret)
|
||||
if (NOT ret EQUAL 0)
|
||||
message(FATAL_ERROR "Failed to install nuget package Microsoft.Windows.CppWinRT.${CPPWINRT_VERSION}")
|
||||
endif()
|
||||
|
||||
set(CPPWINRT ${CMAKE_BINARY_DIR}/packages/Microsoft.Windows.CppWinRT.${CPPWINRT_VERSION}/bin/cppwinrt.exe)
|
||||
execute_process(COMMAND
|
||||
${CPPWINRT} -input sdk -output include
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
RESULT_VARIABLE ret)
|
||||
if (NOT ret EQUAL 0)
|
||||
message(FATAL_ERROR "Failed to run cppwinrt.exe")
|
||||
endif()
|
||||
|
||||
include_directories(BEFORE SYSTEM ${CMAKE_BINARY_DIR}/include)
|
||||
|
||||
# The build pipelines have limitations that local development environments do not, so turn a few knobs
|
||||
if (${FAST_BUILD})
|
||||
replace_cxx_flag("/GR" "/GR-") # Disables RTTI
|
||||
|
|
Загрузка…
Ссылка в новой задаче