408752ec49
This enables "classic" desktop builds of ICU4C for both ARM (32-bit) and ARM64 (64-bit) on Windows. All but the two samples "cal" and "date" in the "allinone" project now have ARM and ARM64 project configurations, and build for Windows Desktop ARM/ARM64. Note: In order to build the ARM/ARM64 data DLL, you need to first build x64/Release, as the ARM/ARM build uses the x64 bits in order to be able to cross-compile for ARM/ARM64. This allows for completely building ARM/ARM64 binaries using only x64 hardware. The ARM/ARM64 builds require using a newer version of the Windows SDK than 8.1, so they have a separate WindowsTargetPlatformVersion which uses Windows 10 SDK version 10.0.16299.0 (aka RS3), which is the first version of the Windows SDK to support building ARM64 desktop applications. In addition this also greatly cleans-up the ICU4C ".vcxproj" files, in order to remove redundant parts, fix inconsistencies, and make them more readable. This introduces two new variables in the shared `*.props` files: `IcuBinOutputDir` and `IcuLibOutputDir` in order to further reduce the amount of duplicated lines in the individual ".vcxproj" files themselves.
206 lines
9.2 KiB
XML
206 lines
9.2 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html -->
|
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
<!-- This file is used to set default configuration options for all non-UWP Visual Studio projects. -->
|
|
<!-- These are the default project configurations for building. -->
|
|
<ItemGroup Label="ProjectConfigurations">
|
|
<ProjectConfiguration Include="Debug|Win32">
|
|
<Configuration>Debug</Configuration>
|
|
<Platform>Win32</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Debug|x64">
|
|
<Configuration>Debug</Configuration>
|
|
<Platform>x64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Debug|ARM">
|
|
<Configuration>Debug</Configuration>
|
|
<Platform>ARM</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Debug|ARM64">
|
|
<Configuration>Debug</Configuration>
|
|
<Platform>ARM64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Release|Win32">
|
|
<Configuration>Release</Configuration>
|
|
<Platform>Win32</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Release|x64">
|
|
<Configuration>Release</Configuration>
|
|
<Platform>x64</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Release|ARM">
|
|
<Configuration>Release</Configuration>
|
|
<Platform>ARM</Platform>
|
|
</ProjectConfiguration>
|
|
<ProjectConfiguration Include="Release|ARM64">
|
|
<Configuration>Release</Configuration>
|
|
<Platform>ARM64</Platform>
|
|
</ProjectConfiguration>
|
|
</ItemGroup>
|
|
<!-- The following import will set the PlatformToolset configuration. -->
|
|
<Import Project="Build.Windows.PlatformToolset.props" />
|
|
<!-- The following PropertyGroups are used to set the binary and lib output locations -->
|
|
<PropertyGroup Condition="'$(Platform)'=='Win32'">
|
|
<IcuBinOutputDir>bin</IcuBinOutputDir>
|
|
<IcuLibOutputDir>lib</IcuLibOutputDir>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition="'$(Platform)'=='x64'">
|
|
<IcuBinOutputDir>bin64</IcuBinOutputDir>
|
|
<IcuLibOutputDir>lib64</IcuLibOutputDir>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition="'$(Platform)'=='ARM'">
|
|
<IcuBinOutputDir>binARM</IcuBinOutputDir>
|
|
<IcuLibOutputDir>libARM</IcuLibOutputDir>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
|
|
<IcuBinOutputDir>binARM64</IcuBinOutputDir>
|
|
<IcuLibOutputDir>libARM64</IcuLibOutputDir>
|
|
</PropertyGroup>
|
|
<!-- This is the default SDK target. -->
|
|
<PropertyGroup>
|
|
<!-- Note that the Windows 8.1 SDK is backwards compatible down-level to Windows 7, so
|
|
setting this to 8.1 does not actually imply targeting Windows 8.1. -->
|
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
|
</PropertyGroup>
|
|
<!-- Desktop ARM/ARM64 support requires a newer version of the Windows SDK than 8.1 -->
|
|
<!--
|
|
Note: This version must match the version below in the ARM64 section for AdditionalLibraryDirectories
|
|
-->
|
|
<PropertyGroup Condition="'$(Platform)'=='ARM'">
|
|
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
|
|
<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
|
|
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
|
|
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
|
|
</PropertyGroup>
|
|
<PropertyGroup>
|
|
<!-- We need to explicitly set the target version to Windows 7. -->
|
|
<Win32_WinNTVersion>0x0601</Win32_WinNTVersion>
|
|
</PropertyGroup>
|
|
<!-- Options that are common to *all* configurations for *all* projects. -->
|
|
<ItemDefinitionGroup>
|
|
<Midl>
|
|
<MkTypLibCompatible>true</MkTypLibCompatible>
|
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
</Midl>
|
|
<ClCompile>
|
|
<!-- Note: These preprocessor defines are for *all* configurations for *all* projects. -->
|
|
<!-- Note: See ticket #5750 for the macro '_CRT_SECURE_NO_DEPRECATE'. -->
|
|
<PreprocessorDefinitions>
|
|
WINVER=$(Win32_WinNTVersion);
|
|
_WIN32_WINNT=$(Win32_WinNTVersion);
|
|
_CRT_SECURE_NO_DEPRECATE;
|
|
%(PreprocessorDefinitions)
|
|
</PreprocessorDefinitions>
|
|
<!-- We always want to treat wchar_t as a "real" C++ type, instead of a typedef. -->
|
|
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
<!-- Set the source encoding and runtime encoding to UTF-8 by default. -->
|
|
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
|
<!-- Enable parallel compilation for faster builds. -->
|
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
|
</ClCompile>
|
|
<ResourceCompile>
|
|
<Culture>0x0409</Culture>
|
|
</ResourceCompile>
|
|
<Link>
|
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
<RandomizedBaseAddress>true</RandomizedBaseAddress>
|
|
</Link>
|
|
</ItemDefinitionGroup>
|
|
<!-- Options that are common to all 'Release' configurations for *all* projects. -->
|
|
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
|
|
<Midl>
|
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
</Midl>
|
|
<ClCompile>
|
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
<StringPooling>true</StringPooling>
|
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
|
</ClCompile>
|
|
<ResourceCompile>
|
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
</ResourceCompile>
|
|
<Link>
|
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
|
|
</Link>
|
|
</ItemDefinitionGroup>
|
|
<!-- Options that are common to all 'Debug' configurations for *all* projects. -->
|
|
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
|
|
<Midl>
|
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
</Midl>
|
|
<ClCompile>
|
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
<Optimization>Disabled</Optimization>
|
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
<BufferSecurityCheck>true</BufferSecurityCheck>
|
|
</ClCompile>
|
|
<ResourceCompile>
|
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
</ResourceCompile>
|
|
<Link>
|
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
|
</Link>
|
|
</ItemDefinitionGroup>
|
|
<!-- Options that are common to all 32-bit configurations for *all* projects. -->
|
|
<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
|
|
<Midl>
|
|
<TargetEnvironment>Win32</TargetEnvironment>
|
|
</Midl>
|
|
<ClCompile>
|
|
<PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
</ClCompile>
|
|
<Link>
|
|
<TargetMachine>MachineX86</TargetMachine>
|
|
</Link>
|
|
</ItemDefinitionGroup>
|
|
<!-- Options that are common to all 64-bit configurations for *all* projects. -->
|
|
<ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
|
|
<Midl>
|
|
<TargetEnvironment>X64</TargetEnvironment>
|
|
</Midl>
|
|
<ClCompile>
|
|
<PreprocessorDefinitions>WIN64;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
</ClCompile>
|
|
<Link>
|
|
<TargetMachine>MachineX64</TargetMachine>
|
|
</Link>
|
|
</ItemDefinitionGroup>
|
|
<!-- Options that are common to all ARM 32-bit configurations for *all* projects. -->
|
|
<ItemDefinitionGroup Condition="'$(Platform)'=='ARM'">
|
|
<Midl>
|
|
<TargetEnvironment>ARM</TargetEnvironment>
|
|
</Midl>
|
|
<ClCompile>
|
|
<PreprocessorDefinitions>ARM;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
</ClCompile>
|
|
<Link>
|
|
<TargetMachine>MachineARM</TargetMachine>
|
|
<!-- The ARM64 Desktop SDK doesn't include this by default -->
|
|
<AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
<!-- Note: This needs to match the same version as WindowsTargetPlatformVersion for ARM -->
|
|
<AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\arm</AdditionalLibraryDirectories>
|
|
</Link>
|
|
</ItemDefinitionGroup>
|
|
<!-- Options that are common to all ARM 64-bit configurations for *all* projects. -->
|
|
<ItemDefinitionGroup Condition="'$(Platform)'=='ARM64'">
|
|
<Midl>
|
|
<TargetEnvironment>ARM64</TargetEnvironment>
|
|
</Midl>
|
|
<ClCompile>
|
|
<PreprocessorDefinitions>ARM64;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
</ClCompile>
|
|
<Link>
|
|
<TargetMachine>MachineARM64</TargetMachine>
|
|
<!-- The ARM64 Desktop SDK doesn't include this by default -->
|
|
<AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
<!-- Note: This needs to match the same version as WindowsTargetPlatformVersion for ARM64 -->
|
|
<AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\arm64</AdditionalLibraryDirectories>
|
|
</Link>
|
|
</ItemDefinitionGroup>
|
|
</Project> |