• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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