Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions ports/mesa/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Source: mesa
Version: 20.2.2
Homepage: https://www.mesa3d.org/
Description: Mesa - The 3D Graphics Library
Build-Depends: zlib, zstd, tool-meson
Default-Features: default-features
Supports: !(windows&arm)

Feature: default-features
Description: Platform dependent default features
Build-Depends: mesa[core,llvm](x64), mesa[core,opengl], mesa[core,gles1], mesa[core,gles2]

Feature: llvm
Description: Build with llvmpipe
Build-Depends: llvm[core]

Feature: gles1
Description: Build support for OpenGL ES 1.x
Build-Depends: mesa[core]

Feature: gles2
Description: Build support for OpenGL ES 2.x and 3.x
Build-Depends: mesa[core]

Feature: opengl
Description: Build support for OpenGL (all versions)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Description: Build support for OpenGL (all versions)
Description: Build support for OpenGL (all non-ES versions)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description is from meson_options.txt stating:

option(
  'opengl',
  type : 'boolean',
  value : true,
  description : 'Build support for OpenGL (all versions)'
)

I think features in vcpkg should copy upstream descriptions 1:1 even if it seems to be a wrong.

Build-Depends: mesa[core]

Feature: egl
Description: Build support for EGL platform
Build-Depends: mesa[core]
13 changes: 13 additions & 0 deletions ports/mesa/dual-osmesa-part2.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/src/gallium/meson.build b/src/gallium/meson.build
index 1f81fcf1fd5..5a5a8d2f0a6 100644
--- a/src/gallium/meson.build
+++ b/src/gallium/meson.build
@@ -175,7 +175,7 @@ if with_dri
subdir('frontends/dri')
subdir('targets/dri')
endif
-if with_osmesa == 'gallium'
+if with_osmesa.contains('gallium')
subdir('frontends/osmesa')
subdir('targets/osmesa')
endif
80 changes: 80 additions & 0 deletions ports/mesa/dual-osmesa.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
diff --git a/include/meson.build b/include/meson.build
index a64d9373a92..22c50eb5eb7 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -89,7 +89,7 @@ if with_egl
)
endif

-if with_osmesa != 'none'
+if with_osmesa != []
install_headers('GL/osmesa.h', subdir : 'GL')
endif

diff --git a/meson.build b/meson.build
index 898d025f066..d73818e7ce5 100644
--- a/meson.build
+++ b/meson.build
@@ -444,7 +444,7 @@ if with_any_vk and (with_platform_x11 and not with_dri3)
error('Vulkan drivers require dri3 for X11 support')
endif
if with_dri
- if with_glx == 'disabled' and not with_egl and not with_gbm and with_osmesa != 'classic'
+ if with_glx == 'disabled' and not with_egl and not with_gbm and not with_osmesa.contains('classic')
error('building dri drivers require at least one windowing system or classic osmesa')
endif
endif
@@ -1508,8 +1508,8 @@ else
dep_unwind = null_dep
endif

-if with_osmesa != 'none'
- if with_osmesa == 'gallium' and not with_gallium_softpipe
+if with_osmesa != []
+ if with_osmesa.contains('gallium') and not with_gallium_softpipe
error('OSMesa gallium requires gallium softpipe or llvmpipe.')
endif
if host_machine.system() == 'windows'
@@ -1710,10 +1710,10 @@ lines = ['',
with_gles2 ? 'yes' : 'no'),
]

