julia: support clang, set llvm NDEBUG correctly (#30800)
This commit is contained in:
		
							
								
								
									
										25
									
								
								var/spack/repos/builtin/packages/julia/gcc-ifdef.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								var/spack/repos/builtin/packages/julia/gcc-ifdef.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| From 3193c8f2596711c1feb8e655ec391050e0e78ed0 Mon Sep 17 00:00:00 2001 | ||||
| From: Harmen Stoppels <harmenstoppels@gmail.com> | ||||
| Date: Mon, 23 May 2022 16:58:23 +0200 | ||||
| Subject: [PATCH] Guard GCC-specific macros with _COMPILER_GCC_ | ||||
|  | ||||
| --- | ||||
|  src/julia_internal.h | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
|  | ||||
| diff --git a/src/julia_internal.h b/src/julia_internal.h | ||||
| index fbded19..32d038b 100644 | ||||
| --- a/src/julia_internal.h | ||||
| +++ b/src/julia_internal.h | ||||
| @@ -392,7 +392,7 @@ jl_svec_t *jl_perm_symsvec(size_t n, ...); | ||||
|   | ||||
|  // this sizeof(__VA_ARGS__) trick can't be computed until C11, but that only matters to Clang in some situations | ||||
|  #if !defined(__clang_analyzer__) && !(defined(JL_ASAN_ENABLED) || defined(JL_TSAN_ENABLED)) | ||||
| -#ifdef __GNUC__ | ||||
| +#ifdef _COMPILER_GCC_ | ||||
|  #define jl_perm_symsvec(n, ...) \ | ||||
|      (jl_perm_symsvec)(__extension__({                                         \ | ||||
|              static_assert(                                                    \ | ||||
| --  | ||||
| 2.25.1 | ||||
|  | ||||
							
								
								
									
										30
									
								
								var/spack/repos/builtin/packages/julia/llvm-NDEBUG.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								var/spack/repos/builtin/packages/julia/llvm-NDEBUG.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| From 4ec1970178606127fd8bbffa763f135ca0f12ee3 Mon Sep 17 00:00:00 2001 | ||||
| From: Harmen Stoppels <harmenstoppels@gmail.com> | ||||
| Date: Tue, 24 May 2022 14:03:48 +0200 | ||||
| Subject: [PATCH] llvm: add NDEBUG when assertion mode is off | ||||
|  | ||||
| `llvm-config --cxxflags` unfortunately does not set `-DNDEBUG`, which | ||||
| Julia needs to set correctly when including LLVM header files. | ||||
| --- | ||||
|  src/Makefile | 5 +++++ | ||||
|  1 file changed, 5 insertions(+) | ||||
|  | ||||
| diff --git a/src/Makefile b/src/Makefile | ||||
| index 1a9af2fa7c..766fd2945f 100644 | ||||
| --- a/src/Makefile | ||||
| +++ b/src/Makefile | ||||
| @@ -98,6 +98,11 @@ PUBLIC_HEADER_TARGETS := $(addprefix $(build_includedir)/julia/,$(notdir $(PUBLI | ||||
|  LLVM_LDFLAGS := $(shell $(LLVM_CONFIG_HOST) --ldflags) | ||||
|  LLVM_CXXFLAGS := $(shell $(LLVM_CONFIG_HOST) --cxxflags) | ||||
|   | ||||
| +# llvm-config --cxxflags does not return -DNDEBUG | ||||
| +ifeq ($(shell $(LLVM_CONFIG_HOST) --assertion-mode),OFF) | ||||
| +LLVM_CXXFLAGS += -DNDEBUG | ||||
| +endif | ||||
| + | ||||
|  ifeq ($(JULIACODEGEN),LLVM) | ||||
|  ifneq ($(USE_SYSTEM_LLVM),0) | ||||
|  LLVMLINK += $(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --libs --system-libs) | ||||
| --  | ||||
| 2.25.1 | ||||
|  | ||||
| @@ -130,6 +130,12 @@ class Julia(MakefilePackage): | ||||
|     # only applied to libllvm when it's vendored by julia). | ||||
|     patch('revert-fix-rpath-of-libllvm.patch', when='@1.7.0:1.7') | ||||
| 
 | ||||
|     # Allow build with clang. | ||||
|     patch('gcc-ifdef.patch', when='@1.7.0:1.7') | ||||
| 
 | ||||
|     # Make sure Julia sets -DNDEBUG when including LLVM header files. | ||||
|     patch('llvm-NDEBUG.patch', when='@1.7.0:1.7') | ||||
| 
 | ||||
|     def patch(self): | ||||
|         # The system-libwhich-libblastrampoline.patch causes a rebuild of docs as it | ||||
|         # touches the main Makefile, so we reset the a/m-time to doc/_build's. | ||||
| @@ -215,6 +221,9 @@ def edit(self, spec, prefix): | ||||
|                 '1' if spec.variants['precompile'].value else '0'), | ||||
|         ] | ||||
| 
 | ||||
|         options.append('USEGCC:={}'.format('1' if '%gcc' in spec else '0')) | ||||
|         options.append('USECLANG:={}'.format('1' if '%clang' in spec else '0')) | ||||
| 
 | ||||
|         # libm or openlibm? | ||||
|         if spec.variants['openlibm'].value: | ||||
|             options.append('USE_SYSTEM_LIBM=0') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Harmen Stoppels
					Harmen Stoppels