• 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)
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