-if with_osmesa != 'none'
+if with_osmesa != []
lines += ''
suffix = ''
- if with_osmesa == 'gallium'
+ if with_osmesa.contains('gallium')
suffix = '(Gallium)'
endif
lines += 'OSMesa: lib' + osmesa_lib_name + suffix
diff --git a/meson_options.txt b/meson_options.txt
index 626baf3d5c2..cb3dc3b383f 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -295,9 +295,9 @@ option(
)
option(
'osmesa',
- type : 'combo',
- value : 'none',
- choices : ['none', 'classic', 'gallium'],
+ type : 'array',
+ value : [],
+ choices : ['classic', 'gallium'],
description : 'Build OSmesa.'
)
option(
diff --git a/src/mesa/meson.build b/src/mesa/meson.build
index fa5c54cc6fb..f7b223862fa 100644
--- a/src/mesa/meson.build
+++ b/src/mesa/meson.build
@@ -744,7 +744,7 @@ libmesa_gallium = static_library(
)

subdir('drivers/dri')
-if with_osmesa == 'classic'
+if with_osmesa.contains('classic')
subdir('drivers/osmesa')
endif
if with_glx == 'xlib'
199 changes: 199 additions & 0 deletions ports/mesa/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
# Build-Depends: From X Window PR: zstd, drm (!windows), elfutils (!windows), wayland (!windows), wayland-protocols (!windows), xdamage, xshmfence (!windows), x11, xcb, xfixes, xext, xxf86vm, xrandr, xv, xvmc (!windows), egl-registry, opengl-registry, tool-meson
# Required LLVM modules: LLVM (modules: bitwriter, core, coroutines, engine, executionengine, instcombine, mcdisassembler, mcjit, scalaropts, transformutils) found: YES

#patches are from https://github.com/pal1000/mesa-dist-win/tree/master/patches
set(PATCHES dual-osmesa.patch
dual-osmesa-part2.patch
swravx512.patch
)

vcpkg_check_linkage(ONLY_DYNAMIC_CRT)
IF(VCPKG_TARGET_IS_WINDOWS)
set(VCPKG_POLICY_DLLS_IN_STATIC_LIBRARY enabled) # some parts of this port can only build as a shared library.
endif()

vcpkg_from_gitlab(
GITLAB_URL https://gitlab.freedesktop.org
OUT_SOURCE_PATH SOURCE_PATH
REPO mesa/mesa
REF df2977f871fc70ebd6be48c180d117189b5861b5 #v20.2.2
SHA512 6c51d817fe265ea6405c4e8afbb516f30cf697d00cf39f162473ea8a59c202bcdfbfe4b6f7c4a6fd2d4e98eb4a1604cb5e0a02558338bf415e53fe5421cbfbbe
HEAD_REF master # branch name
PATCHES ${PATCHES} #patch name
)
vcpkg_find_acquire_program(PYTHON3)
get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY)
vcpkg_add_to_path("${PYTHON3_DIR}")
vcpkg_add_to_path("${PYTHON3_DIR}/Scripts")
set(ENV{PYTHON} "${PYTHON3}")

function(vcpkg_get_python_package PYTHON_DIR )
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ras0219-msft As requested I factored out a function called vcpkg_get_python_package here but I did not put it into scripts/cmake yet since I did not want to rebuild all ports within this PR.

cmake_parse_arguments(PARSE_ARGV 0 _vgpp "" "PYTHON_EXECUTABLE" "PACKAGES")

if(NOT _vgpp_PYTHON_EXECUTABLE)
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} requires parameter PYTHON_EXECUTABLE!")
endif()
if(NOT _vgpp_PACKAGES)
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} requires parameter PACKAGES!")
endif()
if(NOT _vgpp_PYTHON_DIR)
get_filename_component(_vgpp_PYTHON_DIR "${_vgpp_PYTHON_EXECUTABLE}" DIRECTORY)
endif()

if (WIN32)
set(PYTHON_OPTION "")
else()
set(PYTHON_OPTION "--user")
endif()

if("${_vgpp_PYTHON_DIR}" MATCHES "${DOWNLOADS}") # inside vcpkg
if(NOT EXISTS "${_vgpp_PYTHON_DIR}/easy_install${VCPKG_HOST_EXECUTABLE_SUFFIX}")
if(NOT EXISTS "${_vgpp_PYTHON_DIR}/Scripts/pip${VCPKG_HOST_EXECUTABLE_SUFFIX}")
vcpkg_from_github(
OUT_SOURCE_PATH PYFILE_PATH
REPO pypa/get-pip
REF 309a56c5fd94bd1134053a541cb4657a4e47e09d #2019-08-25
SHA512 bb4b0745998a3205cd0f0963c04fb45f4614ba3b6fcbe97efe8f8614192f244b7ae62705483a5305943d6c8fedeca53b2e9905aed918d2c6106f8a9680184c7a
HEAD_REF master
)
execute_process(COMMAND "${_vgpp_PYTHON_EXECUTABLE}" "${PYFILE_PATH}/get-pip.py" ${PYTHON_OPTION})
endif()
foreach(_package IN LISTS _vgpp_PACKAGES)
execute_process(COMMAND "${_vgpp_PYTHON_DIR}/Scripts/pip${VCPKG_HOST_EXECUTABLE_SUFFIX}" install ${_package} ${PYTHON_OPTION})
endforeach()
else()
foreach(_package IN LISTS _vgpp_PACKAGES)
execute_process(COMMAND "${_vgpp_PYTHON_DIR}/easy_install${VCPKG_HOST_EXECUTABLE_SUFFIX}" ${_package})
endforeach()
endif()
if(NOT VCPKG_TARGET_IS_WINDOWS)
execute_process(COMMAND pip3 install ${_vgpp_PACKAGES})
endif()
else() # outside vcpkg
foreach(_package IN LISTS _vgpp_PACKAGES)
execute_process(COMMAND ${_vgpp_PYTHON_EXECUTABLE} -c "import ${_package}" RESULT_VARIABLE HAS_ERROR)
if(HAS_ERROR)
message(FATAL_ERROR "Python package '${_package}' needs to be installed for port '${PORT}'.\nComplete list of required python packages: ${_vgpp_PACKAGES}")
endif()
endforeach()
endif()
endfunction()

