Use actions/cache for vcpkg binary cache and fix Windows integration with Mesa3D (#3422)
This commit is contained in:
@@ -9,7 +9,6 @@ switch ($env:RENDERER)
|
|||||||
'opengl' { $compile_flags += '-DMLN_WITH_OPENGL=ON'; break; }
|
'opengl' { $compile_flags += '-DMLN_WITH_OPENGL=ON'; break; }
|
||||||
'egl' { $compile_flags += '-DMLN_WITH_EGL=ON' ; break; }
|
'egl' { $compile_flags += '-DMLN_WITH_EGL=ON' ; break; }
|
||||||
'vulkan' { $compile_flags += @('-DMLN_WITH_VULKAN=ON', '-DMLN_WITH_OPENGL=OFF'); break; }
|
'vulkan' { $compile_flags += @('-DMLN_WITH_VULKAN=ON', '-DMLN_WITH_OPENGL=OFF'); break; }
|
||||||
'osmesa' { $compile_flags += '-DMLN_WITH_OSMESA=ON'; break; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host 'Compile flags: ' $compile_flags
|
Write-Host 'Compile flags: ' $compile_flags
|
||||||
|
|||||||
6
.github/workflows/node-ci.yml
vendored
6
.github/workflows/node-ci.yml
vendored
@@ -277,10 +277,10 @@ jobs:
|
|||||||
working-directory: platform/node
|
working-directory: platform/node
|
||||||
env:
|
env:
|
||||||
LIBGL_ALWAYS_SOFTWARE: true
|
LIBGL_ALWAYS_SOFTWARE: true
|
||||||
GALLIUM_DRIVER: softpipe
|
GALLIUM_DRIVER: llvmpipe
|
||||||
run: |
|
run: |
|
||||||
Invoke-WebRequest https://github.com/pal1000/mesa-dist-win/releases/download/22.3.5/mesa3d-22.3.5-release-msvc.7z -OutFile mesa3d.7z
|
(Invoke-WebRequest https://api.github.com/repos/pal1000/mesa-dist-win/releases -Headers @{ Authorization = ('Bearer {0}' -f '${{ secrets.GITHUB_TOKEN }}') } | ConvertFrom-Json)[0].assets | Where-Object name -match 'mesa3d-.+-(release|devel)-msvc\.7z' | foreach { Invoke-WebRequest $_.browser_download_url -OutFile mesa3d.7z }
|
||||||
& 'C:\Program Files\7-Zip\7z.exe' e -olib\node-v131 .\mesa3d.7z x64\opengl32.dll x64\libgallium_wgl.dll x64\libGLESv2.dll x64\libglapi.dll
|
& 'C:\Program Files\7-Zip\7z.exe' e -olib\node-v131 .\mesa3d.7z x64\opengl32.dll x64\libgallium_wgl.dll x64\libGLESv2.dll
|
||||||
npm test
|
npm test
|
||||||
|
|
||||||
# On PRs make sure that the npm package can be packaged.
|
# On PRs make sure that the npm package can be packaged.
|
||||||
|
|||||||
98
.github/workflows/windows-ci.yml
vendored
98
.github/workflows/windows-ci.yml
vendored
@@ -64,30 +64,46 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
- uses: ilammy/msvc-dev-cmd@v1
|
- name: Get vcpkg commit id
|
||||||
|
run: |
|
||||||
|
$vcpkg_commit_id = ($(git submodule status .\platform\windows\vendor\vcpkg).Trim() -split ' ')[0]
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value "VCPKG_COMMIT_ID=${vcpkg_commit_id}"
|
||||||
|
|
||||||
- name: Export GitHub Actions cache environment variables
|
- name: Restore vcpkg binary cache
|
||||||
uses: actions/github-script@v7
|
id: vcpkg-cache
|
||||||
|
uses: actions/cache/restore@v4
|
||||||
with:
|
with:
|
||||||
script: |
|
path: ${{ github.workspace }}\platform\windows\vendor\vcpkg\archives
|
||||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
key: vcpkg-${{ env.VCPKG_COMMIT_ID }}
|
||||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
lookup-only: true
|
||||||
|
|
||||||
|
- uses: ilammy/msvc-dev-cmd@v1
|
||||||
|
if: steps.vcpkg-cache.outputs.cache-hit != 'true'
|
||||||
|
|
||||||
- name: Acquire/Build Maplibre Native Core Dependencies
|
- name: Acquire/Build Maplibre Native Core Dependencies
|
||||||
|
if: steps.vcpkg-cache.outputs.cache-hit != 'true'
|
||||||
env:
|
env:
|
||||||
CI: 1,
|
CI: 1,
|
||||||
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
# VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
||||||
timeout-minutes: 120
|
VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}\\platform\\windows\\vendor\\vcpkg\\archives,readwrite"
|
||||||
|
timeout-minutes: 60
|
||||||
run: |
|
run: |
|
||||||
& ${{ github.workspace }}\platform\windows\Get-VendorPackages.ps1 -Triplet ${{ env.VSCMD_ARG_TGT_ARCH }}-windows -Renderer All
|
& ${{ github.workspace }}\platform\windows\Get-VendorPackages.ps1 -Triplet ${{ env.VSCMD_ARG_TGT_ARCH }}-windows -Renderer All
|
||||||
|
|
||||||
|
- name: Save vcpkg binary cache
|
||||||
|
if: steps.vcpkg-cache.outputs.cache-hit != 'true'
|
||||||
|
uses: actions/cache/save@v4
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}\platform\windows\vendor\vcpkg\archives
|
||||||
|
key: vcpkg-${{ env.VCPKG_COMMIT_ID }}
|
||||||
|
|
||||||
|
|
||||||
windows-build-and-test:
|
windows-build-and-test:
|
||||||
# if: needs.pre-job.outputs.should_skip != 'true'
|
# if: needs.pre-job.outputs.should_skip != 'true'
|
||||||
needs: windows-get-or-build-dependencies
|
needs: windows-get-or-build-dependencies
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
renderer: [opengl, egl, vulkan, osmesa]
|
renderer: [opengl, egl, vulkan]
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
steps:
|
steps:
|
||||||
- run: |
|
- run: |
|
||||||
@@ -96,7 +112,6 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3
|
uses: github/codeql-action/init@v3
|
||||||
@@ -105,13 +120,6 @@ jobs:
|
|||||||
|
|
||||||
- uses: ilammy/msvc-dev-cmd@v1
|
- uses: ilammy/msvc-dev-cmd@v1
|
||||||
|
|
||||||
- name: Export GitHub Actions cache environment variables
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
|
||||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
|
||||||
|
|
||||||
- uses: mozilla-actions/sccache-action@v0.0.9
|
- uses: mozilla-actions/sccache-action@v0.0.9
|
||||||
|
|
||||||
- name: Initialize sccache
|
- name: Initialize sccache
|
||||||
@@ -119,16 +127,27 @@ jobs:
|
|||||||
& $env:SCCACHE_PATH --start-server
|
& $env:SCCACHE_PATH --start-server
|
||||||
& $env:SCCACHE_PATH --zero-stats
|
& $env:SCCACHE_PATH --zero-stats
|
||||||
|
|
||||||
|
- name: Get vcpkg commit id
|
||||||
|
run: |
|
||||||
|
$vcpkg_commit_id = ($(git submodule status .\platform\windows\vendor\vcpkg).Trim() -split ' ')[0]
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value "VCPKG_COMMIT_ID=${vcpkg_commit_id}"
|
||||||
|
|
||||||
|
- name: Restore vcpkg binary cache
|
||||||
|
uses: actions/cache/restore@v4
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}\platform\windows\vendor\vcpkg\archives
|
||||||
|
key: vcpkg-${{ env.VCPKG_COMMIT_ID }}
|
||||||
|
|
||||||
- name: Configure MapLibre Native Core
|
- name: Configure MapLibre Native Core
|
||||||
env:
|
env:
|
||||||
CI: 1
|
CI: 1
|
||||||
VCPKG_INSTALL_OPTIONS: "--debug"
|
VCPKG_INSTALL_OPTIONS: "--debug"
|
||||||
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
# VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
||||||
# VCPKG_KEEP_ENV_VARS: "CMAKE_CXX_COMPILER_LAUNCHER;CMAKE_C_COMPILER_LAUNCHER"
|
VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}\\platform\\windows\\vendor\\vcpkg\\archives,readwrite"
|
||||||
CMAKE_C_COMPILER_LAUNCHER: "${{ env.SCCACHE_PATH }}"
|
CMAKE_C_COMPILER_LAUNCHER: "${{ env.SCCACHE_PATH }}"
|
||||||
CMAKE_CXX_COMPILER_LAUNCHER: "${{ env.SCCACHE_PATH }}"
|
CMAKE_CXX_COMPILER_LAUNCHER: "${{ env.SCCACHE_PATH }}"
|
||||||
RENDERER: "${{ matrix.renderer }}"
|
RENDERER: "${{ matrix.renderer }}"
|
||||||
timeout-minutes: 120
|
timeout-minutes: 60
|
||||||
run: |
|
run: |
|
||||||
cmake --version
|
cmake --version
|
||||||
& ${{ github.workspace }}\.github\scripts\windows-ci_configure_wrapper.ps1
|
& ${{ github.workspace }}\.github\scripts\windows-ci_configure_wrapper.ps1
|
||||||
@@ -145,29 +164,28 @@ jobs:
|
|||||||
category: "/language:cpp"
|
category: "/language:cpp"
|
||||||
|
|
||||||
- name: Download Mesa3D
|
- name: Download Mesa3D
|
||||||
if: matrix.renderer != 'egl'
|
|
||||||
run: |
|
run: |
|
||||||
Invoke-WebRequest https://github.com/pal1000/mesa-dist-win/releases/download/24.2.5/mesa3d-24.2.5-release-msvc.7z -OutFile mesa3d.7z
|
(Invoke-WebRequest https://api.github.com/repos/pal1000/mesa-dist-win/releases -Headers @{ Authorization = ('Bearer {0}' -f '${{ secrets.GITHUB_TOKEN }}') } | ConvertFrom-Json)[0].assets | Where-Object name -match 'mesa3d-.+-(release|devel)-msvc\.7z' | foreach { Invoke-WebRequest $_.browser_download_url -OutFile mesa3d.7z }
|
||||||
|
|
||||||
- name: Extract Mesa3D files for OpenGL
|
- name: Extract Mesa3D files for OpenGL
|
||||||
if: matrix.renderer != 'egl' && matrix.renderer != 'vulkan'
|
if: matrix.renderer != 'vulkan'
|
||||||
run: |
|
run: |
|
||||||
& 'C:\Program Files\7-Zip\7z.exe' e -obuild .\mesa3d.7z x64\opengl32.dll x64\libgallium_wgl.dll x64\libGLESv2.dll x64\libglapi.dll
|
& 'C:\Program Files\7-Zip\7z.exe' e -bb3 -obuild .\mesa3d.7z x64\opengl32.dll x64\libgallium_wgl.dll x64\libGLESv2.dll
|
||||||
|
|
||||||
|
- name: Extract Mesa3D files for EGL
|
||||||
|
if: matrix.renderer == 'egl'
|
||||||
|
run: |
|
||||||
|
& 'C:\Program Files\7-Zip\7z.exe' e -bb3 -obuild .\mesa3d.7z x64\d3d10warp.dll
|
||||||
|
|
||||||
- name: Extract Mesa3D files for Vulkan
|
- name: Extract Mesa3D files for Vulkan
|
||||||
if: matrix.renderer != 'egl' && matrix.renderer == 'vulkan'
|
if: matrix.renderer == 'vulkan'
|
||||||
run: |
|
run: |
|
||||||
& 'C:\Program Files\7-Zip\7z.exe' e -obuild .\mesa3d.7z x64\lvp_icd.x86_64.json x64\vulkan_lvp.dll
|
& 'C:\Program Files\7-Zip\7z.exe' e -bb3 -obuild .\mesa3d.7z x64\lvp_icd.x86_64.json x64\vulkan_lvp.dll
|
||||||
|
|
||||||
- name: Extract Mesa3D files for OSMesa
|
|
||||||
if: matrix.renderer == 'osmesa'
|
|
||||||
run: |
|
|
||||||
& 'C:\Program Files\7-Zip\7z.exe' e -obuild .\mesa3d.7z x64\osmesa.dll
|
|
||||||
|
|
||||||
# unit tests
|
# unit tests
|
||||||
|
|
||||||
- name: Configure Mesa3D drivers (OpenGL)
|
- name: Configure Mesa3D drivers (OpenGL)
|
||||||
if: matrix.renderer != 'egl' && matrix.renderer != 'vulkan'
|
if: matrix.renderer != 'vulkan'
|
||||||
run: |
|
run: |
|
||||||
Add-Content -Path $env:GITHUB_ENV -Value 'GALLIUM_DRIVER=llvmpipe'
|
Add-Content -Path $env:GITHUB_ENV -Value 'GALLIUM_DRIVER=llvmpipe'
|
||||||
|
|
||||||
@@ -179,11 +197,16 @@ jobs:
|
|||||||
- name: Download and configure Vulkan
|
- name: Download and configure Vulkan
|
||||||
if: matrix.renderer == 'vulkan'
|
if: matrix.renderer == 'vulkan'
|
||||||
run: |
|
run: |
|
||||||
Invoke-WebRequest https://sdk.lunarg.com/sdk/download/1.3.296.0/windows/VulkanRT-1.3.296.0-Components.zip -OutFile VulkanRT.zip
|
$version = (Invoke-WebRequest -Uri "https://vulkan.lunarg.com/sdk/latest.json" | ConvertFrom-Json).windows
|
||||||
& 'C:\Program Files\7-Zip\7z.exe' e -obuild -r .\VulkanRT.zip *x64\vulkan-1.dll
|
Invoke-WebRequest https://sdk.lunarg.com/sdk/download/$version/windows/VulkanRT-$version-Components.zip -OutFile VulkanRT.zip
|
||||||
|
& 'C:\Program Files\7-Zip\7z.exe' e -bb3 -obuild -r .\VulkanRT.zip *x64\vulkan-1.*
|
||||||
|
|
||||||
- name: Run C++ tests
|
- name: Run C++ tests
|
||||||
continue-on-error: ${{ matrix.renderer == 'vulkan' }}
|
continue-on-error: ${{ matrix.renderer == 'vulkan' }}
|
||||||
|
env:
|
||||||
|
ANGLE_DEFAULT_PLATFORM: 'gl'
|
||||||
|
GALLIUM_DRIVER: llvmpipe
|
||||||
|
LIBGL_ALWAYS_SOFTWARE: true
|
||||||
run: build/mbgl-test-runner.exe
|
run: build/mbgl-test-runner.exe
|
||||||
|
|
||||||
# render tests
|
# render tests
|
||||||
@@ -191,7 +214,10 @@ jobs:
|
|||||||
- name: Run render test
|
- name: Run render test
|
||||||
id: render_test
|
id: render_test
|
||||||
env:
|
env:
|
||||||
manifest_file: ${{ matrix.renderer == 'osmesa' && 'opengl' || matrix.renderer }}
|
manifest_file: ${{ matrix.renderer }}
|
||||||
|
ANGLE_DEFAULT_PLATFORM: 'gl'
|
||||||
|
GALLIUM_DRIVER: llvmpipe
|
||||||
|
LIBGL_ALWAYS_SOFTWARE: true
|
||||||
run: build/mbgl-render-test-runner.exe "--manifestPath=metrics/windows-${env:manifest_file}.json"
|
run: build/mbgl-render-test-runner.exe "--manifestPath=metrics/windows-${env:manifest_file}.json"
|
||||||
|
|
||||||
- name: Upload render test result
|
- name: Upload render test result
|
||||||
@@ -200,7 +226,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: render-test-result-${{ matrix.renderer }}
|
name: render-test-result-${{ matrix.renderer }}
|
||||||
path: |
|
path: |
|
||||||
metrics/windows-${{ matrix.renderer == 'osmesa' && 'opengl' || matrix.renderer }}.html
|
metrics/windows-${{ matrix.renderer }}.html
|
||||||
|
|
||||||
# expression tests
|
# expression tests
|
||||||
|
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -12,7 +12,6 @@
|
|||||||
/cmake-build-debug
|
/cmake-build-debug
|
||||||
/platform/android/build
|
/platform/android/build
|
||||||
/platform/android/MapLibreAndroid/src/main/assets/sdk_versions/com.mapbox.mapboxsdk
|
/platform/android/MapLibreAndroid/src/main/assets/sdk_versions/com.mapbox.mapboxsdk
|
||||||
/platform/windows/vendor/mesa3d/
|
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
|
||||||
local.properties
|
local.properties
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ repos:
|
|||||||
exclude: 'gradlew\.bat$'
|
exclude: 'gradlew\.bat$'
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
# FIXME: these autogenerate files contain trailing whitespace. Need to fix generator.
|
# FIXME: these autogenerate files contain trailing whitespace. Need to fix generator.
|
||||||
exclude: 'platform/android/MapLibreAndroid/src/main/java/org/maplibre/android/(location/LocationIndicatorLayer|style/layers/PropertyFactory)\.java$'
|
exclude: '(platform/android/MapLibreAndroid/src/main/java/org/maplibre/android/(location/LocationIndicatorLayer|style/layers/PropertyFactory)\.java$)|(platform/windows/vendor/.*)'
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/mirrors-clang-format
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||||
rev: v20.1.0
|
rev: v20.1.0
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ option(MLN_WITH_RTTI "Compile with runtime type information" OFF)
|
|||||||
option(MLN_WITH_OPENGL "Build with OpenGL renderer" ON)
|
option(MLN_WITH_OPENGL "Build with OpenGL renderer" ON)
|
||||||
option(MLN_WITH_EGL "Build with EGL renderer" OFF)
|
option(MLN_WITH_EGL "Build with EGL renderer" OFF)
|
||||||
option(MLN_WITH_VULKAN "Build with Vulkan renderer" OFF)
|
option(MLN_WITH_VULKAN "Build with Vulkan renderer" OFF)
|
||||||
option(MLN_WITH_OSMESA "Build with OSMesa (Software) renderer" OFF)
|
|
||||||
option(MLN_WITH_PMTILES "Build with PMTiles support" ON)
|
option(MLN_WITH_PMTILES "Build with PMTiles support" ON)
|
||||||
option(MLN_WITH_WERROR "Make all compilation warnings errors" ON)
|
option(MLN_WITH_WERROR "Make all compilation warnings errors" ON)
|
||||||
option(MLN_USE_UNORDERED_DENSE "Use ankerl dense containers for performance" ON)
|
option(MLN_USE_UNORDERED_DENSE "Use ankerl dense containers for performance" ON)
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
{
|
{
|
||||||
"render-tests/circle-sort-key/literal": "Needs investigation (Diff: 0.034423828125)",
|
"render-tests/line-pattern/overscaled": "Needs investigation (Diff: 0.0089111328125)",
|
||||||
"render-tests/map-mode/tile-avoid-edges": "Needs investigation (Diff: 0.008159637451171875)",
|
"render-tests/regressions/mapbox-gl-js#5642": "Needs investigation (Diff: 0.013671875)",
|
||||||
"render-tests/regressions/mapbox-gl-js#2534": "Needs investigation (Diff: 0.000301361083984375)",
|
"render-tests/regressions/mapbox-gl-js#7066": "Needs investigation (Diff: 0.00024305555555555555)",
|
||||||
"render-tests/regressions/mapbox-gl-js#7066": "Needs investigation (Diff: 0.0002777777777777778)",
|
"render-tests/regressions/mapbox-gl-native#9976": "Needs investigation (Diff: 0.00756072998046875)",
|
||||||
"render-tests/symbol-placement/line-center-buffer-tile-map-mode": "Needs investigation (Diff: 0.0058155059814453125)",
|
"render-tests/runtime-styling/image-add-pattern": "Needs investigation (Diff: 0.001953125)",
|
||||||
"render-tests/symbol-placement/line-center-tile-map-mode": "Needs investigation (Diff: 0.005688667297363281)",
|
"render-tests/runtime-styling/image-update-pattern": "Needs investigation (Diff: 0.001953125)",
|
||||||
"render-tests/text-variable-anchor/all-anchors-tile-map-mode": "Needs investigation (Diff: 0.011456489562988281)",
|
"render-tests/sprites/2x-screen-2x-pattern": "Needs investigation (Diff: 0.00042724609375)"
|
||||||
"render-tests/text-variable-anchor/left-top-right-bottom-offset-tile-map-mode": "Needs investigation (Diff: 0.012059211730957031)",
|
|
||||||
"render-tests/within/layout-text": "Needs investigation (Diff: 0.000244140625)",
|
|
||||||
"render-tests/within/paint-circle": "Needs investigation (Diff: 0.000244140625)",
|
|
||||||
"render-tests/within/paint-icon": "Needs investigation (Diff: 0.000244140625)",
|
|
||||||
"render-tests/within/paint-text": "Needs investigation (Diff: 0.000244140625)"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
#include <mbgl/gl/headless_backend.hpp>
|
|
||||||
#include <mbgl/util/logging.hpp>
|
|
||||||
|
|
||||||
#include <GL/osmesa.h>
|
|
||||||
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
namespace mbgl {
|
|
||||||
namespace gl {
|
|
||||||
|
|
||||||
class OSMesaBackendImpl : public HeadlessBackend::Impl {
|
|
||||||
public:
|
|
||||||
OSMesaBackendImpl() {
|
|
||||||
#if OSMESA_MAJOR_VERSION * 100 + OSMESA_MINOR_VERSION >= 305
|
|
||||||
glContext = OSMesaCreateContextExt(OSMESA_RGBA, 16, 0, 0, nullptr);
|
|
||||||
#else
|
|
||||||
glContext = OSMesaCreateContext(OSMESA_RGBA, nullptr);
|
|
||||||
#endif
|
|
||||||
if (glContext == nullptr) {
|
|
||||||
throw std::runtime_error("Error creating GL context object.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
~OSMesaBackendImpl() final { OSMesaDestroyContext(glContext); }
|
|
||||||
|
|
||||||
gl::ProcAddress getExtensionFunctionPointer(const char* name) final { return OSMesaGetProcAddress(name); }
|
|
||||||
|
|
||||||
void activateContext() final {
|
|
||||||
if (!OSMesaMakeCurrent(glContext, &fakeBuffer, GL_UNSIGNED_BYTE, 1, 1)) {
|
|
||||||
throw std::runtime_error("Switching OpenGL context failed.\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
OSMesaContext glContext = nullptr;
|
|
||||||
GLubyte fakeBuffer = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
void HeadlessBackend::createImpl() {
|
|
||||||
assert(!impl);
|
|
||||||
impl = std::make_unique<OSMesaBackendImpl>();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace gl
|
|
||||||
} // namespace mbgl
|
|
||||||
@@ -1,9 +1,4 @@
|
|||||||
if(WIN32)
|
if(WIN32)
|
||||||
if(MLN_WITH_OSMESA)
|
|
||||||
message(WARNING "mbgl-glfw does not work with -DMLN_WITH_OSMESA=ON. If you want to build this target, don't use this option.")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(glfw3 REQUIRED)
|
find_package(glfw3 REQUIRED)
|
||||||
find_package(libuv REQUIRED)
|
find_package(libuv REQUIRED)
|
||||||
else()
|
else()
|
||||||
|
|||||||
@@ -211,18 +211,6 @@ function(add_node_module NAME)
|
|||||||
)
|
)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
if(MLN_WITH_OSMESA)
|
|
||||||
get_filename_component(_OUTPUT_PATH "${_OUTPUT_PATH}" DIRECTORY "${CMAKE_CURRENT_SOURCE_PATH}")
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${_TARGET}
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/platform/windows/vendor/mesa3d/${_ARCH}/libglapi.dll" "${_OUTPUT_PATH}"
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/platform/windows/vendor/mesa3d/${_ARCH}/libGLESv2.dll" "${_OUTPUT_PATH}"
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/platform/windows/vendor/mesa3d/${_ARCH}/osmesa.dll" "${_OUTPUT_PATH}"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
unset(_ARCH)
|
unset(_ARCH)
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
# Standard FIND_PACKAGE module for OSMesa, sets the following variables:
|
|
||||||
# - OSMesa_FOUND
|
|
||||||
# - OSMesa_INCLUDE_DIRS (only if OSMesa_FOUND)
|
|
||||||
# - OSMesa_LIBRARIES (only if OSMesa_FOUND)
|
|
||||||
|
|
||||||
# Try to find the header
|
|
||||||
find_path(OSMesa_INCLUDE_DIR NAMES GL/osmesa.h)
|
|
||||||
|
|
||||||
get_filename_component(OSMesa_DIR ${OSMesa_INCLUDE_DIR}/../ ABSOLUTE)
|
|
||||||
|
|
||||||
# Try to find the library
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
set(_ARCH x64)
|
|
||||||
else()
|
|
||||||
set(_ARCH x86)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_library(OSMesa_osmesa_LIBRARY NAMES osmesa PATHS ${OSMesa_DIR}/lib PATH_SUFFIXES ${_ARCH} NO_DEFAULT_PATH)
|
|
||||||
find_library(OSMesa_libGLESv2_LIBRARY NAMES libGLESv2 PATHS ${OSMesa_DIR}/lib PATH_SUFFIXES ${_ARCH} NO_DEFAULT_PATH)
|
|
||||||
|
|
||||||
find_file(OSMesa_osmesa_LIBRARY_DLL NAMES osmesa.dll PATHS ${OSMesa_DIR} PATH_SUFFIXES ${_ARCH} NO_DEFAULT_PATH)
|
|
||||||
find_file(OSMesa_libGLESv2_LIBRARY_DLL NAMES libGLESv2.dll PATHS ${OSMesa_DIR} PATH_SUFFIXES ${_ARCH} NO_DEFAULT_PATH)
|
|
||||||
|
|
||||||
unset(_ARCH)
|
|
||||||
|
|
||||||
# Handle the QUIETLY/REQUIRED arguments, set OSMesa_FOUND if all variables are
|
|
||||||
# found
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OSMesa
|
|
||||||
REQUIRED_VARS
|
|
||||||
OSMesa_osmesa_LIBRARY
|
|
||||||
OSMesa_libGLESv2_LIBRARY
|
|
||||||
OSMesa_INCLUDE_DIR)
|
|
||||||
|
|
||||||
# Hide internal variables
|
|
||||||
mark_as_advanced(OSMesa_INCLUDE_DIR OSMesa_osmesa_LIBRARY OSMesa_libGLESv2_LIBRARY)
|
|
||||||
|
|
||||||
# Set standard variables
|
|
||||||
if(OSMesa_FOUND)
|
|
||||||
set(OSMesa_INCLUDE_DIRS "${OSMesa_INCLUDE_DIR}")
|
|
||||||
set(OSMesa_LIBRARIES
|
|
||||||
"${OSMesa_osmesa_LIBRARY}"
|
|
||||||
"${OSMesa_libGLESv2_LIBRARY}"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(OSMesa::osmesa SHARED IMPORTED)
|
|
||||||
|
|
||||||
set_target_properties(
|
|
||||||
OSMesa::osmesa
|
|
||||||
PROPERTIES
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES ${OSMesa_INCLUDE_DIRS}
|
|
||||||
IMPORTED_IMPLIB ${OSMesa_osmesa_LIBRARY}
|
|
||||||
IMPORTED_LOCATION ${OSMesa_osmesa_LIBRARY_DLL}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(OSMesa::libGLESv2 SHARED IMPORTED)
|
|
||||||
|
|
||||||
set_target_properties(
|
|
||||||
OSMesa::libGLESv2
|
|
||||||
PROPERTIES
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES ${OSMesa_INCLUDE_DIRS}
|
|
||||||
IMPORTED_IMPLIB ${OSMesa_libGLESv2_LIBRARY}
|
|
||||||
IMPORTED_LOCATION ${OSMesa_libGLESv2_LIBRARY_DLL}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
@@ -5,6 +5,8 @@ param(
|
|||||||
|
|
||||||
Set-Location (Split-Path $MyInvocation.MyCommand.Path -Parent)
|
Set-Location (Split-Path $MyInvocation.MyCommand.Path -Parent)
|
||||||
|
|
||||||
|
Copy-Item ('{0}\*' -f [System.IO.Path]::Combine($PWD.Path, 'vendor', 'vcpkg-custom-ports')) -Force -Recurse -Destination ('{0}\ports\' -f [System.IO.Path]::Combine($PWD.Path, 'vendor', 'vcpkg'))
|
||||||
|
|
||||||
$vcpkg_temp_dir = '***'
|
$vcpkg_temp_dir = '***'
|
||||||
|
|
||||||
foreach($letter in [byte][char]'Z'..[byte][char]'A')
|
foreach($letter in [byte][char]'Z'..[byte][char]'A')
|
||||||
@@ -22,7 +24,6 @@ foreach($letter in [byte][char]'Z'..[byte][char]'A')
|
|||||||
switch($Renderer)
|
switch($Renderer)
|
||||||
{
|
{
|
||||||
'EGL' { $renderer_packages = @('egl', 'opengl-registry'); break }
|
'EGL' { $renderer_packages = @('egl', 'opengl-registry'); break }
|
||||||
'OSMesa' { $renderer_packages = @(); break }
|
|
||||||
'OpenGL' { $renderer_packages = @('opengl-registry'); break }
|
'OpenGL' { $renderer_packages = @('opengl-registry'); break }
|
||||||
'Vulkan' { $renderer_packages = @(); break }
|
'Vulkan' { $renderer_packages = @(); break }
|
||||||
'All' { $renderer_packages = @('egl', 'opengl-registry'); break }
|
'All' { $renderer_packages = @('egl', 'opengl-registry'); break }
|
||||||
@@ -35,7 +36,6 @@ if(-not (Test-Path ('{0}\vcpkg.exe' -f $vcpkg_temp_dir)))
|
|||||||
|
|
||||||
& ('{0}\vcpkg.exe' -f $vcpkg_temp_dir) $(
|
& ('{0}\vcpkg.exe' -f $vcpkg_temp_dir) $(
|
||||||
@(
|
@(
|
||||||
'--debug',
|
|
||||||
'--disable-metrics',
|
'--disable-metrics',
|
||||||
('--overlay-triplets={0}' -f [System.IO.Path]::Combine($PWD.Path, 'vendor', 'vcpkg-custom-triplets')),
|
('--overlay-triplets={0}' -f [System.IO.Path]::Combine($PWD.Path, 'vendor', 'vcpkg-custom-triplets')),
|
||||||
('--triplet={0}' -f $Triplet),
|
('--triplet={0}' -f $Triplet),
|
||||||
@@ -45,12 +45,3 @@ if(-not (Test-Path ('{0}\vcpkg.exe' -f $vcpkg_temp_dir)))
|
|||||||
)
|
)
|
||||||
|
|
||||||
subst $vcpkg_temp_dir /D
|
subst $vcpkg_temp_dir /D
|
||||||
|
|
||||||
if($Renderer -eq 'OSMesa' -and -not (Test-Path ([System.IO.Path]::Combine($PWD.Path, 'vendor', 'mesa3d'))))
|
|
||||||
{
|
|
||||||
New-Item -Name temp -Type Directory | Out-Null
|
|
||||||
Invoke-WebRequest https://www.7-zip.org/a/7zr.exe -OutFile ([System.IO.Path]::Combine($PWD.Path, 'temp', '7zr.exe'))
|
|
||||||
(Invoke-WebRequest https://api.github.com/repos/pal1000/mesa-dist-win/releases | ConvertFrom-Json)[0].assets | Where-Object name -match 'mesa3d-.+-(release|devel)-msvc\.7z' | foreach { Invoke-WebRequest $_.browser_download_url -OutFile ([System.IO.Path]::Combine($PWD.Path, 'temp', $_.name)) }
|
|
||||||
Get-ChildItem 'temp\*.7z' | foreach { .\temp\7zr.exe x -ovendor\mesa3d $_.FullName }
|
|
||||||
Remove-Item temp -Recurse
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -40,14 +40,6 @@ To configure build with EGL support (ANGLE libraries will be build), use the fol
|
|||||||
cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DMLN_WITH_EGL=ON
|
cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DMLN_WITH_EGL=ON
|
||||||
```
|
```
|
||||||
|
|
||||||
To configure build with OSMesa (software rendering), use the following command:
|
|
||||||
|
|
||||||
```
|
|
||||||
cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DMLN_WITH_OSMESA=ON
|
|
||||||
```
|
|
||||||
|
|
||||||
**WARNING:** as OSMesa doesn't have static libraries, it's necessary to copy `libglapi.dll`, `libGLESv2.dll` and `osmesa.dll` from `platform\windows\vendor\mesa3d\<arch>` to executable/dll directory you want to use, otherwise it won't run.
|
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
Finally, build the project with the following command:
|
Finally, build the project with the following command:
|
||||||
@@ -69,10 +61,6 @@ The same can be done with alternative configure commands:
|
|||||||
```cmd
|
```cmd
|
||||||
cmake . -B build -DMLN_WITH_EGL=ON
|
cmake . -B build -DMLN_WITH_EGL=ON
|
||||||
```
|
```
|
||||||
or
|
|
||||||
```cmd
|
|
||||||
cmake . -B build -DMLN_WITH_OSMESA=ON
|
|
||||||
```
|
|
||||||
|
|
||||||
Once configure is done, open the file `build\Mapbox GL Native.sln`. Build the target `ALL_BUILD` to build all targets, or pick a specific target. Don't forget to pick a build configuration (`Release`, `RelWithDebInfo`, `MinSizeRel` or `Debug`), otherwise the project will be built with default configuration (`Debug`).
|
Once configure is done, open the file `build\Mapbox GL Native.sln`. Build the target `ALL_BUILD` to build all targets, or pick a specific target. Don't forget to pick a build configuration (`Release`, `RelWithDebInfo`, `MinSizeRel` or `Debug`), otherwise the project will be built with default configuration (`Debug`).
|
||||||
|
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
#include <mbgl/util/logging.hpp>
|
|
||||||
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
#include <mbgl/gl/headless_backend.hpp>
|
|
||||||
|
|
||||||
#include <GL/osmesa.h>
|
|
||||||
|
|
||||||
namespace mbgl {
|
|
||||||
namespace gl {
|
|
||||||
|
|
||||||
// This class provides a singleton that contains information about the
|
|
||||||
// configuration used for instantiating new headless rendering contexts.
|
|
||||||
|
|
||||||
class OSMesaBackendImpl final : public HeadlessBackend::Impl {
|
|
||||||
public:
|
|
||||||
OSMesaBackendImpl()
|
|
||||||
: buffer(std::make_unique<uint8_t[]>(2048 * 2048 * 4)),
|
|
||||||
context(OSMesaCreateContextAttribs(std::initializer_list<int>({OSMESA_FORMAT,
|
|
||||||
OSMESA_RGBA,
|
|
||||||
OSMESA_DEPTH_BITS,
|
|
||||||
24,
|
|
||||||
OSMESA_STENCIL_BITS,
|
|
||||||
8,
|
|
||||||
OSMESA_PROFILE,
|
|
||||||
OSMESA_COMPAT_PROFILE,
|
|
||||||
OSMESA_CONTEXT_MAJOR_VERSION,
|
|
||||||
3,
|
|
||||||
OSMESA_CONTEXT_MINOR_VERSION,
|
|
||||||
0,
|
|
||||||
NULL})
|
|
||||||
.begin(),
|
|
||||||
nullptr)) {}
|
|
||||||
|
|
||||||
~OSMesaBackendImpl() final { OSMesaDestroyContext(context); }
|
|
||||||
|
|
||||||
gl::ProcAddress getExtensionFunctionPointer(const char* name) final {
|
|
||||||
return (ProcAddress)::OSMesaGetProcAddress(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void activateContext() final { OSMesaMakeCurrent(context, buffer.get(), GL_UNSIGNED_BYTE, 2048, 2048); }
|
|
||||||
|
|
||||||
void deactivateContext() final { OSMesaMakeCurrent(nullptr, nullptr, GL_UNSIGNED_BYTE, 0, 0); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::unique_ptr<uint8_t[]> buffer;
|
|
||||||
OSMesaContext context;
|
|
||||||
};
|
|
||||||
|
|
||||||
void HeadlessBackend::createImpl() {
|
|
||||||
assert(!impl);
|
|
||||||
impl = std::make_unique<OSMesaBackendImpl>();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace gl
|
|
||||||
} // namespace mbgl
|
|
||||||
13
platform/windows/vendor/vcpkg-custom-ports/angle/004-fix-opengl32.dll-load.patch
vendored
Normal file
13
platform/windows/vendor/vcpkg-custom-ports/angle/004-fix-opengl32.dll-load.patch
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
diff --git a/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp b/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp
|
||||||
|
index b83b8971a6..a2c24cdb31 100644
|
||||||
|
--- a/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp
|
||||||
|
+++ b/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp
|
||||||
|
@@ -128,7 +128,7 @@ egl::Error DisplayWGL::initializeImpl(egl::Display *display)
|
||||||
|
{
|
||||||
|
mDisplayAttributes = display->getAttributeMap();
|
||||||
|
|
||||||
|
- mOpenGLModule = LoadLibraryExA("opengl32.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
|
||||||
|
+ mOpenGLModule = LoadLibraryExA("opengl32.dll", NULL, LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32);
|
||||||
|
if (!mOpenGLModule)
|
||||||
|
{
|
||||||
|
return egl::EglNotInitialized() << "Failed to load OpenGL library.";
|
||||||
194
platform/windows/vendor/vcpkg-custom-ports/angle/portfile.cmake
vendored
Normal file
194
platform/windows/vendor/vcpkg-custom-ports/angle/portfile.cmake
vendored
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
if (VCPKG_TARGET_IS_LINUX)
|
||||||
|
message(WARNING "Building with a gcc version less than 6.1 is not supported.")
|
||||||
|
message(WARNING "${PORT} currently requires the following libraries from the system package manager:\n libx11-dev\n mesa-common-dev\n libxi-dev\n libxext-dev\n\nThese can be installed on Ubuntu systems via apt-get install libx11-dev mesa-common-dev libxi-dev libxext-dev.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
|
||||||
|
set(ANGLE_CPU_BITNESS ANGLE_IS_32_BIT_CPU)
|
||||||
|
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
|
||||||
|
set(ANGLE_CPU_BITNESS ANGLE_IS_64_BIT_CPU)
|
||||||
|
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
|
||||||
|
set(ANGLE_CPU_BITNESS ANGLE_IS_32_BIT_CPU)
|
||||||
|
elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
|
||||||
|
set(ANGLE_CPU_BITNESS ANGLE_IS_64_BIT_CPU)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Unsupported architecture: ${VCPKG_TARGET_ARCHITECTURE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(ANGLE_USE_D3D11_COMPOSITOR_NATIVE_WINDOW "OFF")
|
||||||
|
if (VCPKG_TARGET_IS_WINDOWS OR VCPKG_TARGET_IS_UWP)
|
||||||
|
set(ANGLE_BUILDSYSTEM_PORT "Win")
|
||||||
|
if (NOT VCPKG_TARGET_IS_MINGW)
|
||||||
|
set(ANGLE_USE_D3D11_COMPOSITOR_NATIVE_WINDOW "ON")
|
||||||
|
endif()
|
||||||
|
elseif (VCPKG_TARGET_IS_OSX)
|
||||||
|
set(ANGLE_BUILDSYSTEM_PORT "Mac")
|
||||||
|
elseif (VCPKG_TARGET_IS_LINUX)
|
||||||
|
set(ANGLE_BUILDSYSTEM_PORT "Linux")
|
||||||
|
else()
|
||||||
|
# default other platforms to "Linux" config
|
||||||
|
set(ANGLE_BUILDSYSTEM_PORT "Linux")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# chromium/5414
|
||||||
|
set(ANGLE_COMMIT aa63ea230e0c507e7b4b164a30e502fb17168c17)
|
||||||
|
set(ANGLE_VERSION 5414)
|
||||||
|
set(ANGLE_SHA512 a3b55d4b484e1e9ece515d60af1d47a80a0576b198d9a2397e4e68b16efd83468dcdfadc98dae57ff17f01d02d74526f8b59fdf00661b70a45b6dd266e5ffe38)
|
||||||
|
set(ANGLE_THIRDPARTY_ZLIB_COMMIT 44d9b490c721abdb923d5c6c23ac211e45ffb1a5)
|
||||||
|
|
||||||
|
vcpkg_from_github(
|
||||||
|
OUT_SOURCE_PATH SOURCE_PATH
|
||||||
|
REPO google/angle
|
||||||
|
REF ${ANGLE_COMMIT}
|
||||||
|
SHA512 ${ANGLE_SHA512}
|
||||||
|
# On update check headers against opengl-registry
|
||||||
|
PATCHES
|
||||||
|
001-fix-uwp.patch
|
||||||
|
002-fix-builder-error.patch
|
||||||
|
003-fix-mingw.patch
|
||||||
|
004-fix-opengl32.dll-load.patch
|
||||||
|
)
|
||||||
|
|
||||||
|
# Generate angle_commit.h
|
||||||
|
set(ANGLE_COMMIT_HASH_SIZE 12)
|
||||||
|
string(SUBSTRING "${ANGLE_COMMIT}" 0 ${ANGLE_COMMIT_HASH_SIZE} ANGLE_COMMIT_HASH)
|
||||||
|
set(ANGLE_COMMIT_DATE "invalid-date")
|
||||||
|
set(ANGLE_REVISION "${ANGLE_VERSION}")
|
||||||
|
configure_file("${CMAKE_CURRENT_LIST_DIR}/angle_commit.h.in" "${SOURCE_PATH}/angle_commit.h" @ONLY)
|
||||||
|
configure_file("${CMAKE_CURRENT_LIST_DIR}/angle_commit.h.in" "${SOURCE_PATH}/src/common/angle_commit.h" @ONLY)
|
||||||
|
file(COPY "${CMAKE_CURRENT_LIST_DIR}/unofficial-angle-config.cmake" DESTINATION "${SOURCE_PATH}")
|
||||||
|
|
||||||
|
set(ANGLE_WEBKIT_BUILDSYSTEM_COMMIT "bb1da00b9ba878d228a5e9834a0767dbca2fee43")
|
||||||
|
|
||||||
|
# Download WebKit gni-to-cmake.py conversion script
|
||||||
|
vcpkg_download_distfile(GNI_TO_CMAKE_PY
|
||||||
|
URLS "https://github.com/WebKit/WebKit/raw/${ANGLE_WEBKIT_BUILDSYSTEM_COMMIT}/Source/ThirdParty/ANGLE/gni-to-cmake.py"
|
||||||
|
FILENAME "gni-to-cmake.py"
|
||||||
|
SHA512 9da35caf2db2e849d6cc85721ba0b77eee06b6f65a7c5314fb80483db4949b0b6e9bf4b2d4fc63613665629b24e9b052e03fb1451b09313d881297771a4f2736
|
||||||
|
)
|
||||||
|
|
||||||
|
# Generate CMake files from GN / GNI files
|
||||||
|
vcpkg_find_acquire_program(PYTHON3)
|
||||||
|
|
||||||
|
set(_root_gni_files_to_convert
|
||||||
|
"compiler.gni Compiler.cmake"
|
||||||
|
"libGLESv2.gni GLESv2.cmake"
|
||||||
|
)
|
||||||
|
set(_renderer_gn_files_to_convert
|
||||||
|
"libANGLE/renderer/d3d/BUILD.gn D3D.cmake"
|
||||||
|
"libANGLE/renderer/gl/BUILD.gn GL.cmake"
|
||||||
|
"libANGLE/renderer/metal/BUILD.gn Metal.cmake"
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach(_root_gni_file IN LISTS _root_gni_files_to_convert)
|
||||||
|
separate_arguments(_file_values UNIX_COMMAND "${_root_gni_file}")
|
||||||
|
list(GET _file_values 0 _src_gn_file)
|
||||||
|
list(GET _file_values 1 _dst_file)
|
||||||
|
vcpkg_execute_required_process(
|
||||||
|
COMMAND "${PYTHON3}" "${GNI_TO_CMAKE_PY}" "src/${_src_gn_file}" "${_dst_file}"
|
||||||
|
WORKING_DIRECTORY "${SOURCE_PATH}"
|
||||||
|
LOGNAME "gni-to-cmake-${_dst_file}-${TARGET_TRIPLET}"
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
foreach(_renderer_gn_file IN LISTS _renderer_gn_files_to_convert)
|
||||||
|
separate_arguments(_file_values UNIX_COMMAND "${_renderer_gn_file}")
|
||||||
|
list(GET _file_values 0 _src_gn_file)
|
||||||
|
list(GET _file_values 1 _dst_file)
|
||||||
|
get_filename_component(_src_dir "${_src_gn_file}" DIRECTORY)
|
||||||
|
vcpkg_execute_required_process(
|
||||||
|
COMMAND "${PYTHON3}" "${GNI_TO_CMAKE_PY}" "src/${_src_gn_file}" "${_dst_file}" --prepend "src/${_src_dir}/"
|
||||||
|
WORKING_DIRECTORY "${SOURCE_PATH}"
|
||||||
|
LOGNAME "gni-to-cmake-${_dst_file}-${TARGET_TRIPLET}"
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# Fetch additional CMake files from WebKit ANGLE buildsystem
|
||||||
|
vcpkg_download_distfile(WK_ANGLE_INCLUDE_CMAKELISTS
|
||||||
|
URLS "https://github.com/WebKit/WebKit/raw/${ANGLE_WEBKIT_BUILDSYSTEM_COMMIT}/Source/ThirdParty/ANGLE/include/CMakeLists.txt"
|
||||||
|
FILENAME "include_CMakeLists.txt"
|
||||||
|
SHA512 a7ddf3c6df7565e232f87ec651cc4fd84240b8866609e23e3e6e41d22532fd34c70e0f3b06120fd3d6d930ca29c1d0d470d4c8cb7003a66f8c1a840a42f32949
|
||||||
|
)
|
||||||
|
configure_file("${WK_ANGLE_INCLUDE_CMAKELISTS}" "${SOURCE_PATH}/include/CMakeLists.txt" COPYONLY)
|
||||||
|
|
||||||
|
vcpkg_download_distfile(WK_ANGLE_CMAKE_WEBKITCOMPILERFLAGS
|
||||||
|
URLS "https://github.com/WebKit/WebKit/raw/${ANGLE_WEBKIT_BUILDSYSTEM_COMMIT}/Source/cmake/WebKitCompilerFlags.cmake"
|
||||||
|
FILENAME "WebKitCompilerFlags.cmake"
|
||||||
|
SHA512 63f981694ae37d4c4ca4c34e2bf62b4d4602b6a1a660851304fa7a6ee834fc58fa6730eeb41ef4e075550f3c8b675823d4d00bdcd72ca869c6d5ab11196b33bb
|
||||||
|
)
|
||||||
|
file(COPY "${WK_ANGLE_CMAKE_WEBKITCOMPILERFLAGS}" DESTINATION "${SOURCE_PATH}/cmake")
|
||||||
|
|
||||||
|
vcpkg_download_distfile(WK_ANGLE_CMAKE_DETECTSSE2
|
||||||
|
URLS "https://github.com/WebKit/WebKit/raw/${ANGLE_WEBKIT_BUILDSYSTEM_COMMIT}/Source/cmake/DetectSSE2.cmake"
|
||||||
|
FILENAME "DetectSSE2.cmake"
|
||||||
|
SHA512 219a4c8591ee31d11eb3d1e4803cc3c9d4573984bb25ecac6f2c76e6a3dab598c00b0157d0f94b18016de6786e49d8b29a161693a5ce23d761c8fe6a798c1bca
|
||||||
|
)
|
||||||
|
file(COPY "${WK_ANGLE_CMAKE_DETECTSSE2}" DESTINATION "${SOURCE_PATH}/cmake")
|
||||||
|
|
||||||
|
vcpkg_download_distfile(WK_ANGLE_CMAKE_WEBKITMACROS
|
||||||
|
URLS "https://github.com/WebKit/WebKit/raw/${ANGLE_WEBKIT_BUILDSYSTEM_COMMIT}/Source/cmake/WebKitMacros.cmake"
|
||||||
|
FILENAME "WebKitMacros.cmake"
|
||||||
|
SHA512 0d126b1d1b0ca995c2ea6e51c73326db363f560f3f07912ce58c7c022d9257d27b963dac56aee0e9604ca7a3d74c5aa9f0451c243fec922fb485dd2253685ab6
|
||||||
|
)
|
||||||
|
file(COPY "${WK_ANGLE_CMAKE_WEBKITMACROS}" DESTINATION "${SOURCE_PATH}/cmake")
|
||||||
|
|
||||||
|
# Copy additional custom CMake buildsystem into appropriate folders
|
||||||
|
file(GLOB MAIN_BUILDSYSTEM "${CMAKE_CURRENT_LIST_DIR}/cmake-buildsystem/CMakeLists.txt" "${CMAKE_CURRENT_LIST_DIR}/cmake-buildsystem/*.cmake")
|
||||||
|
file(COPY ${MAIN_BUILDSYSTEM} DESTINATION "${SOURCE_PATH}")
|
||||||
|
file(GLOB MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake-buildsystem/cmake/*.cmake")
|
||||||
|
file(COPY ${MODULES} DESTINATION "${SOURCE_PATH}/cmake")
|
||||||
|
|
||||||
|
function(checkout_in_path PATH URL REF)
|
||||||
|
if(EXISTS "${PATH}")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
vcpkg_from_git(
|
||||||
|
OUT_SOURCE_PATH DEP_SOURCE_PATH
|
||||||
|
URL "${URL}"
|
||||||
|
REF "${REF}"
|
||||||
|
)
|
||||||
|
file(RENAME "${DEP_SOURCE_PATH}" "${PATH}")
|
||||||
|
file(REMOVE_RECURSE "${DEP_SOURCE_PATH}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
checkout_in_path(
|
||||||
|
"${SOURCE_PATH}/third_party/zlib"
|
||||||
|
"https://chromium.googlesource.com/chromium/src/third_party/zlib"
|
||||||
|
"${ANGLE_THIRDPARTY_ZLIB_COMMIT}"
|
||||||
|
)
|
||||||
|
|
||||||
|
vcpkg_cmake_configure(
|
||||||
|
SOURCE_PATH "${SOURCE_PATH}"
|
||||||
|
OPTIONS_DEBUG -DDISABLE_INSTALL_HEADERS=1
|
||||||
|
OPTIONS
|
||||||
|
"-D${ANGLE_CPU_BITNESS}=1"
|
||||||
|
"-DPORT=${ANGLE_BUILDSYSTEM_PORT}"
|
||||||
|
"-DANGLE_USE_D3D11_COMPOSITOR_NATIVE_WINDOW=${ANGLE_USE_D3D11_COMPOSITOR_NATIVE_WINDOW}"
|
||||||
|
"-DVCPKG_TARGET_IS_WINDOWS=${VCPKG_TARGET_IS_WINDOWS}"
|
||||||
|
)
|
||||||
|
|
||||||
|
vcpkg_cmake_install()
|
||||||
|
|
||||||
|
vcpkg_cmake_config_fixup(CONFIG_PATH share/unofficial-angle PACKAGE_NAME unofficial-angle)
|
||||||
|
|
||||||
|
vcpkg_copy_pdbs()
|
||||||
|
|
||||||
|
file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
|
||||||
|
|
||||||
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
|
||||||
|
# Remove empty directories inside include directory
|
||||||
|
file(GLOB directory_children RELATIVE "${CURRENT_PACKAGES_DIR}/include" "${CURRENT_PACKAGES_DIR}/include/*")
|
||||||
|
foreach(directory_child ${directory_children})
|
||||||
|
if(IS_DIRECTORY "${CURRENT_PACKAGES_DIR}/include/${directory_child}")
|
||||||
|
file(GLOB_RECURSE subdirectory_children "${CURRENT_PACKAGES_DIR}/include/${directory_child}/*")
|
||||||
|
if("${subdirectory_children}" STREQUAL "")
|
||||||
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/${directory_child}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
unset(subdirectory_children)
|
||||||
|
unset(directory_child)
|
||||||
|
unset(directory_children)
|
||||||
|
|
||||||
|
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
if(MLN_WITH_EGL)
|
if(MLN_WITH_EGL)
|
||||||
set(_RENDERER EGL)
|
set(_RENDERER EGL)
|
||||||
elseif(MLN_WITH_OSMESA)
|
|
||||||
set(_RENDERER OSMesa)
|
|
||||||
elseif(MLN_WITH_VULKAN)
|
elseif(MLN_WITH_VULKAN)
|
||||||
set(_RENDERER Vulkan)
|
set(_RENDERER Vulkan)
|
||||||
else()
|
else()
|
||||||
@@ -107,29 +105,6 @@ if(MLN_WITH_EGL)
|
|||||||
unofficial::angle::libEGL
|
unofficial::angle::libEGL
|
||||||
unofficial::angle::libGLESv2
|
unofficial::angle::libGLESv2
|
||||||
)
|
)
|
||||||
elseif(MLN_WITH_OSMESA)
|
|
||||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
|
||||||
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR}/vendor/mesa3d)
|
|
||||||
|
|
||||||
find_package(OSMesa REQUIRED)
|
|
||||||
target_sources(
|
|
||||||
mbgl-core
|
|
||||||
PRIVATE
|
|
||||||
${PROJECT_SOURCE_DIR}/platform/windows/src/headless_backend_osmesa.cpp
|
|
||||||
${PROJECT_SOURCE_DIR}/platform/windows/src/gl_functions.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
set_property(
|
|
||||||
SOURCE ${PROJECT_SOURCE_DIR}/platform/windows/src/headless_backend_osmesa.cpp
|
|
||||||
PROPERTY INCLUDE_DIRECTORIES ${OSMesa_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(
|
|
||||||
mbgl-core
|
|
||||||
PRIVATE
|
|
||||||
OSMesa::osmesa
|
|
||||||
OSMesa::libGLESv2
|
|
||||||
)
|
|
||||||
elseif(MLN_WITH_VULKAN)
|
elseif(MLN_WITH_VULKAN)
|
||||||
target_sources(
|
target_sources(
|
||||||
mbgl-core
|
mbgl-core
|
||||||
|
|||||||
Reference in New Issue
Block a user