blob: 95e7c303bd941bc613e9ceedacde69d18eb99533 [file] [log] [blame]
set_property(DIRECTORY . PROPERTY FOLDER "ANGLE")
if (APPLE)
set(is_mac TRUE)
elseif (WIN32)
set(is_win TRUE)
set(angle_enable_d3d9 TRUE)
set(angle_enable_d3d11 TRUE)
set(angle_is_winuwp FALSE)
elseif (UNIX)
set(is_linux TRUE)
endif ()
include(Compiler.cmake)
include(GLESv2.cmake)
# ANGLE Renderer backends
include(D3D.cmake)
include(GL.cmake)
include(Metal.cmake)
set(no_gl_prototypes
GL_GLES_PROTOTYPES=0
EGL_EGL_PROTOTYPES=0
)
set(gl_prototypes
GL_GLES_PROTOTYPES=1
EGL_EGL_PROTOTYPES=1
GL_GLEXT_PROTOTYPES
EGL_EGLEXT_PROTOTYPES
)
# Default library types for ANGLE
# Override these in Platform*.cmake for your port as needed.
set(ANGLE_LIBRARY_TYPE STATIC)
set(GLESv2_LIBRARY_TYPE STATIC)
set(EGL_LIBRARY_TYPE STATIC)
# ANGLE makes a number of small static libraries that are then joined into a
# bigger library that is built shared. Rather than making the small libraries
# there will be a ANGLE whose sources are dependent on whether the library
# is being used as a compiler or as a GLES implementation.
#
# The corresponding gn targets are described below
#
# ANGLE (Compiler only)
# + angle_common
# + preprocessor
# + translator
#
# ANGLE (GLES)
# + ANGLE (Compiler only)
# + xxhash
# + angle_image_util
# + angle_system_utils (OS specific)
# + angle_(renderer) (Backend and OS specific)
set(ANGLE_PRIVATE_INCLUDE_DIRECTORIES
"${CMAKE_CURRENT_SOURCE_DIR}/include"
"${CMAKE_CURRENT_SOURCE_DIR}/include/KHR"
"${CMAKE_CURRENT_SOURCE_DIR}/src"
"${CMAKE_CURRENT_SOURCE_DIR}/src/common/third_party/base"
"${CMAKE_CURRENT_SOURCE_DIR}/third_party/zlib/google"
"${CMAKE_CURRENT_BINARY_DIR}/include"
)
set(ANGLE_DEFINITIONS
ANGLE_ENABLE_ESSL
ANGLE_ENABLE_GLSL
)
set(ANGLE_SOURCES
${libangle_common_sources}
${angle_preprocessor_sources}
${angle_translator_glsl_base_sources}
${angle_translator_essl_sources}
${angle_translator_glsl_and_vulkan_base_sources}
${angle_translator_glsl_sources}
${angle_translator_glsl_symbol_table_sources}
${angle_translator_sources}
${angle_system_utils_sources}
src/common/angle_version_info.cpp
src/libANGLE/capture/FrameCapture_mock.cpp
src/libANGLE/capture/frame_capture_utils_mock.cpp
)
if (WIN32)
# FIXME: DX11 support will not compile if this preprocessor definition is set
# DirectX Documentation is setting that version to 0x700 but there is no
# corresponding value in sdkddkver.h
remove_definitions(-D_WIN32_WINNT=0x601 -DWINVER=0x601)
list(APPEND ANGLE_SOURCES
"src/libANGLE/renderer/dxgi_format_map.h"
"src/libANGLE/renderer/dxgi_format_map_autogen.cpp"
"src/libANGLE/renderer/dxgi_support_table.h"
"src/libANGLE/renderer/dxgi_support_table_autogen.cpp"
)
if (NOT angle_is_winuwp)
list(APPEND ANGLE_SOURCES
"src/libANGLE/renderer/d3d_format.cpp"
"src/libANGLE/renderer/d3d_format.h"
)
endif()
endif ()
set(ANGLEGLESv2_LIBRARIES
ANGLE
)
set(zlib_wrapper_sources
"third_party/zlib/google/compression_utils_portable.h"
"third_party/zlib/google/compression_utils_portable.cc"
)
set(angle_gl_enum_utils
"src/libANGLE/gl_enum_utils.cpp"
"src/libANGLE/gl_enum_utils_autogen.cpp"
)
WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS()
add_subdirectory(include)
add_library(ANGLEFramework INTERFACE)
add_dependencies(ANGLEFramework GLSLANGHeaders ANGLEHeaders)
if (USE_ANGLE_EGL OR USE_ANGLE_WEBGL)
add_library(ANGLE ${ANGLE_LIBRARY_TYPE}
${ANGLE_SOURCES}
${libangle_sources}
${libangle_headers}
${libangle_image_util_sources}
${libangle_image_util_headers}
${xxhash_sources}
${zlib_wrapper_sources}
)
target_include_directories(ANGLE PRIVATE ${ANGLE_PRIVATE_INCLUDE_DIRECTORIES})
target_compile_definitions(ANGLE PRIVATE
${no_gl_prototypes}
LIBANGLE_IMPLEMENTATION
)
target_compile_definitions(ANGLE PUBLIC ${ANGLE_DEFINITIONS})
target_link_libraries(ANGLE PRIVATE ZLIB::ZLIB)
target_compile_definitions(ANGLEFramework INTERFACE ${gl_prototypes})
add_library(GLESv2 ${GLESv2_LIBRARY_TYPE}
${libglesv2_sources}
)
target_include_directories(GLESv2 PRIVATE ${ANGLE_PRIVATE_INCLUDE_DIRECTORIES})
target_compile_definitions(GLESv2 PRIVATE
${no_gl_prototypes}
LIBGLESV2_IMPLEMENTATION
)
target_link_libraries(GLESv2 PRIVATE ${ANGLEGLESv2_LIBRARIES} ${CMAKE_DL_LIBS})
if (WIN32)
# Output library name according to the .def
target_sources(GLESv2 PRIVATE src/libGLESv2/libGLESv2_autogen.def)
set_target_properties(GLESv2 PROPERTIES OUTPUT_NAME libGLESv2)
endif ()
add_library(GLESv2Framework INTERFACE)
target_link_libraries(GLESv2Framework INTERFACE GLESv2)
target_include_directories(GLESv2Framework INTERFACE ${ANGLE_FRAMEWORK_HEADERS_DIR})
target_compile_definitions(GLESv2Framework INTERFACE USE_SYSTEM_EGL)
add_library(ANGLE::GLES ALIAS GLESv2Framework)
if (USE_ANGLE_EGL)
add_library(EGL ${EGL_LIBRARY_TYPE}
${libegl_sources}
)
target_include_directories(EGL PRIVATE ${ANGLE_PRIVATE_INCLUDE_DIRECTORIES})
target_compile_definitions(EGL PRIVATE
${ANGLE_DEFINITIONS}
${gl_prototypes}
EGLAPI=
)
target_link_libraries(EGL PRIVATE GLESv2 ${CMAKE_DL_LIBS})
set_target_properties(EGL PROPERTIES LINKER_LANGUAGE CXX)
if (WIN32)
# Output library names according to the .def
target_sources(EGL PRIVATE src/libEGL/libEGL_autogen.def)
set_target_properties(EGL PROPERTIES OUTPUT_NAME libEGL)
endif ()
add_library(EGLFramework INTERFACE)
target_include_directories(EGLFramework INTERFACE ${ANGLE_FRAMEWORK_HEADERS_DIR}/)
target_compile_definitions(EGLFramework INTERFACE ${gl_prototypes})
target_link_libraries(EGLFramework INTERFACE EGL)
add_library(ANGLE::EGL ALIAS EGLFramework)
endif ()
else ()
add_library(ANGLE ${ANGLE_LIBRARY_TYPE} ${ANGLE_SOURCES})
target_include_directories(ANGLE PRIVATE ${ANGLE_PRIVATE_INCLUDE_DIRECTORIES})
target_link_libraries(ANGLE PRIVATE ${CMAKE_DL_LIBS})
target_compile_definitions(ANGLE PRIVATE
${ANGLE_DEFINITIONS}
${no_gl_prototypes}
LIBANGLE_IMPLEMENTATION
)
endif ()
if (USE_ANGLE_WEBGL)
set(libglesv2_entry_points_headers
src/libGLESv2/entry_points_egl_autogen.h
src/libGLESv2/entry_points_egl_ext_autogen.h
src/libGLESv2/entry_points_gles_2_0_autogen.h
src/libGLESv2/entry_points_gles_3_0_autogen.h
src/libGLESv2/entry_points_gles_ext_autogen.h
)
WEBKIT_COPY_FILES(LibGLESv2EntryPointsHeaders
DESTINATION ${ANGLE_FRAMEWORK_HEADERS_DIR}/ANGLE
FILES ${libglesv2_entry_points_headers}
FLATTENED
)
if (WIN32 AND TARGET GLESv2)
# GLESv2 needs to have a direct or indirect dependency to
# LibGLESv2EntryPointsHeaders for CMake Visual Studio generator
# to eliminate duplicated custom commands. Otherwise,
# entry_points_*.h will be copied twice in both projects.
add_dependencies(GLESv2 LibGLESv2EntryPointsHeaders)
endif ()
add_custom_target(ANGLE-webgl-headers
DEPENDS LibGLESv2EntryPointsHeaders ANGLEWebGLHeaders
COMMAND ${CMAKE_COMMAND} -E env
BUILT_PRODUCTS_DIR=${ANGLE_FRAMEWORK_HEADERS_DIR}
PUBLIC_HEADERS_FOLDER_PATH=/ANGLE
${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/adjust-angle-include-paths.py
VERBATIM
)
add_dependencies(GLESv2Framework ANGLE-webgl-headers)
endif ()
if (COMPILER_IS_GCC_OR_CLANG)
foreach (angle_target ANGLE EGL GLESv2)
if (TARGET ${angle_target})
WEBKIT_ADD_TARGET_CXX_FLAGS(${angle_target}
-Wno-cast-align
-Wno-dangling-pointer
-Wno-extra
-Wno-suggest-attribute=format
-Wno-undef
-Wno-unused-parameter
-Wno-return-type
-Wno-comment)
endif ()
endforeach ()
endif ()
target_link_libraries(ANGLEFramework INTERFACE ANGLE)
target_include_directories(ANGLEFramework INTERFACE ${ANGLE_FRAMEWORK_HEADERS_DIR})
add_library(ANGLE::ANGLE ALIAS ANGLEFramework)