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) 30LLVM_VERSION_MAJOR = $(shell \ 31 if [ -f external/llvm-project/cmake/Modules/LLVMVersion.cmake ]; then \ 32 grep 'set.LLVM_VERSION_MAJOR ' external/llvm-project/cmake/Modules/LLVMVersion.cmake | grep -o '[0-9]\+'; \ 33 else \ 34 grep 'set.LLVM_VERSION_MAJOR ' external/llvm-project/llvm/CMakeLists.txt | grep -o '[0-9]\+'; \ 35 fi) 36 37MESA_VK_LIB_SUFFIX_amd := radeon 38MESA_VK_LIB_SUFFIX_intel := intel 39MESA_VK_LIB_SUFFIX_intel_hasvk := intel_hasvk 40MESA_VK_LIB_SUFFIX_freedreno := freedreno 41MESA_VK_LIB_SUFFIX_broadcom := broadcom 42MESA_VK_LIB_SUFFIX_panfrost := panfrost 43MESA_VK_LIB_SUFFIX_virtio := virtio 44MESA_VK_LIB_SUFFIX_swrast := lvp 45 46include $(CLEAR_VARS) 47 48LOCAL_SHARED_LIBRARIES := libc libdl libdrm libm liblog libcutils libz libc++ libnativewindow libsync libhardware 49LOCAL_STATIC_LIBRARIES := libexpat libarect libelf 50LOCAL_HEADER_LIBRARIES := libnativebase_headers hwvulkan_headers 51MESON_GEN_PKGCONFIGS := log cutils expat hardware libdrm:$(LIBDRM_VERSION) nativewindow sync zlib:1.2.11 libelf 52LOCAL_CFLAGS += $(BOARD_MESA3D_CFLAGS) 53 54ifneq ($(filter swrast,$(BOARD_MESA3D_GALLIUM_DRIVERS) $(BOARD_MESA3D_VULKAN_DRIVERS)),) 55ifeq ($(BOARD_MESA3D_FORCE_SOFTPIPE),) 56MESON_GEN_LLVM_STUB := true 57endif 58endif 59 60ifneq ($(filter zink,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 61LOCAL_SHARED_LIBRARIES += libvulkan 62MESON_GEN_PKGCONFIGS += vulkan 63endif 64 65ifneq ($(filter iris,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 66LOCAL_SHARED_LIBRARIES += libdrm_intel 67MESON_GEN_PKGCONFIGS += libdrm_intel:$(LIBDRM_VERSION) 68endif 69 70ifneq ($(filter radeonsi,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 71ifneq ($(MESON_GEN_LLVM_STUB),) 72LOCAL_CFLAGS += -DFORCE_BUILD_AMDGPU # instructs LLVM to declare LLVMInitializeAMDGPU* functions 73# The flag is required for the Android-x86 LLVM port that follows the AOSP LLVM porting rules 74# https://osdn.net/projects/android-x86/scm/git/external-llvm-project 75endif 76endif 77 78ifneq ($(filter radeonsi amd,$(BOARD_MESA3D_GALLIUM_DRIVERS) $(BOARD_MESA3D_VULKAN_DRIVERS)),) 79LOCAL_SHARED_LIBRARIES += libdrm_amdgpu 80MESON_GEN_PKGCONFIGS += libdrm_amdgpu:$(LIBDRM_VERSION) 81endif 82 83ifneq ($(filter radeonsi r300 r600,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 84LOCAL_SHARED_LIBRARIES += libdrm_radeon 85MESON_GEN_PKGCONFIGS += libdrm_radeon:$(LIBDRM_VERSION) 86endif 87 88ifneq ($(filter d3d12,$(BOARD_MESA3D_GALLIUM_DRIVERS)),) 89LOCAL_HEADER_LIBRARIES += DirectX-Headers 90LOCAL_STATIC_LIBRARIES += DirectX-Guids 91MESON_GEN_PKGCONFIGS += DirectX-Headers 92endif 93 94ifneq ($(MESON_GEN_LLVM_STUB),) 95MESON_LLVM_VERSION := $(LLVM_VERSION_MAJOR).0.0 96LOCAL_SHARED_LIBRARIES += libLLVM$(LLVM_VERSION_MAJOR) 97endif 98 99ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 30; echo $$?), 0) 100LOCAL_SHARED_LIBRARIES += \ 101 android.hardware.graphics.mapper@4.0 \ 102 libgralloctypes \ 103 libhidlbase \ 104 libutils 105ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 35; echo $$?), 0) 106LOCAL_SHARED_LIBRARIES += libui 107MESON_GEN_PKGCONFIGS += ui 108endif 109MESON_GEN_PKGCONFIGS += android.hardware.graphics.mapper:4.0 110endif 111 112__MY_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES) 113 114ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 30; echo $$?), 0) 115MESA_LIBGBM_NAME := libgbm_mesa 116else 117MESA_LIBGBM_NAME := libgbm 118endif 119 120ifeq ($(TARGET_IS_64_BIT),true) 121LOCAL_MULTILIB := 64 122else 123LOCAL_MULTILIB := 32 124endif 125include $(LOCAL_PATH)/mesa3d_cross.mk 126 127ifdef TARGET_2ND_ARCH 128LOCAL_MULTILIB := 32 129include $(LOCAL_PATH)/mesa3d_cross.mk 130endif 131 132#------------------------------------------------------------------------------- 133 134# $1: name 135# $2: subdir 136# $3: source prebuilt 137# $4: export headers 138define mesa3d-lib 139include $(CLEAR_VARS) 140LOCAL_MODULE_CLASS := SHARED_LIBRARIES 141LOCAL_MODULE := $1 142LOCAL_VENDOR_MODULE := true 143LOCAL_MODULE_RELATIVE_PATH := $2 144LOCAL_PREBUILT_MODULE_FILE := $($3) 145LOCAL_MULTILIB := first 146LOCAL_CHECK_ELF_FILES := false 147LOCAL_MODULE_SUFFIX := .so 148LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES) 149LOCAL_EXPORT_C_INCLUDE_DIRS := $4 150include $(BUILD_PREBUILT) 151 152ifdef TARGET_2ND_ARCH 153include $(CLEAR_VARS) 154LOCAL_MODULE_CLASS := SHARED_LIBRARIES 155LOCAL_MODULE := $1 156LOCAL_VENDOR_MODULE := true 157LOCAL_MODULE_RELATIVE_PATH := $2 158LOCAL_PREBUILT_MODULE_FILE := $(2ND_$3) 159LOCAL_MULTILIB := 32 160LOCAL_CHECK_ELF_FILES := false 161LOCAL_MODULE_SUFFIX := .so 162LOCAL_SHARED_LIBRARIES := $(__MY_SHARED_LIBRARIES) 163LOCAL_EXPORT_C_INCLUDE_DIRS := $4 164include $(BUILD_PREBUILT) 165endif 166endef 167 168ifneq ($(strip $(BOARD_MESA3D_GALLIUM_DRIVERS)),) 169# Module 'libgallium_dri', produces '/vendor/lib{64}/libgallium_dri.so' 170# This module also trigger DRI symlinks creation process 171$(eval $(call mesa3d-lib,libgallium_dri,,MESA3D_GALLIUM_BIN)) 172 173# Module 'libEGL_mesa', produces '/vendor/lib{64}/egl/libEGL_mesa.so' 174$(eval $(call mesa3d-lib,libEGL_mesa,egl,MESA3D_LIBEGL_BIN)) 175# Module 'libGLESv1_CM_mesa', produces '/vendor/lib{64}/egl/libGLESv1_CM_mesa.so' 176$(eval $(call mesa3d-lib,libGLESv1_CM_mesa,egl,MESA3D_LIBGLESV1_BIN)) 177# Module 'libGLESv2_mesa', produces '/vendor/lib{64}/egl/libGLESv2_mesa.so' 178$(eval $(call mesa3d-lib,libGLESv2_mesa,egl,MESA3D_LIBGLESV2_BIN)) 179endif 180 181# Modules 'vulkan.{driver_name}', produces '/vendor/lib{64}/hw/vulkan.{driver_name}.so' HAL 182$(foreach driver,$(BOARD_MESA3D_VULKAN_DRIVERS), \ 183 $(eval $(call mesa3d-lib,vulkan.$(MESA_VK_LIB_SUFFIX_$(driver)),hw,MESA3D_VULKAN_$(driver)_BIN))) 184 185ifneq ($(filter true, $(BOARD_MESA3D_BUILD_LIBGBM)),) 186# Modules 'libgbm', produces '/vendor/lib{64}/libgbm.so' 187$(eval $(call mesa3d-lib,$(MESA_LIBGBM_NAME),,MESA3D_LIBGBM_BIN,$(MESA3D_TOP)/src/gbm/main)) 188$(eval $(call mesa3d-lib,dri_gbm,,MESA3D_DRI_GBM_BIN)) 189endif 190 191#------------------------------------------------------------------------------- 192 193endif 194