vcpkg_get_python_package(PYTHON_EXECUTABLE "${PYTHON3}" PACKAGES setuptools mako)

vcpkg_find_acquire_program(FLEX)
get_filename_component(FLEX_DIR "${FLEX}" DIRECTORY )
vcpkg_add_to_path(PREPEND "${FLEX_DIR}")
vcpkg_find_acquire_program(BISON)
get_filename_component(BISON_DIR "${BISON}" DIRECTORY )
vcpkg_add_to_path(PREPEND "${BISON_DIR}")

if(WIN32) # WIN32 HOST probably has win_flex and win_bison!
if(NOT EXISTS "${FLEX_DIR}/flex${VCPKG_HOST_EXECUTABLE_SUFFIX}")
if(FLEX_DIR MATCHES "${DOWNLOADS}")
file(CREATE_LINK "${FLEX}" "${FLEX_DIR}/flex${VCPKG_HOST_EXECUTABLE_SUFFIX}")
else()
message(FATAL_ERROR "${PORT} requires flex being named flex on windows and not win_flex!\n(Can be solved by creating a simple link from win_flex to flex)")
endif()
endif()
if(NOT EXISTS "${BISON_DIR}/BISON${VCPKG_HOST_EXECUTABLE_SUFFIX}")
if(BISON_DIR MATCHES "${DOWNLOADS}")
file(CREATE_LINK "${BISON}" "${BISON_DIR}/bison${VCPKG_HOST_EXECUTABLE_SUFFIX}")
else()
message(FATAL_ERROR "${PORT} requires bison being named bison on windows and not win_bison!\n(Can be solved by creating a simple link from win_bison to bison)")
endif()
endif()
endif()

# For features https://github.com/pal1000/mesa-dist-win should be probably studied a bit more.
#string(APPEND GALLIUM_DRIVERS 'auto')
list(APPEND MESA_OPTIONS -Dzstd=enabled)
list(APPEND MESA_OPTIONS -Dshared-llvm=auto)
list(APPEND MESA_OPTIONS -Dlibunwind=disabled)
list(APPEND MESA_OPTIONS -Dlmsensors=disabled)
list(APPEND MESA_OPTIONS -Dvalgrind=disabled)
list(APPEND MESA_OPTIONS -Dglvnd=false)
list(APPEND MESA_OPTIONS -Dglx=disabled)
list(APPEND MESA_OPTIONS -Dgbm=disabled)
#list(APPEND MESA_OPTIONS -Dosmesa=['gallium','classic']) # classic has compiler errors.
list(APPEND MESA_OPTIONS -Dosmesa=['gallium'])


if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
list(APPEND MESA_OPTIONS -Dshared-swr=false)
list(APPEND MESA_OPTIONS "-Dswr-arches=['avx']")
else()
list(APPEND MESA_OPTIONS -Dshared-swr=true)
list(APPEND MESA_OPTIONS "-Dswr-arches=['avx','avx2','knl','skx']")
endif()

string(APPEND GALLIUM_DRIVERS 'swrast')
if("llvm" IN_LIST FEATURES)
list(APPEND MESA_OPTIONS -Dllvm=enabled)
string(APPEND GALLIUM_DRIVERS ",'swr'") # SWR always requires llvm
else()
list(APPEND MESA_OPTIONS -Dllvm=disabled)
endif()

list(APPEND MESA_OPTIONS -Dgallium-drivers=[${GALLIUM_DRIVERS}])

if("gles1" IN_LIST FEATURES)
list(APPEND MESA_OPTIONS -Dgles1=enabled)
else()
list(APPEND MESA_OPTIONS -Dgles1=disabled)
endif()
if("gles2" IN_LIST FEATURES)
list(APPEND MESA_OPTIONS -Dgles2=enabled)
else()
list(APPEND MESA_OPTIONS -Dgles2=disabled)
endif()
if("opengl" IN_LIST FEATURES)
list(APPEND MESA_OPTIONS -Dopengl=true)
else()
list(APPEND MESA_OPTIONS -Dopengl=false)
endif()
if("egl" IN_LIST FEATURES) # EGL feature only works on Linux
list(APPEND MESA_OPTIONS -Degl=enabled)
else()
list(APPEND MESA_OPTIONS -Degl=disabled)
endif()

