From 0c9370ce722dc3b5f2c349f6d7a9f68466841783 Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Wed, 25 May 2022 14:42:14 +0200 Subject: julia: support clang, set llvm NDEBUG correctly (#30800) --- .../repos/builtin/packages/julia/gcc-ifdef.patch | 25 ++++++++++++++++++ .../repos/builtin/packages/julia/llvm-NDEBUG.patch | 30 ++++++++++++++++++++++ var/spack/repos/builtin/packages/julia/package.py | 9 +++++++ 3 files changed, 64 insertions(+) create mode 100644 var/spack/repos/builtin/packages/julia/gcc-ifdef.patch create mode 100644 var/spack/repos/builtin/packages/julia/llvm-NDEBUG.patch diff --git a/var/spack/repos/builtin/packages/julia/gcc-ifdef.patch b/var/spack/repos/builtin/packages/julia/gcc-ifdef.patch new file mode 100644 index 0000000000..51ed450b7f --- /dev/null +++ b/var/spack/repos/builtin/packages/julia/gcc-ifdef.patch @@ -0,0 +1,25 @@ +From 3193c8f2596711c1feb8e655ec391050e0e78ed0 Mon Sep 17 00:00:00 2001 +From: Harmen Stoppels +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 + diff --git a/var/spack/repos/builtin/packages/julia/llvm-NDEBUG.patch b/var/spack/repos/builtin/packages/julia/llvm-NDEBUG.patch new file mode 100644 index 0000000000..1bdbd728fa --- /dev/null +++ b/var/spack/repos/builtin/packages/julia/llvm-NDEBUG.patch @@ -0,0 +1,30 @@ +From 4ec1970178606127fd8bbffa763f135ca0f12ee3 Mon Sep 17 00:00:00 2001 +From: Harmen Stoppels +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 + diff --git a/var/spack/repos/builtin/packages/julia/package.py b/var/spack/repos/builtin/packages/julia/package.py index d3fbd85c7a..6ef36a421b 100644 --- a/var/spack/repos/builtin/packages/julia/package.py +++ b/var/spack/repos/builtin/packages/julia/package.py @@ -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 @@ class Julia(MakefilePackage): '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') -- cgit v1.2.3-70-g09d2