Versões e componentes necessários do Visual Studio
Você precisa do Visual Studio versão 16.11 ou posterior para usar o Clang/LLVM com o GDK. Selecione o componente C++ Clang Compiler for Windows em Individual Components ao instalar o Visual Studio.
Se você modificar sua instalação existente do Visual Studio para adicionar o C++ Clang Compiler for Windows depois que o GDK for instalado, será necessário reparar a instalação do GDK antes de usar o Clang/LLVM.
Gaming.Xbox.*.x64.
Opções do compilador e do vinculador
Para as plataformasGaming.Xbox.*.x64, a linha de comando do clang/LLVM usada com o clang-cl.exe sempre inclui o seguinte:
Gaming.Xbox.Scarlett.x64, ela também adiciona -march=znver2. Essa opção define o AVX2 e alguns outros recursos específicos da CPU Hercules.
Para Gaming.Xbox.XboxOne.x64, ela também adiciona -march=btver2. Essa opção define o AVX, o F16C e alguns outros recursos específicos da CPU Jaguar.
Para obter mais informações sobre as opções recomendadas para o desenvolvimento com o GDK, consulte Recomendações de opções do compilador e do vinculador do Visual C++.
Intrínsecos de CPU compatíveis
O Clang/LLVM e o GNUC tratam os tipos SIMD SSE de forma diferente do Visual C++ e do Intel Compiler. Especificamente, os tipos __m128, __m128i e __m128d são tipos opacos em vez de structs, portanto, você não pode criar funções sobrecarregadas em C++ que usem esses tipos. Essa diferença também significa que o acesso direto a elementos por meio de __m128.m128_f32[] não é compilado no clang. Para o DirectXMath no Clang/LLVM, essa diferença faz com que todas as sobrecargas C++ deXMVECTOR sejam desabilitadas. Você também pode aceitar esse comportamento no Visual C++ para obter melhor portabilidade definindo o símbolo de pré-processador XM_NO_XMVECTOR_OVERLOADS antes de incluir os cabeçalhos do DirectXMath.
O Visual C++ permite que você use intrínsecos de instruções avançadas mesmo que não esteja fazendo o build com /arch:AVX ou /arch:AVX2, mas o build do clang/LLVM falha nesse cenário sem as opções de compilador adequadas.
Ao usar o Clang/LLVM, você deve adicionar a opção de compilador -march=btver2, -march=znver1, -march=znver2 ou -mf16c para usar os intrínsecos de conversão de meia precisão F16C _mm_cvtph_ps ou _mm_cvtps_ph.
O DirectXMath no Windows 10 SDK (18363) ou anterior usava os intrínsecos CPUID incorretos para implementar XMVerifyCPUSupport para o Clang/LLVM. Esse problema foi corrigido no DirectXMath 3.14 no Windows 10 SDK (19041) ou posterior.
Usar o Clang/LLVM com o msbuild
Para usar o Clang/LLVM com um projeto do msbuild, defina o Platform Toolset como “LLVM (clang-cl)”. Você pode encontrar o Platform Toolset na guia General da caixa de diálogo de propriedades do projeto Visual C++, conforme mostrado na figura a seguir.
-W#pragma-messages como um aviso quanto um aviso -Wunused-value:
Usar o Clang/LLVM com o cmake
Os exemplos do GDK CMakeExample e CMakeGDKExample são um bom ponto de partida para integrar o Clang/LLVM aos seus projetos do cmake. Você pode baixar esses exemplos na página XBOX Developer Downloads.Verifique se o componente C++ CMake tools for Windows do Visual Studio está instalado antes de tentar adicionar suporte ao Clang/LLVM aos seus projetos do cmake. O Visual Studio 2019 (16.11) é fornecido com o CMake 3.20. O Visual Studio 2022 é fornecido com o CMake 3.21 ou posterior.
Usar o CMakeExample
Use as etapas a seguir para habilitar o Clang/LLVM no projeto CMakeExample. O CMakeExample foi atualizado em março de 2022 para usarCMakePresets.json em vez da solução mais antiga CMakeSettings.json. Os CMake Presets são integrados ao Visual Studio 2019 16.10 ou posterior. Consulte esta postagem de blog.
- Use a opção Open Local Folder do Visual Studio para abrir a pasta Desktop, XBOX Series X|S ou XboxOne na pasta raiz do CMakeExample.
Integração com CMakePresets.json
- No Solution Explorer, clique duas vezes no arquivo CMakePresets.json.
XdkEditionTarget para que corresponda à sua edição atual do GDK.
- Selecione a predefinição
x64-Debug-Clangoux64-Release-Clang.
Integração com CMakeSettings.json
- No Solution Explorer, clique duas vezes no arquivo CMakeSettings.json.
- Selecione o ícone PLUS e escolha x64-Clang-Debug e x64-Clang-Release, conforme mostrado na figura a seguir. Salve as alterações.

- Selecione Edit Json e, em seguida, recorte e cole a seção de variáveis de outra configuração nas novas configurações do Clang, como no exemplo a seguir. Defina o valor de
XDKEditionTargetcomo o apropriado para a sua versão do GDK, incluindo o nível de QFE.
- Depois de salvar todas as alterações, selecione x64-Clang-Debug ou x64-Clang-Release na lista suspensa de configuração de build e faça o build.
Usar o CMakeGDKExample
Use as etapas a seguir para habilitar o Clang/LLVM no projeto CMakeGDKExample.- Use a opção Open Local Folder do Visual Studio para abrir a pasta CMakeGDKExample.
Integração com CMakePresets.json
- No Solution Explorer, clique duas vezes no arquivo CMakePresets.json.
XdkEditionTarget para que corresponda à sua edição atual do GDK.
- Selecione a predefinição
x64-Scarlett-Clangoux64-XboxOne-Clang.
Integração com CMakeSettings.json
- No Solution Explorer, clique duas vezes no arquivo CMakeSettings.json.
-
Selecione a configuração que deseja editar. Defina o valor de Toolset como
clang_cl_x64. Salve e feche.

-
Para as configurações de XBOX One e XBOX Series X|S, selecione Edit Json e verifique se a variável
XdkEditionTargetcorresponde à sua edição do GDK e ao nível de QFE. - Selecione o valor desejado na lista suspensa de configuração e escolha Rebuild All no menu Build.
- Use File -> Open -> Project/Solution para selecionar a solução e o projeto gerados. Por exemplo:
Obter suporte
Para relatar bugs do compilador Visual C++, use Report a Problem… in Visual Studio Para relatar bugs do compilador clang/LLVM, use https://bugs.llvm.org/ Para relatar bugs da Microsoft Standard C++ Library (também conhecida como STL), use https://github.com/microsoft/STL/issuesProblemas conhecidos
- O conjunto de ferramentas Clang/LLVM é significativamente mais detalhado que o Visual C++, especialmente quando você usa
-Wall -Wextra -Wpedantic. No mínimo, suprima os seguintes avisos na linha de comando ou como um#pragma:
-
As ferramentas do XBOX funcionam apenas com PDBs da Microsoft para símbolos de depuração e não oferecem suporte às informações de depuração CodeView ou DWARF emitidas pelos arquivos
.lddo LLVM. - A implementação da Geração de Código em Tempo de Vinculação do Clang/LLVM é nitidamente diferente da solução do Microsoft Visual C++. Não é possível misturar código que usa a Geração de Código em Tempo de Vinculação entre o MSVC e o clang/LLVM.
-
A partir da versão de outubro de 2022 e do Windows SDK (10.0.22621), as bibliotecas estáticas C++ incluem metadados do eXtended Flow Control Guard (XFG). O vinculador
ldanterior à versão v15 sempre emite um aviso inofensivo quando você usa essas bibliotecas:
-
A integração do gerenciador de pacotes vcpkg com o MSBuild não funciona corretamente com o
lld-link, pois usa curingas nos nomes de arquivos de biblioteca. Você pode contornar esse problema definindo<UseLldLink>false</UseLldLink>no vcxproj. Esse problema não afeta a integração do vcpkg com o CMake usando geradores de projeto do VS. - Ao fazer o build para XBOX com o clang v18 no modo C++20, dois símbolos ficam indefinidos ao usar os cabeçalhos WRL devido a alterações na avaliação de templates.