list(APPEND MESA_OPTIONS -Dshared-glapi=enabled) #shared GLAPI required when building two or more of the following APIs - opengl, gles1 gles2


if(VCPKG_TARGET_IS_WINDOWS)
list(APPEND MESA_OPTIONS -Dplatforms=['windows'])
endif()

vcpkg_configure_meson(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
#-D gles-lib-suffix=_mesa
#-D egl-lib-suffix=_mesa
-Dbuild-tests=false
${MESA_OPTIONS}
)
vcpkg_install_meson()
vcpkg_fixup_pkgconfig()

file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)

#installed by egl-registry
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/KHR)
file(REMOVE ${CURRENT_PACKAGES_DIR}/include/EGL/egl.h)
file(REMOVE ${CURRENT_PACKAGES_DIR}/include/EGL/eglext.h)
file(REMOVE ${CURRENT_PACKAGES_DIR}/include/EGL/eglplatform.h)
#installed by opengl-registry
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this port depend on opengl-registry then?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this would only generate an hard error on the installation of mesa if it tries to install headers which are already present, The build itself will not use either egl-registry nor opengl-registry.

set(_double_files include/GL/glcorearb.h include/GL/glext.h include/GL/glxext.h
include/GLES/egl.h include/GLES/gl.h include/GLES/glext.h include/GLES/glplatform.h
include/GLES2/gl2.h include/GLES2/gl2ext.h include/GLES2/gl2platform.h
include/GLES3/gl3.h include/GLES3/gl31.h include/GLES3/gl32.h include/GLES3/gl3platform.h)
Comment on lines +188 to +191
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
set(_double_files include/GL/glcorearb.h include/GL/glext.h include/GL/glxext.h
include/GLES/egl.h include/GLES/gl.h include/GLES/glext.h include/GLES/glplatform.h
include/GLES2/gl2.h include/GLES2/gl2ext.h include/GLES2/gl2platform.h
include/GLES3/gl3.h include/GLES3/gl31.h include/GLES3/gl32.h include/GLES3/gl3platform.h)
set(_double_files include/GL/glcorearb.h include/GL/glext.h include/GL/glxext.h
include/GLES3/gl3.h include/GLES3/gl31.h include/GLES3/gl32.h include/GLES3/gl3platform.h)

Below is already removing the GLES and GLES2 dirs.

list(TRANSFORM _double_files PREPEND "${CURRENT_PACKAGES_DIR}/")
file(REMOVE ${_double_files})

file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/GLES)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/GLES2)
# # Handle copyright
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(TOUCH "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright")
22 changes: 22 additions & 0 deletions ports/mesa/swravx512.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
diff --git a/src/gallium/drivers/swr/meson.build b/src/gallium/drivers/swr/meson.build
index 2fad60365a3..dce7f656d64 100644
--- a/src/gallium/drivers/swr/meson.build
+++ b/src/gallium/drivers/swr/meson.build
@@ -249,7 +249,7 @@ endif

if with_swr_arches.contains('knl')
swr_knl_args = cpp.first_supported_argument(
- '-march=knl', '-target-cpu=mic-knl', '-xMIC-AVX512',
+ '-march=knl', '-target-cpu=mic-knl', '-xMIC-AVX512', '/arch:AVX512',
)
if swr_knl_args == []
error('Cannot find KNL support for swr.')
@@ -274,7 +274,7 @@ endif

if with_swr_arches.contains('skx')
swr_skx_args = cpp.first_supported_argument(
- '-march=skylake-avx512', '-target-cpu=x86-skylake', '-xCORE-AVX512',
+ '-march=skylake-avx512', '-target-cpu=x86-skylake', '-xCORE-AVX512', '/arch:AVX512',
)
if swr_skx_args == []
error('Cannot find SKX support for swr.')
5 changes: 5 additions & 0 deletions scripts/ci.baseline.txt
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,11 @@ memorymodule:arm-uwp=fail
memorymodule:x64-linux=fail
memorymodule:x64-osx=fail
memorymodule:x64-uwp=fail
# Due to static crt.
mesa:x64-windows-static=fail
# Missing dependent libraries.
mesa:x64-linux=fail
mesa:x64-osx=fail
meschach:arm-uwp=fail
meschach:x64-linux=fail
meschach:x64-osx=fail
Expand Down
Loading