[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:
parent
61b503ada4
commit
0483524870
|
@ -5,7 +5,11 @@
|
||||||
*.so
|
*.so
|
||||||
*.dll
|
*.dll
|
||||||
*.exe
|
*.exe
|
||||||
.vscode
|
.vscode/
|
||||||
|
|
||||||
|
# clangd files
|
||||||
|
compile_commands.json
|
||||||
|
.cache/
|
||||||
|
|
||||||
# vim swap files
|
# vim swap files
|
||||||
*.sw?
|
*.sw?
|
||||||
|
|
33
README.md
33
README.md
|
@ -6,6 +6,8 @@
|
||||||
- [Building](#building)
|
- [Building](#building)
|
||||||
- [Building a Libretro core](#building-a-libretro-core)
|
- [Building a Libretro core](#building-a-libretro-core)
|
||||||
- [Visual Studio Support](#visual-studio-support)
|
- [Visual Studio Support](#visual-studio-support)
|
||||||
|
- [Visual Studio Code Support](#visual-studio-code-support)
|
||||||
|
- [Optional: clangd](#optional-clangd)
|
||||||
- [Dependencies](#dependencies)
|
- [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 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)
|
- [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
|
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
|
## Dependencies
|
||||||
|
|
||||||
If your OS is not supported, you will need the following:
|
If your OS is not supported, you will need the following:
|
||||||
|
|
|
@ -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
|
|
@ -3,7 +3,49 @@ if(POLICY CMP0012)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT DEFINED VCPKG_TARGET_TRIPLET)
|
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()
|
endif()
|
||||||
|
|
||||||
function(vcpkg_seconds)
|
function(vcpkg_seconds)
|
||||||
|
|
|
@ -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}",
|
||||||
|
}
|
Loading…
Reference in New Issue