mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 11:40:10 +01:00
ac/llvm: handle static/shared llvm init separately
Having a single init function works as expected for shared llvm, but
when using a static llvm only one llvm will get initialized.
This commit introduces 2 separate init function:
- shared llvm = single public init function
- static llvm = one init function for each module using llvm
Fixes: 50d20dc055 ("ac/llvm: export ac_init_llvm_once in targets")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3376
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6253>
This commit is contained in:
parent
916110e17f
commit
b7c04b1790
11 changed files with 28 additions and 9 deletions
|
|
@ -97,7 +97,7 @@ endif
|
||||||
define mesa-build-with-llvm
|
define mesa-build-with-llvm
|
||||||
$(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7), \
|
$(if $(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7), \
|
||||||
$(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \
|
$(warning Unsupported LLVM version in Android $(MESA_ANDROID_MAJOR_VERSION)),) \
|
||||||
$(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DMESA_LLVM_VERSION_STRING=\"3.9\") \
|
$(eval LOCAL_CFLAGS += -DLLVM_AVAILABLE -DLLVM_IS_SHARED=1 -DMESA_LLVM_VERSION_STRING=\"3.9\") \
|
||||||
$(eval LOCAL_SHARED_LIBRARIES += libLLVM)
|
$(eval LOCAL_SHARED_LIBRARIES += libLLVM)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1513,6 +1513,7 @@ endif
|
||||||
if with_llvm
|
if with_llvm
|
||||||
pre_args += '-DLLVM_AVAILABLE'
|
pre_args += '-DLLVM_AVAILABLE'
|
||||||
pre_args += '-DMESA_LLVM_VERSION_STRING="@0@"'.format(dep_llvm.version())
|
pre_args += '-DMESA_LLVM_VERSION_STRING="@0@"'.format(dep_llvm.version())
|
||||||
|
pre_args += '-DLLVM_IS_SHARED=@0@'.format(_shared_llvm.to_int())
|
||||||
|
|
||||||
# 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++
|
||||||
# programs, so we need to build all C++ code in mesa without rtti as well to
|
# programs, so we need to build all C++ code in mesa without rtti as well to
|
||||||
|
|
|
||||||
|
|
@ -78,12 +78,29 @@ static void ac_init_llvm_target()
|
||||||
LLVMParseCommandLineOptions(ARRAY_SIZE(argv), argv, NULL);
|
LLVMParseCommandLineOptions(ARRAY_SIZE(argv), argv, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
PUBLIC void ac_init_llvm_once(void)
|
PUBLIC void ac_init_shared_llvm_once(void)
|
||||||
{
|
{
|
||||||
static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;
|
static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;
|
||||||
call_once(&ac_init_llvm_target_once_flag, ac_init_llvm_target);
|
call_once(&ac_init_llvm_target_once_flag, ac_init_llvm_target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !LLVM_IS_SHARED
|
||||||
|
static once_flag ac_init_static_llvm_target_once_flag = ONCE_FLAG_INIT;
|
||||||
|
static void ac_init_static_llvm_once(void)
|
||||||
|
{
|
||||||
|
call_once(&ac_init_static_llvm_target_once_flag, ac_init_llvm_target);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void ac_init_llvm_once(void)
|
||||||
|
{
|
||||||
|
#if LLVM_IS_SHARED
|
||||||
|
ac_init_shared_llvm_once();
|
||||||
|
#else
|
||||||
|
ac_init_static_llvm_once();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static LLVMTargetRef ac_get_llvm_target(const char *triple)
|
static LLVMTargetRef ac_get_llvm_target(const char *triple)
|
||||||
{
|
{
|
||||||
LLVMTargetRef target = NULL;
|
LLVMTargetRef target = NULL;
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,7 @@ ac_count_scratch_private_memory(LLVMValueRef function);
|
||||||
|
|
||||||
LLVMTargetLibraryInfoRef ac_create_target_library_info(const char *triple);
|
LLVMTargetLibraryInfoRef ac_create_target_library_info(const char *triple);
|
||||||
void ac_dispose_target_library_info(LLVMTargetLibraryInfoRef library_info);
|
void ac_dispose_target_library_info(LLVMTargetLibraryInfoRef library_info);
|
||||||
|
void ac_init_shared_llvm_once(void); /* Do not use directly, use ac_init_llvm_once */
|
||||||
void ac_init_llvm_once(void);
|
void ac_init_llvm_once(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ if with_symbols_check
|
||||||
args : [
|
args : [
|
||||||
'--lib', libvulkan_radeon,
|
'--lib', libvulkan_radeon,
|
||||||
'--symbols-file', vulkan_icd_symbols,
|
'--symbols-file', vulkan_icd_symbols,
|
||||||
'--ignore-symbol', 'ac_init_llvm_once',
|
'--ignore-symbol', 'ac_init_shared_llvm_once',
|
||||||
symbols_check_args,
|
symbols_check_args,
|
||||||
],
|
],
|
||||||
suite : ['amd'],
|
suite : ['amd'],
|
||||||
|
|
|
||||||
|
|
@ -2,5 +2,5 @@
|
||||||
nouveau_drm_screen_create;
|
nouveau_drm_screen_create;
|
||||||
radeon_drm_winsys_create;
|
radeon_drm_winsys_create;
|
||||||
amdgpu_winsys_create;
|
amdgpu_winsys_create;
|
||||||
ac_init_llvm_once;
|
ac_init_shared_llvm_once;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
radeon_drm_winsys_create;
|
radeon_drm_winsys_create;
|
||||||
amdgpu_winsys_create;
|
amdgpu_winsys_create;
|
||||||
fd_drm_screen_create;
|
fd_drm_screen_create;
|
||||||
ac_init_llvm_once;
|
ac_init_shared_llvm_once;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
# due to LLVM being initialized multiple times.
|
# due to LLVM being initialized multiple times.
|
||||||
radeon_drm_winsys_create;
|
radeon_drm_winsys_create;
|
||||||
amdgpu_winsys_create;
|
amdgpu_winsys_create;
|
||||||
ac_init_llvm_once;
|
ac_init_shared_llvm_once;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
# due to LLVM being initialized multiple times.
|
# due to LLVM being initialized multiple times.
|
||||||
radeon_drm_winsys_create;
|
radeon_drm_winsys_create;
|
||||||
amdgpu_winsys_create;
|
amdgpu_winsys_create;
|
||||||
ac_init_llvm_once;
|
ac_init_shared_llvm_once;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
# due to LLVM being initialized multiple times.
|
# due to LLVM being initialized multiple times.
|
||||||
radeon_drm_winsys_create;
|
radeon_drm_winsys_create;
|
||||||
amdgpu_winsys_create;
|
amdgpu_winsys_create;
|
||||||
ac_init_llvm_once;
|
ac_init_shared_llvm_once;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
nouveau_drm_screen_create;
|
nouveau_drm_screen_create;
|
||||||
radeon_drm_winsys_create;
|
radeon_drm_winsys_create;
|
||||||
amdgpu_winsys_create;
|
amdgpu_winsys_create;
|
||||||
ac_init_llvm_once;
|
ac_init_shared_llvm_once;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue