Figure it out once in the build system, then just use that all over the place. Signed-off-by: Eric Engestrom <eric.engestrom@intel.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>tags/19.1-branchpoint
$(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5), \ | $(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5), \ | ||||
$(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \ | $(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \ | ||||
$(if $(filter 6,$(MESA_ANDROID_MAJOR_VERSION)), \ | $(if $(filter 6,$(MESA_ANDROID_MAJOR_VERSION)), \ | ||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0307 -DMESA_LLVM_VERSION_PATCH=0)) \ | |||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0307 -DMESA_LLVM_VERSION_STRING="3.7")) \ | |||||
$(if $(filter 7,$(MESA_ANDROID_MAJOR_VERSION)), \ | $(if $(filter 7,$(MESA_ANDROID_MAJOR_VERSION)), \ | ||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0308 -DMESA_LLVM_VERSION_PATCH=0)) \ | |||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0308 -DMESA_LLVM_VERSION_STRING="3.8")) \ | |||||
$(if $(filter 8,$(MESA_ANDROID_MAJOR_VERSION)), \ | $(if $(filter 8,$(MESA_ANDROID_MAJOR_VERSION)), \ | ||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \ | |||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_STRING="3.9")) \ | |||||
$(if $(filter P,$(MESA_ANDROID_MAJOR_VERSION)), \ | $(if $(filter P,$(MESA_ANDROID_MAJOR_VERSION)), \ | ||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_PATCH=0)) \ | |||||
$(eval LOCAL_CFLAGS += -DHAVE_LLVM=0x0309 -DMESA_LLVM_VERSION_STRING="3.9")) \ | |||||
$(eval LOCAL_SHARED_LIBRARIES += libLLVM) | $(eval LOCAL_SHARED_LIBRARIES += libLLVM) | ||||
endef | endef | ||||
dnl Set defines and buildtime variables only when using LLVM. | dnl Set defines and buildtime variables only when using LLVM. | ||||
dnl | dnl | ||||
if test "x$enable_llvm" = xyes; then | if test "x$enable_llvm" = xyes; then | ||||
DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH" | |||||
DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_STRING=\\\"$LLVM_VERSION\\\"" | |||||
LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags` | LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags` | ||||
LLVM_CFLAGS=$LLVM_CPPFLAGS # CPPFLAGS seem to be sufficient | LLVM_CFLAGS=$LLVM_CPPFLAGS # CPPFLAGS seem to be sufficient |
endif | endif | ||||
if with_llvm | if with_llvm | ||||
_llvm_version = dep_llvm.version().split('.') | _llvm_version = dep_llvm.version().split('.') | ||||
# 3 digits versions in LLVM only started from 3.4.1 on | |||||
if dep_llvm.version().version_compare('>= 3.4.1') | |||||
_llvm_patch = _llvm_version[2] | |||||
else | |||||
_llvm_patch = '0' | |||||
endif | |||||
pre_args += [ | pre_args += [ | ||||
'-DHAVE_LLVM=0x0@0@0@1@'.format(_llvm_version[0], _llvm_version[1]), | '-DHAVE_LLVM=0x0@0@0@1@'.format(_llvm_version[0], _llvm_version[1]), | ||||
'-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_patch), | |||||
'-DMESA_LLVM_VERSION_STRING="@0@"'.format(dep_llvm.version()), | |||||
] | ] | ||||
# LLVM can be built without rtti, turning off rtti changes the ABI of C++ | # LLVM can be built without rtti, turning off rtti changes the ABI of C++ |
radv_dump_device_name(struct radv_device *device, FILE *f) | radv_dump_device_name(struct radv_device *device, FILE *f) | ||||
{ | { | ||||
struct radeon_info *info = &device->physical_device->rad_info; | struct radeon_info *info = &device->physical_device->rad_info; | ||||
char llvm_string[32] = {}, kernel_version[128] = {}; | |||||
char kernel_version[128] = {}; | |||||
struct utsname uname_data; | struct utsname uname_data; | ||||
const char *chip_name; | const char *chip_name; | ||||
snprintf(kernel_version, sizeof(kernel_version), | snprintf(kernel_version, sizeof(kernel_version), | ||||
" / %s", uname_data.release); | " / %s", uname_data.release); | ||||
snprintf(llvm_string, sizeof(llvm_string), | |||||
", LLVM %i.%i.%i", (HAVE_LLVM >> 8) & 0xff, | |||||
HAVE_LLVM & 0xff, MESA_LLVM_VERSION_PATCH); | |||||
fprintf(f, "Device name: %s (%s DRM %i.%i.%i%s%s)\n\n", | |||||
fprintf(f, "Device name: %s (%s DRM %i.%i.%i%s, LLVM " | |||||
MESA_LLVM_VERSION_STRING ")\n\n", | |||||
chip_name, device->physical_device->name, | chip_name, device->physical_device->name, | ||||
info->drm_major, info->drm_minor, info->drm_patchlevel, | info->drm_major, info->drm_minor, info->drm_patchlevel, | ||||
kernel_version, llvm_string); | |||||
kernel_version); | |||||
} | } | ||||
static bool | static bool |
radv_get_device_name(enum radeon_family family, char *name, size_t name_len) | radv_get_device_name(enum radeon_family family, char *name, size_t name_len) | ||||
{ | { | ||||
const char *chip_string; | const char *chip_string; | ||||
char llvm_string[32] = {}; | |||||
switch (family) { | switch (family) { | ||||
case CHIP_TAHITI: chip_string = "AMD RADV TAHITI"; break; | case CHIP_TAHITI: chip_string = "AMD RADV TAHITI"; break; | ||||
default: chip_string = "AMD RADV unknown"; break; | default: chip_string = "AMD RADV unknown"; break; | ||||
} | } | ||||
snprintf(llvm_string, sizeof(llvm_string), | |||||
" (LLVM %i.%i.%i)", (HAVE_LLVM >> 8) & 0xff, | |||||
HAVE_LLVM & 0xff, MESA_LLVM_VERSION_PATCH); | |||||
snprintf(name, name_len, "%s%s", chip_string, llvm_string); | |||||
snprintf(name, name_len, "%s (LLVM " MESA_LLVM_VERSION_STRING ")", chip_string); | |||||
} | } | ||||
static uint64_t | static uint64_t | ||||
memset(driver_props->driverInfo, 0, VK_MAX_DRIVER_INFO_SIZE_KHR); | memset(driver_props->driverInfo, 0, VK_MAX_DRIVER_INFO_SIZE_KHR); | ||||
snprintf(driver_props->driverInfo, VK_MAX_DRIVER_INFO_SIZE_KHR, | snprintf(driver_props->driverInfo, VK_MAX_DRIVER_INFO_SIZE_KHR, | ||||
"Mesa " PACKAGE_VERSION MESA_GIT_SHA1 | "Mesa " PACKAGE_VERSION MESA_GIT_SHA1 | ||||
" (LLVM %d.%d.%d)", | |||||
(HAVE_LLVM >> 8) & 0xff, HAVE_LLVM & 0xff, | |||||
MESA_LLVM_VERSION_PATCH); | |||||
" (LLVM " MESA_LLVM_VERSION_STRING ")"); | |||||
driver_props->conformanceVersion = (VkConformanceVersionKHR) { | driver_props->conformanceVersion = (VkConformanceVersionKHR) { | ||||
.major = 1, | .major = 1, |
#include <llvm-c/TargetMachine.h> | #include <llvm-c/TargetMachine.h> | ||||
#endif | #endif | ||||
#ifndef MESA_LLVM_VERSION_PATCH | |||||
#define MESA_LLVM_VERSION_PATCH 0 | |||||
#endif | |||||
struct r600_multi_fence { | struct r600_multi_fence { | ||||
struct pipe_reference reference; | struct pipe_reference reference; | ||||
struct pipe_fence_handle *gfx; | struct pipe_fence_handle *gfx; | ||||
bool r600_common_screen_init(struct r600_common_screen *rscreen, | bool r600_common_screen_init(struct r600_common_screen *rscreen, | ||||
struct radeon_winsys *ws) | struct radeon_winsys *ws) | ||||
{ | { | ||||
char family_name[32] = {}, llvm_string[32] = {}, kernel_version[128] = {}; | |||||
char family_name[32] = {}, kernel_version[128] = {}; | |||||
struct utsname uname_data; | struct utsname uname_data; | ||||
const char *chip_name; | const char *chip_name; | ||||
snprintf(kernel_version, sizeof(kernel_version), | snprintf(kernel_version, sizeof(kernel_version), | ||||
" / %s", uname_data.release); | " / %s", uname_data.release); | ||||
if (HAVE_LLVM > 0) { | |||||
snprintf(llvm_string, sizeof(llvm_string), | |||||
", LLVM %i.%i.%i", (HAVE_LLVM >> 8) & 0xff, | |||||
HAVE_LLVM & 0xff, MESA_LLVM_VERSION_PATCH); | |||||
} | |||||
snprintf(rscreen->renderer_string, sizeof(rscreen->renderer_string), | snprintf(rscreen->renderer_string, sizeof(rscreen->renderer_string), | ||||
"%s (%sDRM %i.%i.%i%s%s)", | |||||
"%s (%sDRM %i.%i.%i%s" | |||||
#if HAVE_LLVM > 0 | |||||
", LLVM " MESA_LLVM_VERSION_STRING | |||||
#endif | |||||
")", | |||||
chip_name, family_name, rscreen->info.drm_major, | chip_name, family_name, rscreen->info.drm_major, | ||||
rscreen->info.drm_minor, rscreen->info.drm_patchlevel, | rscreen->info.drm_minor, rscreen->info.drm_patchlevel, | ||||
kernel_version, llvm_string); | |||||
kernel_version); | |||||
rscreen->b.get_name = r600_get_name; | rscreen->b.get_name = r600_get_name; | ||||
rscreen->b.get_vendor = r600_get_vendor; | rscreen->b.get_vendor = r600_get_vendor; |
", %s", uname_data.release); | ", %s", uname_data.release); | ||||
snprintf(sscreen->renderer_string, sizeof(sscreen->renderer_string), | snprintf(sscreen->renderer_string, sizeof(sscreen->renderer_string), | ||||
"%s (%sDRM %i.%i.%i%s, LLVM %i.%i.%i)", | |||||
"%s (%sDRM %i.%i.%i%s, LLVM " MESA_LLVM_VERSION_STRING ")", | |||||
first_name, second_name, sscreen->info.drm_major, | first_name, second_name, sscreen->info.drm_major, | ||||
sscreen->info.drm_minor, sscreen->info.drm_patchlevel, | sscreen->info.drm_minor, sscreen->info.drm_patchlevel, | ||||
kernel_version, | |||||
(HAVE_LLVM >> 8) & 0xff, | |||||
HAVE_LLVM & 0xff, | |||||
MESA_LLVM_VERSION_PATCH); | |||||
kernel_version); | |||||
} | } | ||||
void si_init_screen_get_functions(struct si_screen *sscreen) | void si_init_screen_get_functions(struct si_screen *sscreen) |