1# Mesa 3-D graphics library 2# 3# Copyright (C) 2021 GlobalLogic Ukraine 4# Copyright (C) 2021 Roman Stratiienko (r.stratiienko@gmail.com) 5# 6# Permission is hereby granted, free of charge, to any person obtaining a 7# copy of this software and associated documentation files (the "Software"), 8# to deal in the Software without restriction, including without limitation 9# the rights to use, copy, modify, merge, publish, distribute, sublicense, 10# and/or sell copies of the Software, and to permit persons to whom the 11# Software is furnished to do so, subject to the following conditions: 12# 13# The above copyright notice and this permission notice shall be included 14# in all copies or substantial portions of the Software. 15# 16# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22# DEALINGS IN THE SOFTWARE. 23 24ifneq ($(filter true, $(BOARD_MESA3D_USES_MESON_BUILD)),) 25 26LOCAL_PATH := $(call my-dir) 27MESA3D_TOP := $(dir $(LOCAL_PATH)) 28 29LIBDRM_VERSION = $(shell cat external/libdrm/meson.build | grep -o "\<version\>\s*:\s*'\w*\.\w*\.\w*'" | grep -o "\w*\.\w*\.\w*" | head -1) 30 31MESA_VK_LIB_SUFFIX_amd := radeon 32MESA_VK_LIB_SUFFIX_intel := intel 33MESA_VK_LIB_SUFFIX_freedreno := freedreno 34MESA_VK_LIB_SUFFIX_broadcom := broadcom 35MESA_VK_LIB_SUFFIX_panfrost := panfrost 36MESA_VK_LIB_SUFFIX_virtio-experimental := virtio 37MESA_VK_LIB_SUFFIX_swrast := lvp 38 39include $(CLEAR_VARS) 40 41LOCAL_SHARED_LIBRARIES := libc libdl libdrm libm liblog libcutils libz libc++ libnativewindow libsync libhardware 42LOCAL_STATIC_LIBRARIES := libexpat libarect libelf 43LOCAL_HEADER_LIBRARIES := libnativebase_headers hwvulkan_headers libbacktrace_headers 44MESON_GEN_PKGCONFIGS := backtrace cutils expat hardware libdrm:$(LIBDRM_VERSION) nativewindow sync zlib:1.2.11 libelf 45LOCAL_CFLAGS += $(BOARD_MESA3D_CFLAGS) 46 47ifneq ($(filter swrast,$(BOARD_MESA3D_GALLIUM_DRIVERS) $(BOARD_MESA3D_VULKAN_DRIVERS)),) 48ifeq ($(BOARD_MESA3D_FORCE_SOFTPIPE),) 49MESON_GEN_LLVM_STUB := true 50endif 51endif 52 53ifneq ($(filter zink,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 54LOCAL_SHARED_LIBRARIES += libvulkan 55MESON_GEN_PKGCONFIGS += vulkan 56endif 57 58ifneq ($(filter iris,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 59LOCAL_SHARED_LIBRARIES += libdrm_intel 60MESON_GEN_PKGCONFIGS += libdrm_intel:$(LIBDRM_VERSION) 61endif 62 63ifneq ($(filter radeonsi amd,$(BOARD_MESA3D_GALLIUM_DRIVERS) $(BOARD_MESA3D_VULKAN_DRIVERS)),) 64MESON_GEN_LLVM_STUB := true 65LOCAL_CFLAGS += -DFORCE_BUILD_AMDGPU # instructs LLVM to declare LLVMInitializeAMDGPU* functions 66LOCAL_SHARED_LIBRARIES += libdrm_amdgpu 67MESON_GEN_PKGCONFIGS += libdrm_amdgpu:$(LIBDRM_VERSION) 68endif 69 70ifneq ($(filter radeonsi r300 r600,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 71LOCAL_SHARED_LIBRARIES += libdrm_radeon 72MESON_GEN_PKGCONFIGS += libdrm_radeon:$(LIBDRM_VERSION) 73endif 74 75ifneq ($(filter nouveau,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 76LOCAL_SHARED_LIBRARIES += libdrm_nouveau 77MESON_GEN_PKGCONFIGS += libdrm_nouveau:$(LIBDRM_VERSION) 78endif 79 80ifneq ($(filter d3d12,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 81LOCAL_HEADER_LIBRARIES += DirectX-Headers 82LOCAL_STATIC_LIBRARIES += DirectX-Guids 83MESON_GEN_PKGCONFIGS += DirectX-Headers 84endif 85 86ifneq ($(MESON_GEN_LLVM_STUB),) 87MESON_LLVM_VERSION := 12.0.0 88LOCAL_SHARED_LIBRARIES += libLLVM12 89endif 90 91ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 30; echo $$?), 0) 92LOCAL_SHARED_LIBRARIES += \ 93 android.hardware.graphics.mapper@4.0 \ 94 libgralloctypes \ 95 libhidlbase \ 96 libutils 97 98MESON_GEN_PKGCONFIGS += android.hardware.graphics.mapper:4.0 99endif 100 101__MY_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES) 102 103ifeq ($(TARGET_IS_64_BIT),true) 104LOCAL_MULTILIB := 64 105else 106LOCAL_MULTILIB := 32 107endif 108include $(LOCAL_PATH)/mesa3d_cross.mk 109 110ifdef TARGET_2ND_ARCH 111LOCAL_MULTILIB := 32 112include $(LOCAL_PATH)/mesa3d_cross.mk 113endif 114 115#------------------------------------------------------------------------------- 116 117# $1: name 118# $2: symlink suffix 119# $3: subdir 120# $4: source prebuilt 121# $5: export headers 122define mesa3d-lib 123include $(CLEAR_VARS) 124LOCAL_MODULE_CLASS := SHARED_LIBRARIES 125LOCAL_MODULE := $1 126LOCAL_VENDOR_MODULE := true 127LOCAL_MODULE_RELATIVE_PATH := $3 128LOCAL_PREBUILT_MODULE_FILE := $($4) 129LOCAL_MULTILIB := first 130LOCAL_CHECK_ELF_FILES := false 131LOCAL_MODULE_SUFFIX := .so 132LOCAL_MODULE_SYMLINKS := $1$2 133LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES) 134LOCAL_EXPORT_C_INCLUDE_DIRS := $5 135include $(BUILD_PREBUILT) 136 137ifdef TARGET_2ND_ARCH 138include $(CLEAR_VARS) 139LOCAL_MODULE_CLASS := SHARED_LIBRARIES 140LOCAL_MODULE := $1 141LOCAL_VENDOR_MODULE := true 142LOCAL_MODULE_RELATIVE_PATH := $3 143LOCAL_PREBUILT_MODULE_FILE := $(2ND_$4) 144LOCAL_MULTILIB := 32 145LOCAL_CHECK_ELF_FILES := false 146LOCAL_MODULE_SUFFIX := .so 147LOCAL_MODULE_SYMLINKS := $1$2 148LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES) 149LOCAL_EXPORT_C_INCLUDE_DIRS := $5 150include $(BUILD_PREBUILT) 151endif 152endef 153 154# Module 'libgallium_dri', produces '/vendor/lib{64}/dri/libgallium_dri.so' 155# This module also trigger DRI symlinks creation process 156$(eval $(call mesa3d-lib,libgallium_dri,.so.0,dri,MESA3D_GALLIUM_DRI_BIN)) 157# Module 'libglapi', produces '/vendor/lib{64}/libglapi.so' 158$(eval $(call mesa3d-lib,libglapi,.so.0,,MESA3D_LIBGLAPI_BIN)) 159 160# Module 'libEGL_mesa', produces '/vendor/lib{64}/egl/libEGL_mesa.so' 161$(eval $(call mesa3d-lib,libEGL_mesa,.so.1,egl,MESA3D_LIBEGL_BIN)) 162# Module 'libGLESv1_CM_mesa', produces '/vendor/lib{64}/egl/libGLESv1_CM_mesa.so' 163$(eval $(call mesa3d-lib,libGLESv1_CM_mesa,.so.1,egl,MESA3D_LIBGLESV1_BIN)) 164# Module 'libGLESv2_mesa', produces '/vendor/lib{64}/egl/libGLESv2_mesa.so' 165$(eval $(call mesa3d-lib,libGLESv2_mesa,.so.2,egl,MESA3D_LIBGLESV2_BIN)) 166 167# Modules 'vulkan.{driver_name}', produces '/vendor/lib{64}/hw/vulkan.{driver_name}.so' HAL 168$(foreach driver,$(BOARD_MESA3D_VULKAN_DRIVERS), \ 169 $(eval $(call mesa3d-lib,vulkan.$(MESA_VK_LIB_SUFFIX_$(driver)),.so.0,hw,MESA3D_VULKAN_$(driver)_BIN))) 170 171ifneq ($(filter true, $(BOARD_MESA3D_BUILD_LIBGBM)),) 172# Modules 'libgbm', produces '/vendor/lib{64}/libgbm.so' 173$(eval $(call mesa3d-lib,libgbm,.so.1,,MESA3D_LIBGBM_BIN,$(MESA3D_TOP)/src/gbm/main)) 174endif 175 176#------------------------------------------------------------------------------- 177 178endif 179