|
| 1 | +if(TARGET Microsoft.WSL.Containers::SDK) |
| 2 | + return() |
| 3 | +endif() |
| 4 | + |
| 5 | +if(NOT WIN32) |
| 6 | + message(FATAL_ERROR "Microsoft.WSL.Containers: This package only supports Windows.") |
| 7 | +endif() |
| 8 | + |
| 9 | +# Determine target architecture |
| 10 | +if(CMAKE_GENERATOR_PLATFORM) |
| 11 | + string(TOLOWER "${CMAKE_GENERATOR_PLATFORM}" _wslcsdk_platform) |
| 12 | + if(_wslcsdk_platform STREQUAL "x64") |
| 13 | + set(_wslcsdk_arch "x64") |
| 14 | + elseif(_wslcsdk_platform STREQUAL "arm64") |
| 15 | + set(_wslcsdk_arch "arm64") |
| 16 | + else() |
| 17 | + message(FATAL_ERROR |
| 18 | + "Microsoft.WSL.Containers: Unsupported platform '${CMAKE_GENERATOR_PLATFORM}'." |
| 19 | + " Supported: x64, ARM64.") |
| 20 | + endif() |
| 21 | + unset(_wslcsdk_platform) |
| 22 | +elseif(CMAKE_SYSTEM_PROCESSOR) |
| 23 | + string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _wslcsdk_platform) |
| 24 | + if(_wslcsdk_platform MATCHES "amd64|x86_64|x64") |
| 25 | + set(_wslcsdk_arch "x64") |
| 26 | + elseif(_wslcsdk_platform MATCHES "arm64|aarch64") |
| 27 | + set(_wslcsdk_arch "arm64") |
| 28 | + else() |
| 29 | + message(FATAL_ERROR |
| 30 | + "Microsoft.WSL.Containers: Unsupported architecture '${CMAKE_SYSTEM_PROCESSOR}'." |
| 31 | + " Supported: x64, ARM64.") |
| 32 | + endif() |
| 33 | + unset(_wslcsdk_platform) |
| 34 | +else() |
| 35 | + message(FATAL_ERROR |
| 36 | + "Microsoft.WSL.Containers: Could not determine target architecture." |
| 37 | + " Set CMAKE_GENERATOR_PLATFORM or CMAKE_SYSTEM_PROCESSOR.") |
| 38 | +endif() |
| 39 | + |
| 40 | +# Compute paths relative to package root (<root>/cmake/ -> <root>/) |
| 41 | +get_filename_component(_wslcsdk_root "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) |
| 42 | +set(_wslcsdk_include_dir "${_wslcsdk_root}/include") |
| 43 | +set(_wslcsdk_lib_dir "${_wslcsdk_root}/runtimes/win-${_wslcsdk_arch}") |
| 44 | + |
| 45 | +# Create imported target |
| 46 | +add_library(Microsoft.WSL.Containers::SDK SHARED IMPORTED GLOBAL) |
| 47 | +set_target_properties(Microsoft.WSL.Containers::SDK PROPERTIES |
| 48 | + INTERFACE_INCLUDE_DIRECTORIES "${_wslcsdk_include_dir}" |
| 49 | + IMPORTED_IMPLIB "${_wslcsdk_lib_dir}/wslcsdk.lib" |
| 50 | + IMPORTED_LOCATION "${_wslcsdk_lib_dir}/wslcsdk.dll" |
| 51 | +) |
| 52 | + |
| 53 | +# Clean up temporary variables |
| 54 | +unset(_wslcsdk_arch) |
| 55 | +unset(_wslcsdk_root) |
| 56 | +unset(_wslcsdk_include_dir) |
| 57 | +unset(_wslcsdk_lib_dir) |
0 commit comments