[build] Add VS Code integration

* Infer the VCPKG triplet for MSVC-like environments.
* Add recommended VS Code settings.
* Add instructions for using clangd.
This commit is contained in:
Fabrice de Gans 2022-11-03 13:39:22 -06:00 committed by Rafael Kitover
parent 61b503ada4
commit 0483524870
5 changed files with 113 additions and 2 deletions

6
.gitignore vendored
View File

@ -5,7 +5,11 @@
*.so
*.dll
*.exe
.vscode
.vscode/
# clangd files
compile_commands.json
.cache/
# vim swap files
*.sw?

View File

@ -6,6 +6,8 @@
- [Building](#building)
- [Building a Libretro core](#building-a-libretro-core)
- [Visual Studio Support](#visual-studio-support)
- [Visual Studio Code Support](#visual-studio-code-support)
- [Optional: clangd](#optional-clangd)
- [Dependencies](#dependencies)
- [Cross compiling for 32 bit on a 64 bit host](#cross-compiling-for-32-bit-on-a-64-bit-host)
- [Cross Compiling for Win32](#cross-compiling-for-win32)
@ -109,6 +111,37 @@ cmake .. -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_BUILD_TYPE=Debug -G N
ninja
```
## Visual Studio Code Support
On most platforms, Visual Studio Code should work as-is, as long as the
[CMake Tools extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools)
is installed.
There is a recommended configuration in the `vscode/settings.json` file. To use
it, copy the file to a `.vscode/` folder.
By default, this will publish builds in the `build-vscode/` directory. In the
`vscode/settings.json` file, there is an alternate configuration for the
`"cmake.buildDirectory"` option that will use different build directories for
different toolchains and build configurations.
### Optional: clangd
The [clangd extension](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd)
uses clangd to provide powerful code completion, errors and warnings and
references on click in VS Code.
With the recommended configuration, the build configuration will generate a
`compile_commands.json` file that can be used with clangd. After configuration,
you can copy that file to the root directory with a command similar to this one:
```shell
cp build/build-vscode/compile_commands.json .
```
Then, select "clangd: Restart language server" from the command palette to get
completion in the IDE.
## Dependencies
If your OS is not supported, you will need the following:

23
cmake-variants.yaml Normal file
View File

@ -0,0 +1,23 @@
buildType:
default: debug
choices:
debug:
short: Debug
long: Emit debug information
buildType: Debug
release:
short: Release
long: Optimize generated code
buildType: Release
linkage:
default: static
choices:
static:
short: Static
long: Create static libraries
linkage: static
shared:
short: Shared
long: Create shared libraries/DLLs
linkage: shared

View File

@ -3,7 +3,49 @@ if(POLICY CMP0012)
endif()
if(NOT DEFINED VCPKG_TARGET_TRIPLET)
return()
# Check if we are in an MSVC environment.
if($ENV{CXX} MATCHES "cl.exe$")
# Infer the architecture from the LIB folders.
foreach(LIB $ENV{LIB})
if(${LIB} MATCHES "x64$")
set(VBAM_VCPKG_PLATFORM "x64-windows")
break()
endif()
if(${LIB} MATCHES "x86$")
set(VBAM_VCPKG_PLATFORM "x86-windows")
break()
endif()
if(${LIB} MATCHES "ARM64$")
set(VBAM_VCPKG_PLATFORM "arm64-windows")
break()
endif()
endforeach()
# If all else fails, try to use a sensible default.
if(NOT DEFINED VBAM_VCPKG_PLATFORM)
set(VBAM_VCPKG_PLATFORM "x64-windows")
endif()
elseif (NOT DEFINED CMAKE_CXX_COMPILER)
# No way to infer the compiler.
return()
elseif(${CMAKE_CXX_COMPILER} MATCHES "clang-cl.exe$" OR ${CMAKE_CXX_COMPILER} MATCHES "clang-cl$")
# For stand-alone clang-cl, assume x64.
set(VBAM_VCPKG_PLATFORM "x64-windows")
endif()
if (NOT DEFINED VBAM_VCPKG_PLATFORM)
# Probably not an MSVC environment.
return()
endif()
if(DEFINED BUILD_SHARED_LIBS AND NOT ${BUILD_SHARED_LIBS})
set(VBAM_VCPKG_PLATFORM ${VBAM_VCPKG_PLATFORM}-static)
endif()
set(VCPKG_TARGET_TRIPLET ${VBAM_VCPKG_PLATFORM} CACHE STRING "Vcpkg target triplet (ex. x86-windows)" FORCE)
message(STATUS "Inferred VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}")
endif()
function(vcpkg_seconds)

9
vscode/settings.json Normal file
View File

@ -0,0 +1,9 @@
{
"cmake.generator": "Ninja",
"cmake.configureSettings": {
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
},
"cmake.buildDirectory": "${workspaceRoot}/build-vscode",
// To use separate directories for different configurations:
// "cmake.buildDirectory": "${workspaceRoot}/build/${buildKitTriple}-${buildKitVersion}/${variant:buildType}-${variant:linkage}",
}