aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--docs/maintainers/control-files.md2
-rw-r--r--docs/users/triplets.md3
-rw-r--r--toolsrc/src/vcpkg/logicexpression.cpp6
-rw-r--r--triplets/community/wasm32-emscripten.cmake15
5 files changed, 26 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 4f8ebfec6..65b0ddb81 100644
--- a/.gitignore
+++ b/.gitignore
@@ -313,6 +313,7 @@ __pycache__/
!triplets/community/arm-ios.cmake
!triplets/community/x64-ios.cmake
!triplets/community/x86-ios.cmake
+!triplets/community/wasm32-emscripten.cmake
!triplets/arm-uwp.cmake
!triplets/x64-uwp.cmake
!triplets/x64-windows.cmake
diff --git a/docs/maintainers/control-files.md b/docs/maintainers/control-files.md
index 87468e6af..ea44c2b8a 100644
--- a/docs/maintainers/control-files.md
+++ b/docs/maintainers/control-files.md
@@ -138,6 +138,8 @@ The predefined expressions are computed from standard triplet settings:
- `osx` - `VCPKG_CMAKE_SYSTEM_NAME` == `"Darwin"`
- `android` - `VCPKG_CMAKE_SYSTEM_NAME` == `"Android"`
- `static` - `VCPKG_LIBRARY_LINKAGE` == `"static"`
+- `wasm32` - `VCPKG_TARGET_ARCHITECTURE` == `"wasm32"`
+- `emscripten` - `VCPKG_CMAKE_SYSTEM_NAME` == `"Emscripten"`
These predefined expressions can be overridden in the triplet file via the [`VCPKG_DEP_INFO_OVERRIDE_VARS`](../users/triplets.md) option.
diff --git a/docs/users/triplets.md b/docs/users/triplets.md
index aafae0920..9aa500d76 100644
--- a/docs/users/triplets.md
+++ b/docs/users/triplets.md
@@ -29,7 +29,7 @@ Community Triplets are enabled by default, when using a community triplet a mess
### VCPKG_TARGET_ARCHITECTURE
Specifies the target machine architecture.
-Valid options are `x86`, `x64`, `arm`, and `arm64`.
+Valid options are `x86`, `x64`, `arm`, `arm64` and `wasm32`.
### VCPKG_CRT_LINKAGE
Specifies the desired CRT linkage (for MSVC).
@@ -49,6 +49,7 @@ Valid options include any CMake system name, such as:
- `WindowsStore` (Universal Windows Platform)
- `Darwin` (Mac OSX)
- `Linux` (Linux)
+- `Emscripten` (WebAssembly)
### VCPKG_CMAKE_SYSTEM_VERSION
Specifies the target platform system version.
diff --git a/toolsrc/src/vcpkg/logicexpression.cpp b/toolsrc/src/vcpkg/logicexpression.cpp
index 06d949e06..5f3a25e8e 100644
--- a/toolsrc/src/vcpkg/logicexpression.cpp
+++ b/toolsrc/src/vcpkg/logicexpression.cpp
@@ -25,6 +25,8 @@ namespace vcpkg
osx,
uwp,
android,
+ emscripten,
+ wasm32,
static_link,
};
@@ -113,6 +115,8 @@ namespace vcpkg
{"osx", Identifier::osx},
{"uwp", Identifier::uwp},
{"android", Identifier::android},
+ {"emscripten", Identifier::emscripten},
+ {"wasm32", Identifier::wasm32},
{"static", Identifier::static_link},
};
@@ -165,6 +169,8 @@ namespace vcpkg
case Identifier::osx: return true_if_exists_and_equal("VCPKG_CMAKE_SYSTEM_NAME", "Darwin");
case Identifier::uwp: return true_if_exists_and_equal("VCPKG_CMAKE_SYSTEM_NAME", "WindowsStore");
case Identifier::android: return true_if_exists_and_equal("VCPKG_CMAKE_SYSTEM_NAME", "Android");
+ case Identifier::emscripten: return true_if_exists_and_equal("VCPKG_CMAKE_SYSTEM_NAME", "Emscripten");
+ case Identifier::wasm32: return true_if_exists_and_equal("VCPKG_TARGET_ARCHITECTURE", "wasm32");
case Identifier::static_link: return true_if_exists_and_equal("VCPKG_LIBRARY_LINKAGE", "static");
}
diff --git a/triplets/community/wasm32-emscripten.cmake b/triplets/community/wasm32-emscripten.cmake
new file mode 100644
index 000000000..2394e1227
--- /dev/null
+++ b/triplets/community/wasm32-emscripten.cmake
@@ -0,0 +1,15 @@
+set(VCPKG_ENV_PASSTHROUGH EMSDK PATH)
+
+if(NOT DEFINED ENV{EMSDK})
+ message(FATAL_ERROR "The EMSDK environment variable must be defined")
+endif()
+
+if(NOT EXISTS $ENV{EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake)
+ message(FATAL_ERROR "Emscripten.cmake toolchain file not found")
+endif()
+
+set(VCPKG_TARGET_ARCHITECTURE wasm32)
+set(VCPKG_CRT_LINKAGE dynamic)
+set(VCPKG_LIBRARY_LINKAGE static)
+set(VCPKG_CMAKE_SYSTEM_NAME Emscripten)
+set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE $ENV{EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake)