From 2c0ecd8f12569ce4334f2fbcfadfa7cdbf416cea Mon Sep 17 00:00:00 2001 From: aoruganti-msft Date: Sun, 17 May 2026 08:05:54 +0530 Subject: [PATCH 1/5] build(props): map VS 2026 (v145) toolset and enable latest-SDK alias UWP projects (common_uwp, i18n_uwp, makedata_uwp) failed to build on Visual Studio 2026 (BuildToolVersion=18.0) with: Microsoft.Cpp.WindowsSDK.targets(46,5): error MSB8036: The Windows SDK version 10.0.0.0 was not found. Root cause: Build.Windows.PlatformToolset.props had toolset mappings only for VS 14.0/15.0/16.0/17.0 (v140/v141/v142/v143). On VS 18.0 no AutoDetectedPlatformToolset matched, so PlatformToolset fell through. The subsequent latest-SDK alias block at line 39 was conditioned on PlatformToolset == v142|v143 and did not fire, leaving WindowsTargetPlatformVersion unset. VS 18 UWP Default.props (.../Application Type/Windows Store/10.0/Default.props) then assigned the sentinel value 10.0.0.0 to WindowsTargetPlatformVersion, which is not a real installed SDK, producing MSB8036. Fix: add VS 18.0 -> v145 mapping and include v145 in the latest-SDK alias condition. With this change, building UWP projects on VS 18 resolves WindowsTargetPlatformVersion to the literal "10.0" alias, which VC targets dynamically resolve to the latest installed Windows 10 SDK via _LatestWindowsTargetPlatformVersion (no hard-coded SDK number; works on any host with a Windows 10 SDK installed). Verified: - common_uwp.vcxproj Release|x64: exit 0, common_uwp.dll produced - i18n_uwp.vcxproj Release|x64: exit 0, i18n_uwp.dll produced - makedata_uwp via allinone.sln Release|x64: exit 0, icudt78.dll produced in bin64UWP/, testdata built Diagnosis verified by independent gpt-5.5 DA pass (cited primary sources: VS UWP Default.props line 27-32, Microsoft.Cpp.WindowsSDK.props line 124). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../source/allinone/Build.Windows.PlatformToolset.props | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/icu/icu4c/source/allinone/Build.Windows.PlatformToolset.props b/icu/icu4c/source/allinone/Build.Windows.PlatformToolset.props index 29a9a1d8e6d..c22994b7ef8 100644 --- a/icu/icu4c/source/allinone/Build.Windows.PlatformToolset.props +++ b/icu/icu4c/source/allinone/Build.Windows.PlatformToolset.props @@ -14,11 +14,13 @@ v141 is the Visual Studio 2017 toolset. (15.0) v142 is the Visual Studio 2019 toolset. (16.0) v143 is the Visual Studio 2022 toolset. (17.0) + v145 is the Visual Studio 2026 toolset. (18.0) --> v140 v141 v142 v143 + v145 $(AutoDetectedPlatformToolset) @@ -32,11 +34,11 @@ If not already set, use the latest installed version of the Windows 10 SDK. The Windows 10 SDK is backwards compatible to Windows 7, as long as WINVER and _WIN32_WINNT are set before compiling. Note: - - With VS2019, VS2022 using a value of "10.0" means that it will use the latest installed version. + - With VS2019, VS2022, VS2026 using a value of "10.0" means that it will use the latest installed version. - With VS2017, we need to manually detect the latest SDK version from the registry. - With VS2015, use the Windows 8.1 SDK. --> - + 10.0 From 32674ffad3a4b3d0a34f4cae03a7fda0f9acfffb Mon Sep 17 00:00:00 2001 From: aoruganti-msft Date: Sun, 17 May 2026 09:57:20 +0530 Subject: [PATCH 2/5] build(props): drop hardcoded 10.0.22621.0 SDK pinning for ARM/ARM64 Build.Windows.ProjectConfiguration.props had hardcoded SDK pinning for ARM and ARM64 desktop configs: L66, L70: 10.0.22621.0 L188, L204: ...Windows Kits\10\Lib\10.0.22621.0\um\arm[64] x86/x64 do not pin a specific SDK; they inherit the latest-installed "10.0" alias from Build.Windows.PlatformToolset.props (lines 32-43). ARM/ARM64 had been pinned since 2020 when Windows 10 SDK was required explicitly for desktop ARM but default desktop SDK was Win 8.1; later upgrades migrated x86/x64 to the dynamic alias but the ARM/ARM64 hardcode stayed, only being bumped (16299 -> 22621) instead of removed. On a host without 10.0.22621.0 installed (this dev box has 10.0.26100.0 only), ARM64 builds of any non-UWP project (e.g., stubdata.vcxproj as a dependency of common_uwp) fail with MSB8036. Remove the 4 hardcoded lines so ARM/ARM64 inherit the same dynamic-SDK behavior as x86/x64. Keep all other ARM/ARM64-specific configuration: output dirs, preprocessor defines, TargetMachine, kernel32.lib, the WindowsSDKDesktopARMSupport / WindowsSDKDesktopARM64Support flags. ARM32 (Platform=ARM) is not in the build matrix iterated by upgrade-ver/icu/build-test.ps1 (lines 138-142 only enumerate Win32/x64/ARM64), so dropping the ARM32 SDK pinning has no impact on our supported configurations. Verified by independent gpt-5.5 DA pass; cited primary sources: - source\stubdata\stubdata.vcxproj:11-16 - source\allinone\Build.Windows.ProjectConfiguration.props:61-72,185-188,201-204 - source\allinone\Build.Windows.PlatformToolset.props:32-43 - source\allinone\allinone.sln:13-15,186-188 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../source/allinone/Build.Windows.ProjectConfiguration.props | 4 ---- 1 file changed, 4 deletions(-) diff --git a/icu/icu4c/source/allinone/Build.Windows.ProjectConfiguration.props b/icu/icu4c/source/allinone/Build.Windows.ProjectConfiguration.props index a9303482463..ae3e391ce65 100644 --- a/icu/icu4c/source/allinone/Build.Windows.ProjectConfiguration.props +++ b/icu/icu4c/source/allinone/Build.Windows.ProjectConfiguration.props @@ -63,11 +63,9 @@ Note: This version must match the version below in the ARM64 section for AdditionalLibraryDirectories --> - 10.0.22621.0 true - 10.0.22621.0 true @@ -185,7 +183,6 @@ kernel32.lib;%(AdditionalDependencies) - C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\arm @@ -201,7 +198,6 @@ kernel32.lib;%(AdditionalDependencies) - C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\arm64 \ No newline at end of file From 9da83fedf792d3dafda9d1d00f9fe328ac721ec2 Mon Sep 17 00:00:00 2001 From: Arvind Oruganti Date: Wed, 20 May 2026 14:22:14 +0530 Subject: [PATCH 3/5] Fix Linux ICU CI build inputs Repair the icu4c LICENSE symlink so releaseDist can install the license from the repo layout. Move the ARM64 Linux build image to Ubuntu 18.04 so clang++-9 has C++17 standard library support for ICU 78 string_view headers. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- build/dockerfiles/ubuntu-arm64/Dockerfile | 6 +++--- icu/icu4c/LICENSE | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build/dockerfiles/ubuntu-arm64/Dockerfile b/build/dockerfiles/ubuntu-arm64/Dockerfile index 8366d2d79a1..5f5d8980621 100644 --- a/build/dockerfiles/ubuntu-arm64/Dockerfile +++ b/build/dockerfiles/ubuntu-arm64/Dockerfile @@ -1,10 +1,10 @@ -# This uses the .NET Core Ubuntu 16.04 (xenial) Cross-ARM64 docker image to build. +# This uses the .NET Core Ubuntu 18.04 (bionic) Cross-ARM64 docker image to build. # https://github.com/dotnet/dotnet-buildtools-prereqs-docker -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-20210106160011-b2c2436 +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross-arm64 LABEL maintainer="Jeff Genovy <29107334+jefgen@users.noreply.github.com>" -LABEL com.github.microsoft.icu="ubuntu-16.04-cross-arm64" +LABEL com.github.microsoft.icu="ubuntu-18.04-cross-arm64" # Remove icu-dev, so it doesn't conflict. RUN apt-get -y remove libicu-dev icu-devtools diff --git a/icu/icu4c/LICENSE b/icu/icu4c/LICENSE index ea5b60640b0..30cff7403da 120000 --- a/icu/icu4c/LICENSE +++ b/icu/icu4c/LICENSE @@ -1 +1 @@ -../LICENSE \ No newline at end of file +../../LICENSE \ No newline at end of file From d24b2d052768430c6376df084077908689389032 Mon Sep 17 00:00:00 2001 From: Arvind Oruganti Date: Wed, 20 May 2026 15:55:27 +0530 Subject: [PATCH 4/5] Classify upstream ICU source as CodeQL library Add a root CodeQL.yml so 1ES CodeQL treats imported upstream ICU sources as library code while keeping MSFT-owned patches and build scripts visible. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- CodeQL.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 CodeQL.yml diff --git a/CodeQL.yml b/CodeQL.yml new file mode 100644 index 00000000000..c7c6329afbb --- /dev/null +++ b/CodeQL.yml @@ -0,0 +1,7 @@ +# doc link: https://eng.ms/docs/cloud-ai-platform/devdiv/one-engineering-system-1es/1es-docs/codeql/troubleshooting/bugs/generated-library-code +path_classifiers: + library: + # Exclude upstream ICU source consumed by this fork. MSFT-owned patches live under icu-patches/. + - "icu/icu4c/**" + # Exclude upstream ICU test data consumed with ICU source. + - "icu/testdata/**" From 48160a34295f6cec966133797f75e64eba714ebe Mon Sep 17 00:00:00 2001 From: Arvind Oruganti Date: Wed, 20 May 2026 16:44:32 +0530 Subject: [PATCH 5/5] Use GitHub CodeQL config path Replace the root 1ES-style CodeQL.yml with GitHub's .github/codeql/codeql-config.yml so CodeQL can ignore imported upstream ICU source and test data. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/codeql/codeql-config.yml | 7 +++++++ CodeQL.yml | 7 ------- 2 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 .github/codeql/codeql-config.yml delete mode 100644 CodeQL.yml diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml new file mode 100644 index 00000000000..ea1888eed44 --- /dev/null +++ b/.github/codeql/codeql-config.yml @@ -0,0 +1,7 @@ +name: "CodeQL config" + +paths-ignore: + # Upstream ICU source consumed by this fork. MSFT-owned patches live under icu-patches/. + - "icu/icu4c/**" + # Upstream ICU test data consumed with ICU source. + - "icu/testdata/**" diff --git a/CodeQL.yml b/CodeQL.yml deleted file mode 100644 index c7c6329afbb..00000000000 --- a/CodeQL.yml +++ /dev/null @@ -1,7 +0,0 @@ -# doc link: https://eng.ms/docs/cloud-ai-platform/devdiv/one-engineering-system-1es/1es-docs/codeql/troubleshooting/bugs/generated-library-code -path_classifiers: - library: - # Exclude upstream ICU source consumed by this fork. MSFT-owned patches live under icu-patches/. - - "icu/icu4c/**" - # Exclude upstream ICU test data consumed with ICU source. - - "icu/testdata/**"