forked from pool/julia
Accepting request 1132207 from home:uncomfyhalomacro:branches:science
- Remove debug package. It's not created. Still we won't strip debug symbols from julia as it will cause issues. - Declare that it conflicts with juliaup. - Update tagged release banner message that says it is an unofficial experimental build - Add mbedtls-hardcoded-libs.patch - Update description - Add llvm-link-shared.patch - Add openlibm.patch - Add libblastrampoline-hardcoded-libs.patch - Add use-system-libuv-correctly.patch - Use sed to replace julia-hardcoded-libs.patch - Add patch julia-suitesparse-7.patch - Update julia-env-script-interpreter.patch - Add new patches * 21d4c2f1.patch * 959902f1.patch * e08e1444.patch * f11bfc6c.patch * julia-hardcoded-libs.patch * julia-libgit2-1.7.patch * julia-libunwind-1.9.patch - Update to julia version 1.9.4 ** CHANGELOG TOO HUGE SINCE 1.6.3 ** See https://github.com/JuliaLang/julia/compare/v1.6.3...v1.9.4 - Remove a lot of old patches * julia-fix_doc_build.patch * julia-fix-mbedtls-build-failure-gcc-11.patch * julia-fix-task-build-failure-gcc-11.patch OBS-URL: https://build.opensuse.org/request/show/1132207 OBS-URL: https://build.opensuse.org/package/show/science/julia?expand=0&rev=114
This commit is contained in:
parent
bd3f4624e7
commit
e15cadffe0
411
21d4c2f1.patch
Normal file
411
21d4c2f1.patch
Normal file
@ -0,0 +1,411 @@
|
|||||||
|
From 921f1b9d5e9389756826898d6907c0a2829efa51 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Prem Chintalapudi <prem.chintalapudi@gmail.com>
|
||||||
|
Date: Wed, 10 May 2023 09:58:04 -0400
|
||||||
|
Subject: [PATCH 1/7] Fix remarks emissions from simdloop pass
|
||||||
|
|
||||||
|
Co-authored-by: Valentin Churavy <v.churavy@gmail.com>
|
||||||
|
---
|
||||||
|
src/llvm-simdloop.cpp | 18 +++++++++++-------
|
||||||
|
1 file changed, 11 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/llvm-simdloop.cpp b/src/llvm-simdloop.cpp
|
||||||
|
index 3c94b226ad7b8..233f61c9fea6b 100644
|
||||||
|
--- a/src/llvm-simdloop.cpp
|
||||||
|
+++ b/src/llvm-simdloop.cpp
|
||||||
|
@@ -165,11 +165,13 @@ static bool markLoopInfo(Module &M, Function *marker, function_ref<LoopInfo &(Fu
|
||||||
|
Instruction *I = cast<Instruction>(U);
|
||||||
|
ToDelete.push_back(I);
|
||||||
|
|
||||||
|
- LoopInfo &LI = GetLI(*I->getParent()->getParent());
|
||||||
|
- Loop *L = LI.getLoopFor(I->getParent());
|
||||||
|
- I->removeFromParent();
|
||||||
|
- if (!L)
|
||||||
|
+ BasicBlock *B = I->getParent();
|
||||||
|
+ LoopInfo &LI = GetLI(*B->getParent());
|
||||||
|
+ Loop *L = LI.getLoopFor(B);
|
||||||
|
+ if (!L) {
|
||||||
|
+ I->removeFromParent();
|
||||||
|
continue;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
LLVM_DEBUG(dbgs() << "LSL: loopinfo marker found\n");
|
||||||
|
bool simd = false;
|
||||||
|
@@ -258,6 +260,8 @@ static bool markLoopInfo(Module &M, Function *marker, function_ref<LoopInfo &(Fu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ I->removeFromParent();
|
||||||
|
+
|
||||||
|
Changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
From b2273d39542fe803f7d9da03ef57af7e815db68c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Valentin Churavy <v.churavy@gmail.com>
|
||||||
|
Date: Sun, 30 Apr 2023 20:19:08 -0400
|
||||||
|
Subject: [PATCH 3/7] Do not yet mandate opaque pointers for LLVM 15
|
||||||
|
|
||||||
|
---
|
||||||
|
src/codegen.cpp | 11 +++++++++++
|
||||||
|
src/jitlayers.cpp | 3 ---
|
||||||
|
src/llvm-version.h | 2 +-
|
||||||
|
3 files changed, 12 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/codegen.cpp b/src/codegen.cpp
|
||||||
|
index a9d2cb0c60333..2e3f7eb2bf7bb 100644
|
||||||
|
--- a/src/codegen.cpp
|
||||||
|
+++ b/src/codegen.cpp
|
||||||
|
@@ -9083,6 +9083,17 @@ extern "C" void jl_init_llvm(void)
|
||||||
|
if (clopt && clopt->getNumOccurrences() == 0)
|
||||||
|
cl::ProvidePositionalOption(clopt, "4", 1);
|
||||||
|
|
||||||
|
+#if JL_LLVM_VERSION >= 150000
|
||||||
|
+ clopt = llvmopts.lookup("opaque-pointers");
|
||||||
|
+ if (clopt && clopt->getNumOccurrences() == 0) {
|
||||||
|
+#ifdef JL_LLVM_OPAQUE_POINTERS
|
||||||
|
+ cl::ProvidePositionalOption(clopt, "true", 1);
|
||||||
|
+#else
|
||||||
|
+ cl::ProvidePositionalOption(clopt, "false", 1);
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
jl_ExecutionEngine = new JuliaOJIT();
|
||||||
|
|
||||||
|
bool jl_using_gdb_jitevents = false;
|
||||||
|
diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp
|
||||||
|
index 643f0468457ae..ef7e98bb7852a 100644
|
||||||
|
--- a/src/jitlayers.cpp
|
||||||
|
+++ b/src/jitlayers.cpp
|
||||||
|
@@ -1306,9 +1306,6 @@ JuliaOJIT::JuliaOJIT()
|
||||||
|
JD(ES.createBareJITDylib("JuliaOJIT")),
|
||||||
|
ContextPool([](){
|
||||||
|
auto ctx = std::make_unique<LLVMContext>();
|
||||||
|
-#ifdef JL_LLVM_OPAQUE_POINTERS
|
||||||
|
- ctx->setOpaquePointers(true);
|
||||||
|
-#endif
|
||||||
|
return orc::ThreadSafeContext(std::move(ctx));
|
||||||
|
}),
|
||||||
|
#ifdef JL_USE_JITLINK
|
||||||
|
diff --git a/src/llvm-version.h b/src/llvm-version.h
|
||||||
|
index a3f3774b6dc15..819ec1c88976b 100644
|
||||||
|
--- a/src/llvm-version.h
|
||||||
|
+++ b/src/llvm-version.h
|
||||||
|
@@ -14,7 +14,7 @@
|
||||||
|
#error Only LLVM versions >= 12.0.0 are supported by Julia
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#if JL_LLVM_VERSION >= 150000
|
||||||
|
+#if JL_LLVM_VERSION >= 160000
|
||||||
|
#define JL_LLVM_OPAQUE_POINTERS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
From 190f84180883eb498cb7b7ed27e10af9a6c62863 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Valentin Churavy <v.churavy@gmail.com>
|
||||||
|
Date: Wed, 26 Apr 2023 20:48:45 -0400
|
||||||
|
Subject: [PATCH 4/7] Upgrade Julia to LLVM 15.0.7+5
|
||||||
|
|
||||||
|
Co-authored-by: Gabriel Baraldi <baraldigabriel@gmail.com>
|
||||||
|
---
|
||||||
|
Make.inc | 2 +-
|
||||||
|
deps/checksums/clang | 224 ++++++++--------
|
||||||
|
deps/checksums/lld | 224 ++++++++--------
|
||||||
|
deps/checksums/llvm | 452 +++++++++++++++-----------------
|
||||||
|
deps/clang.version | 2 +-
|
||||||
|
deps/lld.version | 2 +-
|
||||||
|
deps/llvm-tools.version | 4 +-
|
||||||
|
deps/llvm.version | 9 +-
|
||||||
|
stdlib/LLD_jll/Project.toml | 4 +-
|
||||||
|
stdlib/libLLVM_jll/Project.toml | 2 +-
|
||||||
|
10 files changed, 446 insertions(+), 479 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Make.inc b/Make.inc
|
||||||
|
index 4d564f057a3da..35b0657de5aa2 100644
|
||||||
|
--- a/Make.inc
|
||||||
|
+++ b/Make.inc
|
||||||
|
@@ -480,7 +480,7 @@ FC := $(CROSS_COMPILE)gfortran
|
||||||
|
ifeq ($(OS), Darwin)
|
||||||
|
APPLE_ARCH := $(shell uname -m)
|
||||||
|
ifneq ($(APPLE_ARCH),arm64)
|
||||||
|
-MACOSX_VERSION_MIN := 10.10
|
||||||
|
+MACOSX_VERSION_MIN := 10.14
|
||||||
|
else
|
||||||
|
MACOSX_VERSION_MIN := 11.0
|
||||||
|
endif
|
||||||
|
diff --git a/src/codegen.cpp b/src/codegen.cpp
|
||||||
|
index 2e3f7eb2bf7bb..07e7b15afc165 100644
|
||||||
|
--- a/src/codegen.cpp
|
||||||
|
+++ b/src/codegen.cpp
|
||||||
|
@@ -9169,7 +9169,9 @@ extern "C" JL_DLLEXPORT void jl_init_codegen_impl(void)
|
||||||
|
extern "C" JL_DLLEXPORT void jl_teardown_codegen_impl() JL_NOTSAFEPOINT
|
||||||
|
{
|
||||||
|
// output LLVM timings and statistics
|
||||||
|
- jl_ExecutionEngine->printTimers();
|
||||||
|
+ // Guard against exits before we have initialized the ExecutionEngine
|
||||||
|
+ if (jl_ExecutionEngine)
|
||||||
|
+ jl_ExecutionEngine->printTimers();
|
||||||
|
PrintStatistics();
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/jitlayers.h b/src/jitlayers.h
|
||||||
|
index bbbcbe73f1e54..4c6921cd42dab 100644
|
||||||
|
--- a/src/jitlayers.h
|
||||||
|
+++ b/src/jitlayers.h
|
||||||
|
@@ -97,10 +97,8 @@ struct OptimizationOptions {
|
||||||
|
};
|
||||||
|
|
||||||
|
// LLVM's new pass manager is scheduled to replace the legacy pass manager
|
||||||
|
-// for middle-end IR optimizations. However, we have not qualified the new
|
||||||
|
-// pass manager on our optimization pipeline yet, so this remains an optional
|
||||||
|
-// define
|
||||||
|
-#if defined(HAS_SANITIZER) && JL_LLVM_VERSION >= 150000
|
||||||
|
+// for middle-end IR optimizations.
|
||||||
|
+#if JL_LLVM_VERSION >= 150000
|
||||||
|
#define JL_USE_NEW_PM
|
||||||
|
#endif
|
||||||
|
|
||||||
|
diff --git a/src/pipeline.cpp b/src/pipeline.cpp
|
||||||
|
index 4403653a9d8e4..7e61171d288e6 100644
|
||||||
|
--- a/src/pipeline.cpp
|
||||||
|
+++ b/src/pipeline.cpp
|
||||||
|
@@ -361,7 +361,8 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
|
||||||
|
{
|
||||||
|
FunctionPassManager FPM;
|
||||||
|
FPM.addPass(SROAPass());
|
||||||
|
- FPM.addPass(InstSimplifyPass());
|
||||||
|
+ // SROA can duplicate PHI nodes which can block LowerSIMD
|
||||||
|
+ FPM.addPass(InstCombinePass());
|
||||||
|
FPM.addPass(JumpThreadingPass());
|
||||||
|
FPM.addPass(CorrelatedValuePropagationPass());
|
||||||
|
FPM.addPass(ReassociatePass());
|
||||||
|
@@ -384,7 +385,7 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
|
||||||
|
#endif
|
||||||
|
LPM2.addPass(LICMPass(LICMOptions()));
|
||||||
|
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
|
||||||
|
- LPM2.addPass(SimpleLoopUnswitchPass(true, true));
|
||||||
|
+ LPM2.addPass(SimpleLoopUnswitchPass(false, true));
|
||||||
|
LPM2.addPass(LICMPass(LICMOptions()));
|
||||||
|
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
|
||||||
|
//LICM needs MemorySSA now, so we must use it
|
||||||
|
@@ -397,11 +398,11 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
|
||||||
|
LPM.addPass(LoopIdiomRecognizePass());
|
||||||
|
LPM.addPass(IndVarSimplifyPass());
|
||||||
|
LPM.addPass(LoopDeletionPass());
|
||||||
|
+ LPM.addPass(LoopFullUnrollPass());
|
||||||
|
invokeLoopOptimizerEndCallbacks(LPM, PB, O);
|
||||||
|
//We don't know if the loop end callbacks support MSSA
|
||||||
|
FPM.addPass(createFunctionToLoopPassAdaptor(std::move(LPM), /*UseMemorySSA = */false));
|
||||||
|
}
|
||||||
|
- FPM.addPass(LoopUnrollPass(LoopUnrollOptions().setRuntime(false)));
|
||||||
|
JULIA_PASS(FPM.addPass(AllocOptPass()));
|
||||||
|
FPM.addPass(SROAPass());
|
||||||
|
FPM.addPass(InstSimplifyPass());
|
||||||
|
|
||||||
|
From 2ddbb5abb93045eeb4513e223c86e9c25fa774a4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Valentin Churavy <v.churavy@gmail.com>
|
||||||
|
Date: Wed, 26 Apr 2023 20:49:16 -0400
|
||||||
|
Subject: [PATCH 6/7] Fix tests and static analyzer for LLVM 15
|
||||||
|
|
||||||
|
Co-authored-by: Gabriel Baraldi <baraldigabriel@gmail.com>
|
||||||
|
Co-authored-by: Prem Chintalapudi <prem.chintalapudi@gmail.com>
|
||||||
|
---
|
||||||
|
src/llvm-alloc-opt.cpp | 3 ++
|
||||||
|
src/llvm-late-gc-lowering.cpp | 1 +
|
||||||
|
src/llvm-lower-handlers.cpp | 1 +
|
||||||
|
src/llvm-multiversioning.cpp | 3 ++
|
||||||
|
src/llvm-ptls.cpp | 2 +
|
||||||
|
test/clangsa/MissingRoots.c | 3 ++
|
||||||
|
test/cmdlineargs.jl | 10 ++--
|
||||||
|
test/llvmpasses/pipeline-o2-broadcast.jl | 68 ++++++++++++++----------
|
||||||
|
test/llvmpasses/pipeline-o2.jl | 6 +--
|
||||||
|
9 files changed, 62 insertions(+), 35 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/llvm-alloc-opt.cpp b/src/llvm-alloc-opt.cpp
|
||||||
|
index 1a524cbe8d419..bb6de67f347ff 100644
|
||||||
|
--- a/src/llvm-alloc-opt.cpp
|
||||||
|
+++ b/src/llvm-alloc-opt.cpp
|
||||||
|
@@ -1138,9 +1138,12 @@ void Optimizer::splitOnStack(CallInst *orig_inst)
|
||||||
|
ref->setOrdering(AtomicOrdering::NotAtomic);
|
||||||
|
operands.push_back(ref);
|
||||||
|
}
|
||||||
|
+#ifndef __clang_analyzer__
|
||||||
|
+ // FIXME: SA finds "Called C++ object pointer is null" inside the LLVM code.
|
||||||
|
auto new_call = builder.CreateCall(pass.gc_preserve_begin_func, operands);
|
||||||
|
new_call->takeName(call);
|
||||||
|
call->replaceAllUsesWith(new_call);
|
||||||
|
+#endif
|
||||||
|
call->eraseFromParent();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
diff --git a/src/llvm-late-gc-lowering.cpp b/src/llvm-late-gc-lowering.cpp
|
||||||
|
index a836ff1361768..ac70685e7431b 100644
|
||||||
|
--- a/src/llvm-late-gc-lowering.cpp
|
||||||
|
+++ b/src/llvm-late-gc-lowering.cpp
|
||||||
|
@@ -1262,6 +1262,7 @@ static bool isLoadFromConstGV(LoadInst *LI, bool &task_local, PhiSet *seen)
|
||||||
|
// We only emit single slot GV in codegen
|
||||||
|
// but LLVM global merging can change the pointer operands to GEPs/bitcasts
|
||||||
|
auto load_base = LI->getPointerOperand()->stripInBoundsOffsets();
|
||||||
|
+ assert(load_base); // Static analyzer
|
||||||
|
auto gv = dyn_cast<GlobalVariable>(load_base);
|
||||||
|
if (isTBAA(LI->getMetadata(LLVMContext::MD_tbaa),
|
||||||
|
{"jtbaa_immut", "jtbaa_const", "jtbaa_datatype"})) {
|
||||||
|
diff --git a/src/llvm-lower-handlers.cpp b/src/llvm-lower-handlers.cpp
|
||||||
|
index 919128769019b..39a36bfc3ba76 100644
|
||||||
|
--- a/src/llvm-lower-handlers.cpp
|
||||||
|
+++ b/src/llvm-lower-handlers.cpp
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
|
||||||
|
#include <llvm/ADT/DepthFirstIterator.h>
|
||||||
|
#include <llvm/ADT/Statistic.h>
|
||||||
|
+#include <llvm/ADT/Triple.h>
|
||||||
|
#include <llvm/Analysis/CFG.h>
|
||||||
|
#include <llvm/IR/BasicBlock.h>
|
||||||
|
#include <llvm/IR/Constants.h>
|
||||||
|
diff --git a/src/llvm-multiversioning.cpp b/src/llvm-multiversioning.cpp
|
||||||
|
index 21a090724802a..cdba03047a4b7 100644
|
||||||
|
--- a/src/llvm-multiversioning.cpp
|
||||||
|
+++ b/src/llvm-multiversioning.cpp
|
||||||
|
@@ -14,11 +14,13 @@
|
||||||
|
#include <llvm/Pass.h>
|
||||||
|
#include <llvm/ADT/BitVector.h>
|
||||||
|
#include <llvm/ADT/Statistic.h>
|
||||||
|
+#include <llvm/ADT/Triple.h>
|
||||||
|
#include <llvm/IR/Module.h>
|
||||||
|
#include <llvm/IR/LegacyPassManager.h>
|
||||||
|
#include <llvm/IR/Function.h>
|
||||||
|
#include <llvm/IR/Instructions.h>
|
||||||
|
#include <llvm/IR/Constants.h>
|
||||||
|
+#include <llvm/IR/Dominators.h>
|
||||||
|
#include <llvm/IR/LLVMContext.h>
|
||||||
|
#include <llvm/Analysis/LoopInfo.h>
|
||||||
|
#include <llvm/Analysis/CallGraph.h>
|
||||||
|
@@ -779,6 +781,7 @@ static Value *rewrite_inst_use(const Stack& stack, Type *T_size, Value *replace,
|
||||||
|
replace = inst;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
+ assert(val);
|
||||||
|
unsigned nargs = val->getNumOperands();
|
||||||
|
args.resize(nargs);
|
||||||
|
for (unsigned j = 0; j < nargs; j++) {
|
||||||
|
diff --git a/src/llvm-ptls.cpp b/src/llvm-ptls.cpp
|
||||||
|
index 8174832b3cebf..a628710916327 100644
|
||||||
|
--- a/src/llvm-ptls.cpp
|
||||||
|
+++ b/src/llvm-ptls.cpp
|
||||||
|
@@ -9,6 +9,7 @@
|
||||||
|
#include <llvm-c/Types.h>
|
||||||
|
|
||||||
|
#include <llvm/Pass.h>
|
||||||
|
+#include <llvm/ADT/Triple.h>
|
||||||
|
#include <llvm/IR/Module.h>
|
||||||
|
#include <llvm/IR/LegacyPassManager.h>
|
||||||
|
#include <llvm/IR/Function.h>
|
||||||
|
@@ -161,6 +162,7 @@ void LowerPTLS::fix_pgcstack_use(CallInst *pgcstack, Function *pgcstack_getter,
|
||||||
|
SmallVector<uint32_t, 2> Weights{9, 1};
|
||||||
|
TerminatorInst *fastTerm;
|
||||||
|
TerminatorInst *slowTerm;
|
||||||
|
+ assert(pgcstack->getType()); // Static analyzer
|
||||||
|
auto cmp = new ICmpInst(phi, CmpInst::ICMP_NE, pgcstack, Constant::getNullValue(pgcstack->getType()));
|
||||||
|
SplitBlockAndInsertIfThenElse(cmp, phi, &fastTerm, &slowTerm,
|
||||||
|
MDB.createBranchWeights(Weights));
|
||||||
|
diff --git a/test/clangsa/MissingRoots.c b/test/clangsa/MissingRoots.c
|
||||||
|
index f0b32c54bc7b8..0ff5e633622ce 100644
|
||||||
|
--- a/test/clangsa/MissingRoots.c
|
||||||
|
+++ b/test/clangsa/MissingRoots.c
|
||||||
|
@@ -352,6 +352,9 @@ void assoc_exact_broken(jl_value_t **args, size_t n, int8_t offs, size_t world)
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
+// declare
|
||||||
|
+jl_typemap_level_t *jl_new_typemap_level(void);
|
||||||
|
+
|
||||||
|
void assoc_exact_ok(jl_value_t *args1, jl_value_t **args, size_t n, int8_t offs, size_t world) {
|
||||||
|
jl_typemap_level_t *cache = jl_new_typemap_level();
|
||||||
|
JL_GC_PUSH1(&cache);
|
||||||
|
diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl
|
||||||
|
index 389b195d97935..1d04926ef23af 100644
|
||||||
|
--- a/test/cmdlineargs.jl
|
||||||
|
+++ b/test/cmdlineargs.jl
|
||||||
|
@@ -188,10 +188,12 @@ let exename = `$(Base.julia_cmd()) --startup-file=no --color=no`
|
||||||
|
@test contains(v[2], r"enable-tail-merge + = 1")
|
||||||
|
@test isempty(v[3])
|
||||||
|
end
|
||||||
|
- @testset let v = readchomperrors(setenv(`$exename -e 0`, "JULIA_LLVM_ARGS" => "-print-options -enable-tail-merge=1 -enable-tail-merge=1", "HOME" => homedir()))
|
||||||
|
- @test !v[1]
|
||||||
|
- @test isempty(v[2])
|
||||||
|
- @test v[3] == "julia: for the --enable-tail-merge option: may only occur zero or one times!"
|
||||||
|
+ if Base.libllvm_version < v"15" #LLVM over 15 doesn't care for multiple options
|
||||||
|
+ @testset let v = readchomperrors(setenv(`$exename -e 0`, "JULIA_LLVM_ARGS" => "-print-options -enable-tail-merge=1 -enable-tail-merge=1", "HOME" => homedir()))
|
||||||
|
+ @test !v[1]
|
||||||
|
+ @test isempty(v[2])
|
||||||
|
+ @test v[3] == "julia: for the --enable-tail-merge option: may only occur zero or one times!"
|
||||||
|
+ end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
diff --git a/test/llvmpasses/pipeline-o2.jl b/test/llvmpasses/pipeline-o2.jl
|
||||||
|
index 2996a44de62b3..fcb2161de7614 100644
|
||||||
|
--- a/test/llvmpasses/pipeline-o2.jl
|
||||||
|
+++ b/test/llvmpasses/pipeline-o2.jl
|
||||||
|
@@ -78,21 +78,21 @@ end
|
||||||
|
# COM: memset checks
|
||||||
|
|
||||||
|
# COM: INT64
|
||||||
|
-# ALL-LABEL: define nonnull {} addrspace(10)* @julia_zeros
|
||||||
|
+# ALL: define {{.*}} @julia_zeros
|
||||||
|
# ALL-NOT: bounds_error
|
||||||
|
# COM: memset is not used with bounds checks on (too late in the pipeline)
|
||||||
|
# BC_OFF: llvm.memset
|
||||||
|
# BC_AUTO: llvm.memset
|
||||||
|
|
||||||
|
# COM: INT32
|
||||||
|
-# ALL-LABEL: define nonnull {} addrspace(10)* @julia_zeros
|
||||||
|
+# ALL: define {{.*}} @julia_zeros
|
||||||
|
# ALL-NOT: bounds_error
|
||||||
|
# COM: memset is not used with bounds checks on (too late in the pipeline)
|
||||||
|
# BC_OFF: llvm.memset
|
||||||
|
# BC_AUTO: llvm.memset
|
||||||
|
|
||||||
|
# COM: INT16
|
||||||
|
-# ALL-LABEL: define nonnull {} addrspace(10)* @julia_zeros
|
||||||
|
+# ALL: define {{.*}} @julia_zeros
|
||||||
|
# ALL-NOT: bounds_error
|
||||||
|
# COM: memset is not used with bounds checks on (too late in the pipeline)
|
||||||
|
# BC_OFF: llvm.memset
|
||||||
|
|
||||||
|
From 77c13ad59364189386114b546a7482dbe2edf233 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Valentin Churavy <v.churavy@gmail.com>
|
||||||
|
Date: Wed, 10 May 2023 10:51:16 -0400
|
||||||
|
Subject: [PATCH 7/7] Reenable NonTrivial Loop Unswitch
|
||||||
|
|
||||||
|
---
|
||||||
|
src/codegen.cpp | 3 ---
|
||||||
|
src/pipeline.cpp | 2 +-
|
||||||
|
2 files changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/codegen.cpp b/src/codegen.cpp
|
||||||
|
index 07e7b15afc165..ae306d3d1cdb5 100644
|
||||||
|
--- a/src/codegen.cpp
|
||||||
|
+++ b/src/codegen.cpp
|
||||||
|
@@ -9073,9 +9073,6 @@ extern "C" void jl_init_llvm(void)
|
||||||
|
clopt = llvmopts.lookup("unswitch-threshold");
|
||||||
|
if (clopt->getNumOccurrences() == 0)
|
||||||
|
cl::ProvidePositionalOption(clopt, "100", 1);
|
||||||
|
- clopt = llvmopts.lookup("enable-unswitch-cost-multiplier");
|
||||||
|
- if (clopt->getNumOccurrences() == 0)
|
||||||
|
- cl::ProvidePositionalOption(clopt, "false", 1);
|
||||||
|
#endif
|
||||||
|
// if the patch adding this option has been applied, lower its limit to provide
|
||||||
|
// better DAGCombiner performance.
|
||||||
|
diff --git a/src/pipeline.cpp b/src/pipeline.cpp
|
||||||
|
index 7e61171d288e6..6e6a9a3c37d02 100644
|
||||||
|
--- a/src/pipeline.cpp
|
||||||
|
+++ b/src/pipeline.cpp
|
||||||
|
@@ -385,7 +385,7 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
|
||||||
|
#endif
|
||||||
|
LPM2.addPass(LICMPass(LICMOptions()));
|
||||||
|
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
|
||||||
|
- LPM2.addPass(SimpleLoopUnswitchPass(false, true));
|
||||||
|
+ LPM2.addPass(SimpleLoopUnswitchPass(/*NonTrivial*/true, true));
|
||||||
|
LPM2.addPass(LICMPass(LICMOptions()));
|
||||||
|
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
|
||||||
|
//LICM needs MemorySSA now, so we must use it
|
188
959902f1.patch
Normal file
188
959902f1.patch
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
From 959902f1c6099c1b513e29103b998545c16731fc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Valentin Churavy <vchuravy@users.noreply.github.com>
|
||||||
|
Date: Thu, 27 Apr 2023 16:27:09 -0400
|
||||||
|
Subject: [PATCH] Support both Float16 ABIs depending on LLVM and platform
|
||||||
|
(#49527)
|
||||||
|
|
||||||
|
There are two Float16 ABIs in the wild, one for platforms that have a
|
||||||
|
defing register and the original one where we used i16.
|
||||||
|
|
||||||
|
LLVM 15 follows GCC and uses the new ABI on x86/ARM but not PPC.
|
||||||
|
|
||||||
|
Co-authored-by: Gabriel Baraldi <baraldigabriel@gmail.com>
|
||||||
|
---
|
||||||
|
src/aotcompile.cpp | 11 +++++++--
|
||||||
|
src/codegen.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
src/jitlayers.cpp | 2 ++
|
||||||
|
src/llvm-version.h | 10 +++++++++
|
||||||
|
4 files changed, 77 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp
|
||||||
|
index 391c5d3df46fb..2a14e2a4fa0ab 100644
|
||||||
|
--- a/src/aotcompile.cpp
|
||||||
|
+++ b/src/aotcompile.cpp
|
||||||
|
@@ -494,6 +494,7 @@ static void reportWriterError(const ErrorInfoBase &E)
|
||||||
|
jl_safe_printf("ERROR: failed to emit output file %s\n", err.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
+#if JULIA_FLOAT16_ABI == 1
|
||||||
|
static void injectCRTAlias(Module &M, StringRef name, StringRef alias, FunctionType *FT)
|
||||||
|
{
|
||||||
|
Function *target = M.getFunction(alias);
|
||||||
|
@@ -510,7 +511,8 @@ static void injectCRTAlias(Module &M, StringRef name, StringRef alias, FunctionT
|
||||||
|
auto val = builder.CreateCall(target, CallArgs);
|
||||||
|
builder.CreateRet(val);
|
||||||
|
}
|
||||||
|
-
|
||||||
|
+#endif
|
||||||
|
+void emitFloat16Wrappers(Module &M, bool external);
|
||||||
|
|
||||||
|
// takes the running content that has collected in the shadow module and dump it to disk
|
||||||
|
// this builds the object file portion of the sysimage files for fast startup
|
||||||
|
@@ -1003,6 +1006,7 @@ static void add_output_impl(Module &M, TargetMachine &SourceTM, std::string *out
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inject_crt) {
|
||||||
|
+#if JULIA_FLOAT16_ABI == 1
|
||||||
|
// We would like to emit an alias or an weakref alias to redirect these symbols
|
||||||
|
// but LLVM doesn't let us emit a GlobalAlias to a declaration...
|
||||||
|
// So for now we inject a definition of these functions that calls our runtime
|
||||||
|
@@ -1018,6 +1023,9 @@ static void add_output_impl(Module &M, TargetMachine &SourceTM, std::string *out
|
||||||
|
FunctionType::get(Type::getHalfTy(Context), { Type::getFloatTy(Context) }, false));
|
||||||
|
injectCRTAlias(M, "__truncdfhf2", "julia__truncdfhf2",
|
||||||
|
FunctionType::get(Type::getHalfTy(Context), { Type::getDoubleTy(Context) }, false));
|
||||||
|
+#else
|
||||||
|
+ emitFloat16Wrappers(M, false);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#if defined(_OS_WINDOWS_)
|
||||||
|
// Windows expect that the function `_DllMainStartup` is present in an dll.
|
||||||
|
diff --git a/src/codegen.cpp b/src/codegen.cpp
|
||||||
|
index 329c4b452a9dc..f4b0fd518cd39 100644
|
||||||
|
--- a/src/codegen.cpp
|
||||||
|
+++ b/src/codegen.cpp
|
||||||
|
@@ -5818,6 +5818,7 @@ static void emit_cfunc_invalidate(
|
||||||
|
prepare_call_in(gf_thunk->getParent(), jlapplygeneric_func));
|
||||||
|
}
|
||||||
|
|
||||||
|
+#include <iostream>
|
||||||
|
static Function* gen_cfun_wrapper(
|
||||||
|
Module *into, jl_codegen_params_t ¶ms,
|
||||||
|
const function_sig_t &sig, jl_value_t *ff, const char *aliasname,
|
||||||
|
@@ -8704,6 +8705,58 @@ static JuliaVariable *julia_const_gv(jl_value_t *val)
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
+// Handle FLOAT16 ABI v2
|
||||||
|
+#if JULIA_FLOAT16_ABI == 2
|
||||||
|
+static void makeCastCall(Module &M, StringRef wrapperName, StringRef calledName, FunctionType *FTwrapper, FunctionType *FTcalled, bool external)
|
||||||
|
+{
|
||||||
|
+ Function *calledFun = M.getFunction(calledName);
|
||||||
|
+ if (!calledFun) {
|
||||||
|
+ calledFun = Function::Create(FTcalled, Function::ExternalLinkage, calledName, M);
|
||||||
|
+ }
|
||||||
|
+ auto linkage = external ? Function::ExternalLinkage : Function::InternalLinkage;
|
||||||
|
+ auto wrapperFun = Function::Create(FTwrapper, linkage, wrapperName, M);
|
||||||
|
+ wrapperFun->addFnAttr(Attribute::AlwaysInline);
|
||||||
|
+ llvm::IRBuilder<> builder(BasicBlock::Create(M.getContext(), "top", wrapperFun));
|
||||||
|
+ SmallVector<Value *, 4> CallArgs;
|
||||||
|
+ if (wrapperFun->arg_size() != calledFun->arg_size()){
|
||||||
|
+ llvm::errs() << "FATAL ERROR: Can't match wrapper to called function";
|
||||||
|
+ abort();
|
||||||
|
+ }
|
||||||
|
+ for (auto wrapperArg = wrapperFun->arg_begin(), calledArg = calledFun->arg_begin();
|
||||||
|
+ wrapperArg != wrapperFun->arg_end() && calledArg != calledFun->arg_end(); ++wrapperArg, ++calledArg)
|
||||||
|
+ {
|
||||||
|
+ CallArgs.push_back(builder.CreateBitCast(wrapperArg, calledArg->getType()));
|
||||||
|
+ }
|
||||||
|
+ auto val = builder.CreateCall(calledFun, CallArgs);
|
||||||
|
+ auto retval = builder.CreateBitCast(val,wrapperFun->getReturnType());
|
||||||
|
+ builder.CreateRet(retval);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void emitFloat16Wrappers(Module &M, bool external)
|
||||||
|
+{
|
||||||
|
+ auto &ctx = M.getContext();
|
||||||
|
+ makeCastCall(M, "__gnu_h2f_ieee", "julia__gnu_h2f_ieee", FunctionType::get(Type::getFloatTy(ctx), { Type::getHalfTy(ctx) }, false),
|
||||||
|
+ FunctionType::get(Type::getFloatTy(ctx), { Type::getInt16Ty(ctx) }, false), external);
|
||||||
|
+ makeCastCall(M, "__extendhfsf2", "julia__gnu_h2f_ieee", FunctionType::get(Type::getFloatTy(ctx), { Type::getHalfTy(ctx) }, false),
|
||||||
|
+ FunctionType::get(Type::getFloatTy(ctx), { Type::getInt16Ty(ctx) }, false), external);
|
||||||
|
+ makeCastCall(M, "__gnu_f2h_ieee", "julia__gnu_f2h_ieee", FunctionType::get(Type::getHalfTy(ctx), { Type::getFloatTy(ctx) }, false),
|
||||||
|
+ FunctionType::get(Type::getInt16Ty(ctx), { Type::getFloatTy(ctx) }, false), external);
|
||||||
|
+ makeCastCall(M, "__truncsfhf2", "julia__gnu_f2h_ieee", FunctionType::get(Type::getHalfTy(ctx), { Type::getFloatTy(ctx) }, false),
|
||||||
|
+ FunctionType::get(Type::getInt16Ty(ctx), { Type::getFloatTy(ctx) }, false), external);
|
||||||
|
+ makeCastCall(M, "__truncdfhf2", "julia__truncdfhf2", FunctionType::get(Type::getHalfTy(ctx), { Type::getDoubleTy(ctx) }, false),
|
||||||
|
+ FunctionType::get(Type::getInt16Ty(ctx), { Type::getDoubleTy(ctx) }, false), external);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void init_f16_funcs(void)
|
||||||
|
+{
|
||||||
|
+ auto ctx = jl_ExecutionEngine->acquireContext();
|
||||||
|
+ auto TSM = jl_create_ts_module("F16Wrappers", ctx, imaging_default());
|
||||||
|
+ auto aliasM = TSM.getModuleUnlocked();
|
||||||
|
+ emitFloat16Wrappers(*aliasM, true);
|
||||||
|
+ jl_ExecutionEngine->addModule(std::move(TSM));
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
static void init_jit_functions(void)
|
||||||
|
{
|
||||||
|
add_named_global(jlstack_chk_guard_var, &__stack_chk_guard);
|
||||||
|
@@ -8942,6 +8995,9 @@ extern "C" JL_DLLEXPORT void jl_init_codegen_impl(void)
|
||||||
|
jl_init_llvm();
|
||||||
|
// Now that the execution engine exists, initialize all modules
|
||||||
|
init_jit_functions();
|
||||||
|
+#if JULIA_FLOAT16_ABI == 2
|
||||||
|
+ init_f16_funcs();
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" JL_DLLEXPORT void jl_teardown_codegen_impl() JL_NOTSAFEPOINT
|
||||||
|
diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp
|
||||||
|
index 37302e8ca2ace..b3ec102821858 100644
|
||||||
|
--- a/src/jitlayers.cpp
|
||||||
|
+++ b/src/jitlayers.cpp
|
||||||
|
@@ -1383,6 +1383,7 @@ JuliaOJIT::JuliaOJIT()
|
||||||
|
|
||||||
|
JD.addToLinkOrder(GlobalJD, orc::JITDylibLookupFlags::MatchExportedSymbolsOnly);
|
||||||
|
|
||||||
|
+#if JULIA_FLOAT16_ABI == 1
|
||||||
|
orc::SymbolAliasMap jl_crt = {
|
||||||
|
{ mangle("__gnu_h2f_ieee"), { mangle("julia__gnu_h2f_ieee"), JITSymbolFlags::Exported } },
|
||||||
|
{ mangle("__extendhfsf2"), { mangle("julia__gnu_h2f_ieee"), JITSymbolFlags::Exported } },
|
||||||
|
@@ -1391,6 +1392,7 @@ JuliaOJIT::JuliaOJIT()
|
||||||
|
{ mangle("__truncdfhf2"), { mangle("julia__truncdfhf2"), JITSymbolFlags::Exported } }
|
||||||
|
};
|
||||||
|
cantFail(GlobalJD.define(orc::symbolAliases(jl_crt)));
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#ifdef MSAN_EMUTLS_WORKAROUND
|
||||||
|
orc::SymbolMap msan_crt;
|
||||||
|
diff --git a/src/llvm-version.h b/src/llvm-version.h
|
||||||
|
index 4e15e787b7de8..a3f3774b6dc15 100644
|
||||||
|
--- a/src/llvm-version.h
|
||||||
|
+++ b/src/llvm-version.h
|
||||||
|
@@ -2,6 +2,7 @@
|
||||||
|
|
||||||
|
#include <llvm/Config/llvm-config.h>
|
||||||
|
#include "julia_assert.h"
|
||||||
|
+#include "platform.h"
|
||||||
|
|
||||||
|
// The LLVM version used, JL_LLVM_VERSION, is represented as a 5-digit integer
|
||||||
|
// of the form ABBCC, where A is the major version, B is minor, and C is patch.
|
||||||
|
@@ -17,6 +18,15 @@
|
||||||
|
#define JL_LLVM_OPAQUE_POINTERS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+// Pre GCC 12 libgcc defined the ABI for Float16->Float32
|
||||||
|
+// to take an i16. GCC 12 silently changed the ABI to now pass
|
||||||
|
+// Float16 in Float32 registers.
|
||||||
|
+#if JL_LLVM_VERSION < 150000 || defined(_CPU_PPC64_) || defined(_CPU_PPC_)
|
||||||
|
+#define JULIA_FLOAT16_ABI 1
|
||||||
|
+#else
|
||||||
|
+#define JULIA_FLOAT16_ABI 2
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ >= 9)
|
||||||
|
// Added in GCC 9, this warning is annoying
|
304
e08e1444.patch
Normal file
304
e08e1444.patch
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
From e08e14449fdec30d83ae2b9f0d6d1f4a9acf0b75 Mon Sep 17 00:00:00 2001
|
||||||
|
From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com>
|
||||||
|
Date: Mon, 17 Apr 2023 19:37:59 +0000
|
||||||
|
Subject: [PATCH] Bring in newpm (new pass manager) updates to master (#47038)
|
||||||
|
|
||||||
|
* Workaround missing ASAN global
|
||||||
|
* Add alias analysis at O2 instead of O3
|
||||||
|
* Disable runtime unrolling
|
||||||
|
* Make SimpleLoopUnswitch act like LoopUnswitch
|
||||||
|
* Add --time-passes support
|
||||||
|
* Only add verification passes in debug mode
|
||||||
|
* Hide assertion function
|
||||||
|
---
|
||||||
|
src/codegen.cpp | 11 ++++++++++-
|
||||||
|
src/jitlayers.cpp | 49 ++++++++++++++++++++++++++++++++++++-----------
|
||||||
|
src/jitlayers.h | 17 ++++++++++++----
|
||||||
|
src/pipeline.cpp | 27 ++++++++++++++------------
|
||||||
|
4 files changed, 76 insertions(+), 28 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/codegen.cpp b/src/codegen.cpp
|
||||||
|
index b6b86ba4442e1..fb8cefe5eb44f 100644
|
||||||
|
--- a/src/codegen.cpp
|
||||||
|
+++ b/src/codegen.cpp
|
||||||
|
@@ -8838,6 +8838,15 @@ extern "C" void jl_init_llvm(void)
|
||||||
|
clopt = llvmopts.lookup("enable-tail-merge"); // NOO TOUCHIE; NO TOUCH! See #922
|
||||||
|
if (clopt->getNumOccurrences() == 0)
|
||||||
|
cl::ProvidePositionalOption(clopt, "0", 1);
|
||||||
|
+#ifdef JL_USE_NEW_PM
|
||||||
|
+ // For parity with LoopUnswitch
|
||||||
|
+ clopt = llvmopts.lookup("unswitch-threshold");
|
||||||
|
+ if (clopt->getNumOccurrences() == 0)
|
||||||
|
+ cl::ProvidePositionalOption(clopt, "100", 1);
|
||||||
|
+ clopt = llvmopts.lookup("enable-unswitch-cost-multiplier");
|
||||||
|
+ if (clopt->getNumOccurrences() == 0)
|
||||||
|
+ cl::ProvidePositionalOption(clopt, "false", 1);
|
||||||
|
+#endif
|
||||||
|
// if the patch adding this option has been applied, lower its limit to provide
|
||||||
|
// better DAGCombiner performance.
|
||||||
|
clopt = llvmopts.lookup("combiner-store-merge-dependence-limit");
|
||||||
|
@@ -8916,7 +8925,7 @@ extern "C" JL_DLLEXPORT void jl_init_codegen_impl(void)
|
||||||
|
extern "C" JL_DLLEXPORT void jl_teardown_codegen_impl() JL_NOTSAFEPOINT
|
||||||
|
{
|
||||||
|
// output LLVM timings and statistics
|
||||||
|
- reportAndResetTimings();
|
||||||
|
+ jl_ExecutionEngine->printTimers();
|
||||||
|
PrintStatistics();
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp
|
||||||
|
index c7e202b98efab..29665d4e420b9 100644
|
||||||
|
--- a/src/jitlayers.cpp
|
||||||
|
+++ b/src/jitlayers.cpp
|
||||||
|
@@ -1103,6 +1103,8 @@ namespace {
|
||||||
|
std::unique_ptr<TargetMachine> TM;
|
||||||
|
int optlevel;
|
||||||
|
PMCreator(TargetMachine &TM, int optlevel) : TM(cantFail(createJTMBFromTM(TM, optlevel).createTargetMachine())), optlevel(optlevel) {}
|
||||||
|
+ // overload for newpm compatibility
|
||||||
|
+ PMCreator(TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &) : PMCreator(TM, optlevel) {}
|
||||||
|
PMCreator(const PMCreator &other) : PMCreator(*other.TM, other.optlevel) {}
|
||||||
|
PMCreator(PMCreator &&other) : TM(std::move(other.TM)), optlevel(other.optlevel) {}
|
||||||
|
friend void swap(PMCreator &self, PMCreator &other) {
|
||||||
|
@@ -1128,16 +1131,21 @@ namespace {
|
||||||
|
struct PMCreator {
|
||||||
|
orc::JITTargetMachineBuilder JTMB;
|
||||||
|
OptimizationLevel O;
|
||||||
|
- PMCreator(TargetMachine &TM, int optlevel) : JTMB(createJTMBFromTM(TM, optlevel)), O(getOptLevel(optlevel)) {}
|
||||||
|
+ std::vector<std::function<void()>> &printers;
|
||||||
|
+ PMCreator(TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &printers) JL_NOTSAFEPOINT : JTMB(createJTMBFromTM(TM, optlevel)), O(getOptLevel(optlevel)), printers(printers) {}
|
||||||
|
|
||||||
|
auto operator()() {
|
||||||
|
- return std::make_unique<NewPM>(cantFail(JTMB.createTargetMachine()), O);
|
||||||
|
+ auto NPM = std::make_unique<NewPM>(cantFail(JTMB.createTargetMachine()), O);
|
||||||
|
+ printers.push_back([NPM = NPM.get()]() JL_NOTSAFEPOINT {
|
||||||
|
+ NPM->printTimers();
|
||||||
|
+ });
|
||||||
|
+ return NPM;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct OptimizerT {
|
||||||
|
- OptimizerT(TargetMachine &TM, int optlevel) : optlevel(optlevel), PMs(PMCreator(TM, optlevel)) {}
|
||||||
|
+ OptimizerT(TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &printers) : optlevel(optlevel), PMs(PMCreator(TM, optlevel, printers)) {}
|
||||||
|
|
||||||
|
OptimizerResultT operator()(orc::ThreadSafeModule TSM, orc::MaterializationResponsibility &R) {
|
||||||
|
TSM.withModuleDo([&](Module &M) {
|
||||||
|
@@ -1247,10 +1255,14 @@ llvm::DataLayout jl_create_datalayout(TargetMachine &TM) {
|
||||||
|
return jl_data_layout;
|
||||||
|
}
|
||||||
|
|
||||||
|
-JuliaOJIT::PipelineT::PipelineT(orc::ObjectLayer &BaseLayer, TargetMachine &TM, int optlevel)
|
||||||
|
+JuliaOJIT::PipelineT::PipelineT(orc::ObjectLayer &BaseLayer, TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &PrintLLVMTimers)
|
||||||
|
: CompileLayer(BaseLayer.getExecutionSession(), BaseLayer,
|
||||||
|
std::make_unique<CompilerT>(orc::irManglingOptionsFromTargetOptions(TM.Options), TM, optlevel)),
|
||||||
|
- OptimizeLayer(CompileLayer.getExecutionSession(), CompileLayer, OptimizerT(TM, optlevel)) {}
|
||||||
|
+ OptimizeLayer(CompileLayer.getExecutionSession(), CompileLayer, OptimizerT(TM, optlevel, PrintLLVMTimers)) {}
|
||||||
|
+
|
||||||
|
+#ifdef _COMPILER_ASAN_ENABLED_
|
||||||
|
+int64_t ___asan_globals_registered;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
JuliaOJIT::JuliaOJIT()
|
||||||
|
: TM(createTargetMachine()),
|
||||||
|
@@ -1285,10 +1297,10 @@ JuliaOJIT::JuliaOJIT()
|
||||||
|
),
|
||||||
|
#endif
|
||||||
|
Pipelines{
|
||||||
|
- std::make_unique<PipelineT>(ObjectLayer, *TM, 0),
|
||||||
|
- std::make_unique<PipelineT>(ObjectLayer, *TM, 1),
|
||||||
|
- std::make_unique<PipelineT>(ObjectLayer, *TM, 2),
|
||||||
|
- std::make_unique<PipelineT>(ObjectLayer, *TM, 3),
|
||||||
|
+ std::make_unique<PipelineT>(ObjectLayer, *TM, 0, PrintLLVMTimers),
|
||||||
|
+ std::make_unique<PipelineT>(ObjectLayer, *TM, 1, PrintLLVMTimers),
|
||||||
|
+ std::make_unique<PipelineT>(ObjectLayer, *TM, 2, PrintLLVMTimers),
|
||||||
|
+ std::make_unique<PipelineT>(ObjectLayer, *TM, 3, PrintLLVMTimers),
|
||||||
|
},
|
||||||
|
OptSelLayer(Pipelines)
|
||||||
|
{
|
||||||
|
@@ -1393,6 +1405,11 @@ JuliaOJIT::JuliaOJIT()
|
||||||
|
reinterpret_cast<void *>(static_cast<uintptr_t>(msan_workaround::MSanTLS::origin)), JITSymbolFlags::Exported);
|
||||||
|
cantFail(GlobalJD.define(orc::absoluteSymbols(msan_crt)));
|
||||||
|
#endif
|
||||||
|
+#ifdef _COMPILER_ASAN_ENABLED_
|
||||||
|
+ orc::SymbolMap asan_crt;
|
||||||
|
+ asan_crt[mangle("___asan_globals_registered")] = JITEvaluatedSymbol::fromPointer(&___asan_globals_registered, JITSymbolFlags::Exported);
|
||||||
|
+ cantFail(JD.define(orc::absoluteSymbols(asan_crt)));
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
JuliaOJIT::~JuliaOJIT() = default;
|
||||||
|
@@ -1583,6 +1600,16 @@ size_t JuliaOJIT::getTotalBytes() const
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+void JuliaOJIT::printTimers()
|
||||||
|
+{
|
||||||
|
+#ifdef JL_USE_NEW_PM
|
||||||
|
+ for (auto &printer : PrintLLVMTimers) {
|
||||||
|
+ printer();
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+ reportAndResetTimings();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
JuliaOJIT *jl_ExecutionEngine;
|
||||||
|
|
||||||
|
// destructively move the contents of src into dest
|
||||||
|
diff --git a/src/jitlayers.h b/src/jitlayers.h
|
||||||
|
index d8c06df44176f..7f07034586c80 100644
|
||||||
|
--- a/src/jitlayers.h
|
||||||
|
+++ b/src/jitlayers.h
|
||||||
|
@@ -42,9 +42,7 @@
|
||||||
|
// and feature support (e.g. Windows, JITEventListeners for various profilers,
|
||||||
|
// etc.). Thus, we currently only use JITLink where absolutely required, that is,
|
||||||
|
// for Mac/aarch64.
|
||||||
|
-// #define JL_FORCE_JITLINK
|
||||||
|
-
|
||||||
|
-#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) || defined(JL_FORCE_JITLINK)
|
||||||
|
+#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) || defined(_COMPILER_ASAN_ENABLED_) || defined(JL_FORCE_JITLINK)
|
||||||
|
# if JL_LLVM_VERSION < 130000
|
||||||
|
# pragma message("On aarch64-darwin, LLVM version >= 13 is required for JITLink; fallback suffers from occasional segfaults")
|
||||||
|
# endif
|
||||||
|
@@ -91,6 +89,12 @@ struct OptimizationOptions {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
+// LLVM's new pass manager is scheduled to replace the legacy pass manager
|
||||||
|
+// for middle-end IR optimizations. However, we have not qualified the new
|
||||||
|
+// pass manager on our optimization pipeline yet, so this remains an optional
|
||||||
|
+// define
|
||||||
|
+// #define JL_USE_NEW_PM
|
||||||
|
+
|
||||||
|
struct NewPM {
|
||||||
|
std::unique_ptr<TargetMachine> TM;
|
||||||
|
StandardInstrumentations SI;
|
||||||
|
@@ -103,6 +107,8 @@ struct NewPM {
|
||||||
|
NewPM(std::unique_ptr<TargetMachine> TM, OptimizationLevel O, OptimizationOptions options = OptimizationOptions::defaults());
|
||||||
|
|
||||||
|
void run(Module &M);
|
||||||
|
+
|
||||||
|
+ void printTimers();
|
||||||
|
};
|
||||||
|
|
||||||
|
struct AnalysisManagers {
|
||||||
|
@@ -420,7 +426,7 @@ class JuliaOJIT {
|
||||||
|
std::unique_ptr<WNMutex> mutex;
|
||||||
|
};
|
||||||
|
struct PipelineT {
|
||||||
|
- PipelineT(orc::ObjectLayer &BaseLayer, TargetMachine &TM, int optlevel);
|
||||||
|
+ PipelineT(orc::ObjectLayer &BaseLayer, TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &PrintLLVMTimers);
|
||||||
|
CompileLayerT CompileLayer;
|
||||||
|
OptimizeLayerT OptimizeLayer;
|
||||||
|
};
|
||||||
|
@@ -490,6 +496,7 @@ class JuliaOJIT {
|
||||||
|
TargetIRAnalysis getTargetIRAnalysis() const;
|
||||||
|
|
||||||
|
size_t getTotalBytes() const;
|
||||||
|
+ void printTimers();
|
||||||
|
|
||||||
|
JITDebugInfoRegistry &getDebugInfoRegistry() JL_NOTSAFEPOINT {
|
||||||
|
return DebugRegistry;
|
||||||
|
@@ -522,6 +529,8 @@ class JuliaOJIT {
|
||||||
|
jl_locked_stream dump_compiles_stream;
|
||||||
|
jl_locked_stream dump_llvm_opt_stream;
|
||||||
|
|
||||||
|
+ std::vector<std::function<void()>> PrintLLVMTimers;
|
||||||
|
+
|
||||||
|
ResourcePool<orc::ThreadSafeContext, 0, std::queue<orc::ThreadSafeContext>> ContextPool;
|
||||||
|
|
||||||
|
#ifndef JL_USE_JITLINK
|
||||||
|
diff --git a/src/pipeline.cpp b/src/pipeline.cpp
|
||||||
|
index ae2b1c3202f04..4403653a9d8e4 100644
|
||||||
|
--- a/src/pipeline.cpp
|
||||||
|
+++ b/src/pipeline.cpp
|
||||||
|
@@ -146,7 +146,7 @@ namespace {
|
||||||
|
// Opts.Recover = CodeGenOpts.SanitizeRecover.has(Mask);
|
||||||
|
// Opts.UseAfterScope = CodeGenOpts.SanitizeAddressUseAfterScope;
|
||||||
|
// Opts.UseAfterReturn = CodeGenOpts.getSanitizeAddressUseAfterReturn();
|
||||||
|
- MPM.addPass(RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
|
||||||
|
+ // MPM.addPass(RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
|
||||||
|
// MPM.addPass(ModuleAddressSanitizerPass(
|
||||||
|
// Opts, UseGlobalGC, UseOdrIndicator, DestructorKind));
|
||||||
|
//Let's assume the defaults are actually fine for our purposes
|
||||||
|
@@ -173,11 +173,13 @@ namespace {
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
- void addVerificationPasses(ModulePassManager &MPM, bool llvm_only) {
|
||||||
|
+#ifdef JL_DEBUG_BUILD
|
||||||
|
+ static inline void addVerificationPasses(ModulePassManager &MPM, bool llvm_only) {
|
||||||
|
if (!llvm_only)
|
||||||
|
MPM.addPass(llvm::createModuleToFunctionPassAdaptor(GCInvariantVerifierPass()));
|
||||||
|
MPM.addPass(VerifierPass());
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
auto basicSimplifyCFGOptions() {
|
||||||
|
return SimplifyCFGOptions()
|
||||||
|
@@ -244,9 +246,9 @@ namespace {
|
||||||
|
|
||||||
|
//Use for O1 and below
|
||||||
|
void buildBasicPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationLevel O, OptimizationOptions options) {
|
||||||
|
-// #ifdef JL_DEBUG_BUILD
|
||||||
|
+#ifdef JL_DEBUG_BUILD
|
||||||
|
addVerificationPasses(MPM, options.llvm_only);
|
||||||
|
-// #endif
|
||||||
|
+#endif
|
||||||
|
invokePipelineStartCallbacks(MPM, PB, O);
|
||||||
|
MPM.addPass(ConstantMergePass());
|
||||||
|
if (!options.dump_native) {
|
||||||
|
@@ -320,9 +322,9 @@ static void buildBasicPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimiza
|
||||||
|
|
||||||
|
//Use for O2 and above
|
||||||
|
void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationLevel O, OptimizationOptions options) {
|
||||||
|
-// #ifdef JL_DEBUG_BUILD
|
||||||
|
+#ifdef JL_DEBUG_BUILD
|
||||||
|
addVerificationPasses(MPM, options.llvm_only);
|
||||||
|
-// #endif
|
||||||
|
+#endif
|
||||||
|
invokePipelineStartCallbacks(MPM, PB, O);
|
||||||
|
MPM.addPass(ConstantMergePass());
|
||||||
|
{
|
||||||
|
@@ -382,7 +384,7 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
|
||||||
|
#endif
|
||||||
|
LPM2.addPass(LICMPass(LICMOptions()));
|
||||||
|
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
|
||||||
|
- LPM2.addPass(SimpleLoopUnswitchPass());
|
||||||
|
+ LPM2.addPass(SimpleLoopUnswitchPass(true, true));
|
||||||
|
LPM2.addPass(LICMPass(LICMOptions()));
|
||||||
|
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
|
||||||
|
//LICM needs MemorySSA now, so we must use it
|
||||||
|
@@ -399,7 +401,7 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
|
||||||
|
//We don't know if the loop end callbacks support MSSA
|
||||||
|
FPM.addPass(createFunctionToLoopPassAdaptor(std::move(LPM), /*UseMemorySSA = */false));
|
||||||
|
}
|
||||||
|
- FPM.addPass(LoopUnrollPass());
|
||||||
|
+ FPM.addPass(LoopUnrollPass(LoopUnrollOptions().setRuntime(false)));
|
||||||
|
JULIA_PASS(FPM.addPass(AllocOptPass()));
|
||||||
|
FPM.addPass(SROAPass());
|
||||||
|
FPM.addPass(InstSimplifyPass());
|
||||||
|
@@ -541,11 +543,8 @@ PIC->addClassToPassName(decltype(CREATE_PASS)::name(), NAME);
|
||||||
|
// Register the AA manager first so that our version is the one used.
|
||||||
|
FAM.registerPass([&] JL_NOTSAFEPOINT {
|
||||||
|
AAManager AA;
|
||||||
|
- // TODO: Why are we only doing this for -O3?
|
||||||
|
- if (O.getSpeedupLevel() >= 3) {
|
||||||
|
- AA.registerFunctionAnalysis<BasicAA>();
|
||||||
|
- }
|
||||||
|
if (O.getSpeedupLevel() >= 2) {
|
||||||
|
+ AA.registerFunctionAnalysis<BasicAA>();
|
||||||
|
AA.registerFunctionAnalysis<ScopedNoAliasAA>();
|
||||||
|
AA.registerFunctionAnalysis<TypeBasedAA>();
|
||||||
|
}
|
||||||
|
@@ -603,6 +602,10 @@ void NewPM::run(Module &M) {
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
+void NewPM::printTimers() {
|
||||||
|
+ SI.getTimePasses().print();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
OptimizationLevel getOptLevel(int optlevel) {
|
||||||
|
switch (std::min(std::max(optlevel, 0), 3)) {
|
||||||
|
case 0:
|
95
f11bfc6c.patch
Normal file
95
f11bfc6c.patch
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
From f11bfc6ccad3e07fde4e40493635bd832d108477 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Valentin Churavy <vchuravy@users.noreply.github.com>
|
||||||
|
Date: Thu, 27 Apr 2023 16:29:25 -0400
|
||||||
|
Subject: [PATCH] Use NewPM for ASAN/MSAN (#49530)
|
||||||
|
|
||||||
|
Co-authored-by: Gabriel Baraldi <baraldigabriel@gmail.com>
|
||||||
|
Co-authored-by: Prem Chintalapudi <prem.chintalapudi@gmail.com>
|
||||||
|
---
|
||||||
|
src/aotcompile.cpp | 4 ++++
|
||||||
|
src/cgmemmgr.cpp | 4 ++--
|
||||||
|
src/jitlayers.h | 13 +++++++++++--
|
||||||
|
3 files changed, 17 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp
|
||||||
|
index 2a14e2a4fa0ab..b89cdf550171f 100644
|
||||||
|
--- a/src/aotcompile.cpp
|
||||||
|
+++ b/src/aotcompile.cpp
|
||||||
|
@@ -1775,6 +1775,7 @@ void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level,
|
||||||
|
PM->add(createCFGSimplificationPass(basicSimplifyCFGOptions));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+#if JL_LLVM_VERSION < 150000
|
||||||
|
#if defined(_COMPILER_ASAN_ENABLED_)
|
||||||
|
PM->add(createAddressSanitizerFunctionPass());
|
||||||
|
#endif
|
||||||
|
@@ -1783,6 +1784,7 @@ void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level,
|
||||||
|
#endif
|
||||||
|
#if defined(_COMPILER_TSAN_ENABLED_)
|
||||||
|
PM->add(createThreadSanitizerLegacyPassPass());
|
||||||
|
+#endif
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@@ -1934,6 +1936,7 @@ void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level,
|
||||||
|
}
|
||||||
|
PM->add(createCombineMulAddPass());
|
||||||
|
PM->add(createDivRemPairsPass());
|
||||||
|
+#if JL_LLVM_VERSION < 150000
|
||||||
|
#if defined(_COMPILER_ASAN_ENABLED_)
|
||||||
|
PM->add(createAddressSanitizerFunctionPass());
|
||||||
|
#endif
|
||||||
|
@@ -1943,6 +1946,7 @@ void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level,
|
||||||
|
#if defined(_COMPILER_TSAN_ENABLED_)
|
||||||
|
PM->add(createThreadSanitizerLegacyPassPass());
|
||||||
|
#endif
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// An LLVM module pass that just runs all julia passes in order. Useful for
|
||||||
|
diff --git a/src/cgmemmgr.cpp b/src/cgmemmgr.cpp
|
||||||
|
index 9f4d69137c0fd..15d28ff270c55 100644
|
||||||
|
--- a/src/cgmemmgr.cpp
|
||||||
|
+++ b/src/cgmemmgr.cpp
|
||||||
|
@@ -860,8 +860,8 @@ uint8_t *RTDyldMemoryManagerJL::allocateCodeSection(uintptr_t Size,
|
||||||
|
StringRef SectionName)
|
||||||
|
{
|
||||||
|
// allocating more than one code section can confuse libunwind.
|
||||||
|
-#if !defined(_COMPILER_MSAN_ENABLED_)
|
||||||
|
- // TODO: Figure out why msan needs this.
|
||||||
|
+#if !defined(_COMPILER_MSAN_ENABLED_) && !defined(_COMPILER_ASAN_ENABLED_)
|
||||||
|
+ // TODO: Figure out why msan and now asan too need this.
|
||||||
|
assert(!code_allocated);
|
||||||
|
code_allocated = true;
|
||||||
|
#endif
|
||||||
|
diff --git a/src/jitlayers.h b/src/jitlayers.h
|
||||||
|
index 7f07034586c80..f63f3a42842f1 100644
|
||||||
|
--- a/src/jitlayers.h
|
||||||
|
+++ b/src/jitlayers.h
|
||||||
|
@@ -42,7 +42,14 @@
|
||||||
|
// and feature support (e.g. Windows, JITEventListeners for various profilers,
|
||||||
|
// etc.). Thus, we currently only use JITLink where absolutely required, that is,
|
||||||
|
// for Mac/aarch64.
|
||||||
|
-#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) || defined(_COMPILER_ASAN_ENABLED_) || defined(JL_FORCE_JITLINK)
|
||||||
|
+// #define JL_FORCE_JITLINK
|
||||||
|
+
|
||||||
|
+#if defined(_COMPILER_ASAN_ENABLED_) || defined(_COMPILER_MSAN_ENABLED_) || defined(_COMPILER_TSAN_ENABLED_)
|
||||||
|
+# define HAS_SANITIZER
|
||||||
|
+#endif
|
||||||
|
+// The sanitizers don't play well with our memory manager
|
||||||
|
+
|
||||||
|
+#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) || defined(JL_FORCE_JITLINK) || JL_LLVM_VERSION >= 150000 && defined(HAS_SANITIZER)
|
||||||
|
# if JL_LLVM_VERSION < 130000
|
||||||
|
# pragma message("On aarch64-darwin, LLVM version >= 13 is required for JITLink; fallback suffers from occasional segfaults")
|
||||||
|
# endif
|
||||||
|
@@ -93,7 +100,9 @@ struct OptimizationOptions {
|
||||||
|
// for middle-end IR optimizations. However, we have not qualified the new
|
||||||
|
// pass manager on our optimization pipeline yet, so this remains an optional
|
||||||
|
// define
|
||||||
|
-// #define JL_USE_NEW_PM
|
||||||
|
+#if defined(HAS_SANITIZER) && JL_LLVM_VERSION >= 150000
|
||||||
|
+#define JL_USE_NEW_PM
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
struct NewPM {
|
||||||
|
std::unique_ptr<TargetMachine> TM;
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:29aad934582fb4c6dd9f9dd558ad649921f43bc7320eab54407fdf6dd3270a33
|
|
||||||
size 153730803
|
|
3
julia-1.9.4-full.tar.gz
Normal file
3
julia-1.9.4-full.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:61843b9647fd06d3b2994f3277a64de1cb5a5a5297d930b8c8e3bc0e93740024
|
||||||
|
size 294983229
|
@ -1,7 +1,6 @@
|
|||||||
Index: julia/contrib/julia-config.jl
|
diff -ruN a/contrib/julia-config.jl b/contrib/julia-config.jl
|
||||||
===================================================================
|
--- julia-1.9.4.orig/contrib/julia-config.jl 2023-12-08 06:25:53.680851149 +0800
|
||||||
--- julia.orig/contrib/julia-config.jl
|
+++ julia-1.9.4/contrib/julia-config.jl 2023-12-08 06:26:33.647145750 +0800
|
||||||
+++ julia/contrib/julia-config.jl
|
|
||||||
@@ -1,4 +1,4 @@
|
@@ -1,4 +1,4 @@
|
||||||
-#!/usr/bin/env julia
|
-#!/usr/bin/env julia
|
||||||
+#!/usr/bin/julia
|
+#!/usr/bin/julia
|
||||||
|
@ -1,351 +0,0 @@
|
|||||||
Index: julia-1.6.2/deps/mbedtls.mk
|
|
||||||
===================================================================
|
|
||||||
--- julia-1.6.2.orig/deps/mbedtls.mk
|
|
||||||
+++ julia-1.6.2/deps/mbedtls.mk
|
|
||||||
@@ -5,7 +5,9 @@ MBEDTLS_SRC = mbedtls-$(MBEDTLS_VER)
|
|
||||||
MBEDTLS_URL = https://github.com/ARMmbed/mbedtls/archive/v$(MBEDTLS_VER).tar.gz
|
|
||||||
|
|
||||||
MBEDTLS_OPTS := $(CMAKE_COMMON) -DUSE_SHARED_MBEDTLS_LIBRARY=ON \
|
|
||||||
- -DUSE_STATIC_MBEDTLS_LIBRARY=OFF -DENABLE_PROGRAMS=OFF -DCMAKE_BUILD_TYPE=Release
|
|
||||||
+ -DUSE_STATIC_MBEDTLS_LIBRARY=OFF -DENABLE_PROGRAMS=OFF -DCMAKE_BUILD_TYPE=Release \
|
|
||||||
+ -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -Wno-stringop-overflow -Wno-maybe-uninitialized" \
|
|
||||||
+ -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -Wno-stringop-overflow -Wno-maybe-uninitialized"
|
|
||||||
|
|
||||||
MBEDTLS_OPTS += -DENABLE_ZLIB_SUPPORT=OFF
|
|
||||||
ifeq ($(BUILD_OS),WINNT)
|
|
||||||
@@ -36,7 +38,8 @@ $(SRCCACHE)/$(MBEDTLS_SRC)/mbedtls-cmake
|
|
||||||
# This patch merged upstream shortly after MBedTLS's 2.25.0 minor release, so chances
|
|
||||||
# are it will be included at least in their next minor release (2.26.0?).
|
|
||||||
cd $(SRCCACHE)/$(MBEDTLS_SRC) && \
|
|
||||||
- patch -p1 -f < $(SRCDIR)/patches/mbedtls-cmake-findpy.patch
|
|
||||||
+ patch -p1 -f < $(SRCDIR)/patches/mbedtls-cmake-findpy.patch && \
|
|
||||||
+ patch -p1 -f < $(SRCDIR)/patches/mbedtls-fix-build-failure-on-gcc-11.patch
|
|
||||||
echo 1 > $@
|
|
||||||
|
|
||||||
$(BUILDDIR)/$(MBEDTLS_SRC)/build-configured: \
|
|
||||||
Index: julia-1.6.2/deps/patches/mbedtls-fix-build-failure-on-gcc-11.patch
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
|
||||||
+++ julia-1.6.2/deps/patches/mbedtls-fix-build-failure-on-gcc-11.patch
|
|
||||||
@@ -0,0 +1,321 @@
|
|
||||||
+From 2630f6720df59a2084220b1c06f4730a0a330ea0 Mon Sep 17 00:00:00 2001
|
|
||||||
+From: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+Date: Wed, 4 Nov 2020 01:55:38 -0300
|
|
||||||
+Subject: [PATCH 1/7] Fix build failure on gcc-11
|
|
||||||
+
|
|
||||||
+Function prototypes changed to use array parameters instead of
|
|
||||||
+pointers.
|
|
||||||
+
|
|
||||||
+Signed-off-by: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+---
|
|
||||||
+ library/ssl_tls.c | 6 +++---
|
|
||||||
+ 1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
+
|
|
||||||
+diff --git a/library/ssl_tls.c b/library/ssl_tls.c
|
|
||||||
+index 041578e68f7..ec890d7dcdc 100644
|
|
||||||
+--- a/library/ssl_tls.c
|
|
||||||
++++ b/library/ssl_tls.c
|
|
||||||
+@@ -680,20 +680,20 @@ static void ssl_calc_finished_ssl( mbedtls_ssl_context *, unsigned char *, int )
|
|
||||||
+ #endif
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
|
|
||||||
+-static void ssl_calc_verify_tls( const mbedtls_ssl_context *, unsigned char *, size_t * );
|
|
||||||
++static void ssl_calc_verify_tls( const mbedtls_ssl_context *, unsigned char [36], size_t * );
|
|
||||||
+ static void ssl_calc_finished_tls( mbedtls_ssl_context *, unsigned char *, int );
|
|
||||||
+ #endif
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SSL_PROTO_TLS1_2)
|
|
||||||
+ #if defined(MBEDTLS_SHA256_C)
|
|
||||||
+ static void ssl_update_checksum_sha256( mbedtls_ssl_context *, const unsigned char *, size_t );
|
|
||||||
+-static void ssl_calc_verify_tls_sha256( const mbedtls_ssl_context *,unsigned char *, size_t * );
|
|
||||||
++static void ssl_calc_verify_tls_sha256( const mbedtls_ssl_context *,unsigned char [32], size_t * );
|
|
||||||
+ static void ssl_calc_finished_tls_sha256( mbedtls_ssl_context *,unsigned char *, int );
|
|
||||||
+ #endif
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SHA512_C)
|
|
||||||
+ static void ssl_update_checksum_sha384( mbedtls_ssl_context *, const unsigned char *, size_t );
|
|
||||||
+-static void ssl_calc_verify_tls_sha384( const mbedtls_ssl_context *, unsigned char *, size_t * );
|
|
||||||
++static void ssl_calc_verify_tls_sha384( const mbedtls_ssl_context *, unsigned char [48], size_t * );
|
|
||||||
+ static void ssl_calc_finished_tls_sha384( mbedtls_ssl_context *, unsigned char *, int );
|
|
||||||
+ #endif
|
|
||||||
+ #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
|
|
||||||
+
|
|
||||||
+From 2c424570e2a85e21273313808e8c5efcf1cfc9d7 Mon Sep 17 00:00:00 2001
|
|
||||||
+From: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+Date: Tue, 10 Nov 2020 01:38:00 -0300
|
|
||||||
+Subject: [PATCH 2/7] Fix mismatched function parameters (prototype/definition)
|
|
||||||
+
|
|
||||||
+In GCC 11, parameters declared as arrays in function prototypes
|
|
||||||
+cannot be declared as pointers in the function definition. The
|
|
||||||
+same is true for the other way around.
|
|
||||||
+
|
|
||||||
+The definition of `mbedtls_aes_cmac_prf_128` was changed to match
|
|
||||||
+its public prototype in `cmac.h`. The type `output` was
|
|
||||||
+`unsigned char *`, now is `unsigned char [16]`.
|
|
||||||
+
|
|
||||||
+In `ssl_tls.c`, all the `ssl_calc_verify_*` variants now use pointers
|
|
||||||
+for the output `hash` parameter. The array parameters were removed
|
|
||||||
+because those functions must be compatible with the function pointer
|
|
||||||
+`calc_verify` (defined in `ssl_internal.h`).
|
|
||||||
+
|
|
||||||
+Signed-off-by: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+---
|
|
||||||
+ library/cmac.c | 2 +-
|
|
||||||
+ library/ssl_tls.c | 14 +++++++-------
|
|
||||||
+ 2 files changed, 8 insertions(+), 8 deletions(-)
|
|
||||||
+
|
|
||||||
+diff --git a/library/cmac.c b/library/cmac.c
|
|
||||||
+index 816bf13da38..59ece155eeb 100644
|
|
||||||
+--- a/library/cmac.c
|
|
||||||
++++ b/library/cmac.c
|
|
||||||
+@@ -420,7 +420,7 @@ int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info,
|
|
||||||
+ */
|
|
||||||
+ int mbedtls_aes_cmac_prf_128( const unsigned char *key, size_t key_length,
|
|
||||||
+ const unsigned char *input, size_t in_len,
|
|
||||||
+- unsigned char *output )
|
|
||||||
++ unsigned char output[16] )
|
|
||||||
+ {
|
|
||||||
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
|
|
||||||
+ const mbedtls_cipher_info_t *cipher_info;
|
|
||||||
+diff --git a/library/ssl_tls.c b/library/ssl_tls.c
|
|
||||||
+index ec890d7dcdc..9d4c4622894 100644
|
|
||||||
+--- a/library/ssl_tls.c
|
|
||||||
++++ b/library/ssl_tls.c
|
|
||||||
+@@ -680,20 +680,20 @@ static void ssl_calc_finished_ssl( mbedtls_ssl_context *, unsigned char *, int )
|
|
||||||
+ #endif
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
|
|
||||||
+-static void ssl_calc_verify_tls( const mbedtls_ssl_context *, unsigned char [36], size_t * );
|
|
||||||
++static void ssl_calc_verify_tls( const mbedtls_ssl_context *, unsigned char*, size_t * );
|
|
||||||
+ static void ssl_calc_finished_tls( mbedtls_ssl_context *, unsigned char *, int );
|
|
||||||
+ #endif
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SSL_PROTO_TLS1_2)
|
|
||||||
+ #if defined(MBEDTLS_SHA256_C)
|
|
||||||
+ static void ssl_update_checksum_sha256( mbedtls_ssl_context *, const unsigned char *, size_t );
|
|
||||||
+-static void ssl_calc_verify_tls_sha256( const mbedtls_ssl_context *,unsigned char [32], size_t * );
|
|
||||||
++static void ssl_calc_verify_tls_sha256( const mbedtls_ssl_context *,unsigned char*, size_t * );
|
|
||||||
+ static void ssl_calc_finished_tls_sha256( mbedtls_ssl_context *,unsigned char *, int );
|
|
||||||
+ #endif
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SHA512_C)
|
|
||||||
+ static void ssl_update_checksum_sha384( mbedtls_ssl_context *, const unsigned char *, size_t );
|
|
||||||
+-static void ssl_calc_verify_tls_sha384( const mbedtls_ssl_context *, unsigned char [48], size_t * );
|
|
||||||
++static void ssl_calc_verify_tls_sha384( const mbedtls_ssl_context *, unsigned char*, size_t * );
|
|
||||||
+ static void ssl_calc_finished_tls_sha384( mbedtls_ssl_context *, unsigned char *, int );
|
|
||||||
+ #endif
|
|
||||||
+ #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
|
|
||||||
+@@ -1667,7 +1667,7 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl )
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SSL_PROTO_SSL3)
|
|
||||||
+ void ssl_calc_verify_ssl( const mbedtls_ssl_context *ssl,
|
|
||||||
+- unsigned char hash[36],
|
|
||||||
++ unsigned char *hash,
|
|
||||||
+ size_t *hlen )
|
|
||||||
+ {
|
|
||||||
+ mbedtls_md5_context md5;
|
|
||||||
+@@ -1720,7 +1720,7 @@ void ssl_calc_verify_ssl( const mbedtls_ssl_context *ssl,
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
|
|
||||||
+ void ssl_calc_verify_tls( const mbedtls_ssl_context *ssl,
|
|
||||||
+- unsigned char hash[36],
|
|
||||||
++ unsigned char *hash,
|
|
||||||
+ size_t *hlen )
|
|
||||||
+ {
|
|
||||||
+ mbedtls_md5_context md5;
|
|
||||||
+@@ -1752,7 +1752,7 @@ void ssl_calc_verify_tls( const mbedtls_ssl_context *ssl,
|
|
||||||
+ #if defined(MBEDTLS_SSL_PROTO_TLS1_2)
|
|
||||||
+ #if defined(MBEDTLS_SHA256_C)
|
|
||||||
+ void ssl_calc_verify_tls_sha256( const mbedtls_ssl_context *ssl,
|
|
||||||
+- unsigned char hash[32],
|
|
||||||
++ unsigned char *hash,
|
|
||||||
+ size_t *hlen )
|
|
||||||
+ {
|
|
||||||
+ #if defined(MBEDTLS_USE_PSA_CRYPTO)
|
|
||||||
+@@ -1801,7 +1801,7 @@ void ssl_calc_verify_tls_sha256( const mbedtls_ssl_context *ssl,
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SHA512_C)
|
|
||||||
+ void ssl_calc_verify_tls_sha384( const mbedtls_ssl_context *ssl,
|
|
||||||
+- unsigned char hash[48],
|
|
||||||
++ unsigned char *hash,
|
|
||||||
+ size_t *hlen )
|
|
||||||
+ {
|
|
||||||
+ #if defined(MBEDTLS_USE_PSA_CRYPTO)
|
|
||||||
+
|
|
||||||
+From 80448aae2c93b7bfe73a05410196e237ef2dd8e1 Mon Sep 17 00:00:00 2001
|
|
||||||
+From: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+Date: Tue, 10 Nov 2020 02:28:50 -0300
|
|
||||||
+Subject: [PATCH 3/7] Fix GCC warning about `test_snprintf`
|
|
||||||
+
|
|
||||||
+GCC 11 generated the warnings because the parameter `ret_buf`
|
|
||||||
+was declared as `const char[10]`, but some of the arguments
|
|
||||||
+provided in `run_test_snprintf` are shorter literals, like "".
|
|
||||||
+
|
|
||||||
+Now the type of `ret_buf` is `const char *`.
|
|
||||||
+Both implementations of `test_snprintf` were fixed.
|
|
||||||
+
|
|
||||||
+Signed-off-by: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+---
|
|
||||||
+ programs/test/selftest.c | 2 +-
|
|
||||||
+ tests/suites/host_test.function | 2 +-
|
|
||||||
+ 2 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
+
|
|
||||||
+diff --git a/programs/test/selftest.c b/programs/test/selftest.c
|
|
||||||
+index 2aa379b1cf3..41d704073bc 100644
|
|
||||||
+--- a/programs/test/selftest.c
|
|
||||||
++++ b/programs/test/selftest.c
|
|
||||||
+@@ -158,7 +158,7 @@ static int calloc_self_test( int verbose )
|
|
||||||
+ }
|
|
||||||
+ #endif /* MBEDTLS_SELF_TEST */
|
|
||||||
+
|
|
||||||
+-static int test_snprintf( size_t n, const char ref_buf[10], int ref_ret )
|
|
||||||
++static int test_snprintf( size_t n, const char *ref_buf, int ref_ret )
|
|
||||||
+ {
|
|
||||||
+ int ret;
|
|
||||||
+ char buf[10] = "xxxxxxxxx";
|
|
||||||
+diff --git a/tests/suites/host_test.function b/tests/suites/host_test.function
|
|
||||||
+index db53e9784a7..872a3a43ac4 100644
|
|
||||||
+--- a/tests/suites/host_test.function
|
|
||||||
++++ b/tests/suites/host_test.function
|
|
||||||
+@@ -335,7 +335,7 @@ static int convert_params( size_t cnt , char ** params , int * int_params_store
|
|
||||||
+ #if defined(__GNUC__)
|
|
||||||
+ __attribute__((__noinline__))
|
|
||||||
+ #endif
|
|
||||||
+-static int test_snprintf( size_t n, const char ref_buf[10], int ref_ret )
|
|
||||||
++static int test_snprintf( size_t n, const char *ref_buf, int ref_ret )
|
|
||||||
+ {
|
|
||||||
+ int ret;
|
|
||||||
+ char buf[10] = "xxxxxxxxx";
|
|
||||||
+
|
|
||||||
+From eb5d014d8ec82cfebfdd008d890d0e1a114c2abc Mon Sep 17 00:00:00 2001
|
|
||||||
+From: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+Date: Tue, 10 Nov 2020 02:51:51 -0300
|
|
||||||
+Subject: [PATCH 4/7] Fix GCC warning in `ssl_calc_finished_tls_sha384`
|
|
||||||
+
|
|
||||||
+GCC 11 generated a warning because `padbuf` was too small to be
|
|
||||||
+used as an argument for `mbedtls_sha512_finish_ret`. The `output`
|
|
||||||
+parameter of `mbedtls_sha512_finish_ret` has the type
|
|
||||||
+`unsigned char[64]`, but `padbuf` was only 48 bytes long.
|
|
||||||
+
|
|
||||||
+Even though `ssl_calc_finished_tls_sha384` uses only 48 bytes for
|
|
||||||
+the hash output, the size of `padbuf` was increased to 64 bytes.
|
|
||||||
+
|
|
||||||
+Signed-off-by: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+---
|
|
||||||
+ library/ssl_tls.c | 2 +-
|
|
||||||
+ 1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
+
|
|
||||||
+diff --git a/library/ssl_tls.c b/library/ssl_tls.c
|
|
||||||
+index 9d4c4622894..c69de3f1dcb 100644
|
|
||||||
+--- a/library/ssl_tls.c
|
|
||||||
++++ b/library/ssl_tls.c
|
|
||||||
+@@ -3202,7 +3202,7 @@ static void ssl_calc_finished_tls_sha384(
|
|
||||||
+ {
|
|
||||||
+ int len = 12;
|
|
||||||
+ const char *sender;
|
|
||||||
+- unsigned char padbuf[48];
|
|
||||||
++ unsigned char padbuf[64];
|
|
||||||
+ #if defined(MBEDTLS_USE_PSA_CRYPTO)
|
|
||||||
+ size_t hash_size;
|
|
||||||
+ psa_hash_operation_t sha384_psa = PSA_HASH_OPERATION_INIT;
|
|
||||||
+
|
|
||||||
+From 683028a2f721980fa541e49a42cfdce3cc3f1c1d Mon Sep 17 00:00:00 2001
|
|
||||||
+From: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+Date: Tue, 10 Nov 2020 03:17:36 -0300
|
|
||||||
+Subject: [PATCH 5/7] Add changelog entry file to `ChangeLog.d`
|
|
||||||
+
|
|
||||||
+Signed-off-by: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+---
|
|
||||||
+ ChangeLog.d/bugfix_3782.txt | 2 ++
|
|
||||||
+ 1 file changed, 2 insertions(+)
|
|
||||||
+ create mode 100644 ChangeLog.d/bugfix_3782.txt
|
|
||||||
+
|
|
||||||
+diff --git a/ChangeLog.d/bugfix_3782.txt b/ChangeLog.d/bugfix_3782.txt
|
|
||||||
+new file mode 100644
|
|
||||||
+index 00000000000..25e18cb1821
|
|
||||||
+--- /dev/null
|
|
||||||
++++ b/ChangeLog.d/bugfix_3782.txt
|
|
||||||
+@@ -0,0 +1,2 @@
|
|
||||||
++Bugfix
|
|
||||||
++ * Fix build failures on GCC 11. Fixes #3782.
|
|
||||||
+
|
|
||||||
+From d596ca8a1e34b6ef2fda293250829d014e5d33af Mon Sep 17 00:00:00 2001
|
|
||||||
+From: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+Date: Wed, 25 Nov 2020 00:42:28 -0300
|
|
||||||
+Subject: [PATCH 6/7] Fix GCC warning in `ssl_calc_finished_tls_sha384`
|
|
||||||
+
|
|
||||||
+This commit fixes the same warning fixed by baeedbf9, but without
|
|
||||||
+wasting RAM. By casting `mbedtls_sha512_finish_ret()`, `padbuf`
|
|
||||||
+could be kept 48 bytes long without triggering any warnings.
|
|
||||||
+
|
|
||||||
+Signed-off-by: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+---
|
|
||||||
+ library/ssl_tls.c | 13 +++++++++++--
|
|
||||||
+ 1 file changed, 11 insertions(+), 2 deletions(-)
|
|
||||||
+
|
|
||||||
+diff --git a/library/ssl_tls.c b/library/ssl_tls.c
|
|
||||||
+index c69de3f1dcb..79348bd8dd0 100644
|
|
||||||
+--- a/library/ssl_tls.c
|
|
||||||
++++ b/library/ssl_tls.c
|
|
||||||
+@@ -3197,12 +3197,15 @@ static void ssl_calc_finished_tls_sha256(
|
|
||||||
+ #endif /* MBEDTLS_SHA256_C */
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SHA512_C)
|
|
||||||
++
|
|
||||||
++typedef int (*finish_sha384_t)(mbedtls_sha512_context*, unsigned char[48]);
|
|
||||||
++
|
|
||||||
+ static void ssl_calc_finished_tls_sha384(
|
|
||||||
+ mbedtls_ssl_context *ssl, unsigned char *buf, int from )
|
|
||||||
+ {
|
|
||||||
+ int len = 12;
|
|
||||||
+ const char *sender;
|
|
||||||
+- unsigned char padbuf[64];
|
|
||||||
++ unsigned char padbuf[48];
|
|
||||||
+ #if defined(MBEDTLS_USE_PSA_CRYPTO)
|
|
||||||
+ size_t hash_size;
|
|
||||||
+ psa_hash_operation_t sha384_psa = PSA_HASH_OPERATION_INIT;
|
|
||||||
+@@ -3255,8 +3258,14 @@ static void ssl_calc_finished_tls_sha384(
|
|
||||||
+ MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha512 state", (unsigned char *)
|
|
||||||
+ sha512.state, sizeof( sha512.state ) );
|
|
||||||
+ #endif
|
|
||||||
++ /*
|
|
||||||
++ * For SHA-384, we can save 16 bytes by keeping padbuf 48 bytes long.
|
|
||||||
++ * However, to avoid stringop-overflow warning in gcc, we have to cast
|
|
||||||
++ * mbedtls_sha512_finish_ret().
|
|
||||||
++ */
|
|
||||||
++ finish_sha384_t finish = (finish_sha384_t)mbedtls_sha512_finish_ret;
|
|
||||||
++ finish( &sha512, padbuf );
|
|
||||||
+
|
|
||||||
+- mbedtls_sha512_finish_ret( &sha512, padbuf );
|
|
||||||
+ mbedtls_sha512_free( &sha512 );
|
|
||||||
+ #endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+From f06a6144e23a1a8dcc3dd749b993ad88a96063fb Mon Sep 17 00:00:00 2001
|
|
||||||
+From: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+Date: Wed, 25 Nov 2020 07:30:26 -0300
|
|
||||||
+Subject: [PATCH 7/7] Change function casting in `ssl_calc_finished_tls_sha384`
|
|
||||||
+
|
|
||||||
+`finish_sha384_t` was made more generic by using `unsigned char*`
|
|
||||||
+instead of `unsigned char[48]` as the second parameter.
|
|
||||||
+This change tries to make the function casting more robust against
|
|
||||||
+future improvements of gcc analysis.
|
|
||||||
+
|
|
||||||
+Signed-off-by: Rodrigo Dias Correa <rodrigo@correas.us>
|
|
||||||
+---
|
|
||||||
+ library/ssl_tls.c | 2 +-
|
|
||||||
+ 1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
+
|
|
||||||
+diff --git a/library/ssl_tls.c b/library/ssl_tls.c
|
|
||||||
+index 79348bd8dd0..a1a5859f056 100644
|
|
||||||
+--- a/library/ssl_tls.c
|
|
||||||
++++ b/library/ssl_tls.c
|
|
||||||
+@@ -3198,7 +3198,7 @@ static void ssl_calc_finished_tls_sha256(
|
|
||||||
+
|
|
||||||
+ #if defined(MBEDTLS_SHA512_C)
|
|
||||||
+
|
|
||||||
+-typedef int (*finish_sha384_t)(mbedtls_sha512_context*, unsigned char[48]);
|
|
||||||
++typedef int (*finish_sha384_t)(mbedtls_sha512_context*, unsigned char*);
|
|
||||||
+
|
|
||||||
+ static void ssl_calc_finished_tls_sha384(
|
|
||||||
+ mbedtls_ssl_context *ssl, unsigned char *buf, int from )
|
|
@ -1,13 +0,0 @@
|
|||||||
--- julia-1.6.3/src/task.c 2021-09-23 19:34:58.000000000 +0200
|
|
||||||
+++ julia-1.6.3/src/task.c 2021-10-22 09:54:20.765870391 +0200
|
|
||||||
@@ -75,8 +75,8 @@
|
|
||||||
|
|
||||||
// empirically, jl_finish_task needs about 64k stack space to infer/run
|
|
||||||
// and additionally, gc-stack reserves 64k for the guard pages
|
|
||||||
-#if defined(MINSIGSTKSZ) && MINSIGSTKSZ > 131072
|
|
||||||
-#define MINSTKSZ MINSIGSTKSZ
|
|
||||||
+#if defined(MINSIGSTKSZ)
|
|
||||||
+#define MINSTKSZ (MINSIGSTKSZ > 131072 ? MINSIGSTKSZ : 131072)
|
|
||||||
#else
|
|
||||||
#define MINSTKSZ 131072
|
|
||||||
#endif
|
|
@ -1,15 +0,0 @@
|
|||||||
Index: julia-1.6.0/Makefile
|
|
||||||
===================================================================
|
|
||||||
--- julia-1.6.0.orig/Makefile
|
|
||||||
+++ julia-1.6.0/Makefile
|
|
||||||
@@ -42,10 +42,6 @@ $(foreach link,base $(JULIAHOME)/test,$(
|
|
||||||
julia_flisp.boot.inc.phony: julia-deps
|
|
||||||
@$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/src julia_flisp.boot.inc.phony
|
|
||||||
|
|
||||||
-# Build the HTML docs (skipped if already exists, notably in tarballs)
|
|
||||||
-$(BUILDROOT)/doc/_build/html/en/index.html: $(shell find $(BUILDROOT)/base $(BUILDROOT)/doc \( -path $(BUILDROOT)/doc/_build -o -path $(BUILDROOT)/doc/deps -o -name *_constants.jl -o -name *_h.jl -o -name version_git.jl \) -prune -o -type f -print)
|
|
||||||
- @$(MAKE) docs
|
|
||||||
-
|
|
||||||
julia-symlink: julia-cli-$(JULIA_BUILD_MODE)
|
|
||||||
ifeq ($(OS),WINNT)
|
|
||||||
@echo '@"%~dp0\'"$$(echo $(call rel_path,$(BUILDROOT),$(JULIA_EXECUTABLE)) | tr / '\\')"\" '%*' > $(BUILDROOT)/julia.bat
|
|
87
julia-hardcoded-libs.patch
Normal file
87
julia-hardcoded-libs.patch
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
diff --git a/stdlib/libLLVM_jll/src/libLLVM_jll.jl b/stdlib/libLLVM_jll/src/libLLVM_jll.jl
|
||||||
|
index fa45e754e5..b51812e3a8 100644
|
||||||
|
--- a/stdlib/libLLVM_jll/src/libLLVM_jll.jl
|
||||||
|
+++ b/stdlib/libLLVM_jll/src/libLLVM_jll.jl
|
||||||
|
@@ -23,7 +23,7 @@ if Sys.iswindows()
|
||||||
|
elseif Sys.isapple()
|
||||||
|
const libLLVM = "@rpath/libLLVM.dylib"
|
||||||
|
else
|
||||||
|
- const libLLVM = "libLLVM-14jl.so"
|
||||||
|
+ const libLLVM = "libLLVM-15.so"
|
||||||
|
end
|
||||||
|
|
||||||
|
function __init__()
|
||||||
|
diff --git a/stdlib/nghttp2_jll/src/nghttp2_jll.jl b/stdlib/nghttp2_jll/src/nghttp2_jll.jl
|
||||||
|
index 8b98c76ac5..77ad9e3800 100644
|
||||||
|
--- a/stdlib/nghttp2_jll/src/nghttp2_jll.jl
|
||||||
|
+++ b/stdlib/nghttp2_jll/src/nghttp2_jll.jl
|
||||||
|
@@ -22,7 +22,7 @@ if Sys.iswindows()
|
||||||
|
elseif Sys.isapple()
|
||||||
|
const libnghttp2 = "@rpath/libnghttp2.14.dylib"
|
||||||
|
else
|
||||||
|
- const libnghttp2 = "libnghttp2.so.14"
|
||||||
|
+ const libnghttp2 = "libnghttp2.so"
|
||||||
|
end
|
||||||
|
|
||||||
|
function __init__()
|
||||||
|
diff --git a/stdlib/LibGit2_jll/src/LibGit2_jll.jl b/stdlib/LibGit2_jll/src/LibGit2_jll.jl
|
||||||
|
index f0d4b5dda6..2ed3017b51 100644
|
||||||
|
--- a/stdlib/LibGit2_jll/src/LibGit2_jll.jl
|
||||||
|
+++ b/stdlib/LibGit2_jll/src/LibGit2_jll.jl
|
||||||
|
@@ -23,7 +23,7 @@ if Sys.iswindows()
|
||||||
|
elseif Sys.isapple()
|
||||||
|
const libgit2 = "@rpath/libgit2.1.5.dylib"
|
||||||
|
else
|
||||||
|
- const libgit2 = "libgit2.so.1.5"
|
||||||
|
+ const libgit2 = "libgit2.so"
|
||||||
|
end
|
||||||
|
|
||||||
|
function __init__()
|
||||||
|
diff --git a/stdlib/OpenLibm_jll/src/OpenLibm_jll.jl b/stdlib/OpenLibm_jll/src/OpenLibm_jll.jl
|
||||||
|
index 215de8aed6..918d1ffdc2 100644
|
||||||
|
--- a/stdlib/OpenLibm_jll/src/OpenLibm_jll.jl
|
||||||
|
+++ b/stdlib/OpenLibm_jll/src/OpenLibm_jll.jl
|
||||||
|
@@ -22,7 +22,7 @@ if Sys.iswindows()
|
||||||
|
elseif Sys.isapple()
|
||||||
|
const libopenlibm = "@rpath/libopenlibm.4.dylib"
|
||||||
|
else
|
||||||
|
- const libopenlibm = "libopenlibm.so.4"
|
||||||
|
+ const libopenlibm = "libopenlibm.so"
|
||||||
|
end
|
||||||
|
|
||||||
|
function __init__()
|
||||||
|
diff --git a/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl b/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl
|
||||||
|
index 2940970cef..359dbd9065 100644
|
||||||
|
--- a/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl
|
||||||
|
+++ b/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl
|
||||||
|
@@ -67,18 +67,18 @@ elseif Sys.isapple()
|
||||||
|
const libsuitesparseconfig = "@rpath/libsuitesparseconfig.5.dylib"
|
||||||
|
const libumfpack = "@rpath/libumfpack.5.dylib"
|
||||||
|
else
|
||||||
|
- const libamd = "libamd.so.2"
|
||||||
|
- const libbtf = "libbtf.so.1"
|
||||||
|
- const libcamd = "libcamd.so.2"
|
||||||
|
- const libccolamd = "libccolamd.so.2"
|
||||||
|
- const libcholmod = "libcholmod.so.3"
|
||||||
|
- const libcolamd = "libcolamd.so.2"
|
||||||
|
- const libklu = "libklu.so.1"
|
||||||
|
- const libldl = "libldl.so.2"
|
||||||
|
- const librbio = "librbio.so.2"
|
||||||
|
- const libspqr = "libspqr.so.2"
|
||||||
|
- const libsuitesparseconfig = "libsuitesparseconfig.so.5"
|
||||||
|
- const libumfpack = "libumfpack.so.5"
|
||||||
|
+ const libamd = "libamd.so"
|
||||||
|
+ const libbtf = "libbtf.so"
|
||||||
|
+ const libcamd = "libcamd.so"
|
||||||
|
+ const libccolamd = "libccolamd.so"
|
||||||
|
+ const libcholmod = "libcholmod.so"
|
||||||
|
+ const libcolamd = "libcolamd.so"
|
||||||
|
+ const libklu = "libklu.so"
|
||||||
|
+ const libldl = "libldl.so"
|
||||||
|
+ const librbio = "librbio.so"
|
||||||
|
+ const libspqr = "libspqr.so"
|
||||||
|
+ const libsuitesparseconfig = "libsuitesparseconfig.so"
|
||||||
|
+ const libumfpack = "libumfpack.so"
|
||||||
|
end
|
||||||
|
|
||||||
|
function __init__()
|
77
julia-libgit2-1.7.patch
Normal file
77
julia-libgit2-1.7.patch
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
From 764484f58b5daead9fd58de08ce35382758d3985 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yichao Yu <yyc1992@gmail.com>
|
||||||
|
Date: Sun, 10 Sep 2023 14:07:57 -0400
|
||||||
|
Subject: [PATCH] libgit2 1.7.0 support
|
||||||
|
|
||||||
|
---
|
||||||
|
stdlib/LibGit2/src/consts.jl | 5 +++++
|
||||||
|
stdlib/LibGit2/src/types.jl | 5 ++++-
|
||||||
|
2 files changed, 9 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/stdlib/LibGit2/src/consts.jl b/stdlib/LibGit2/src/consts.jl
|
||||||
|
index f3a460108db6b..8f0e6eeb2ec87 100644
|
||||||
|
--- a/stdlib/LibGit2/src/consts.jl
|
||||||
|
+++ b/stdlib/LibGit2/src/consts.jl
|
||||||
|
@@ -468,4 +468,9 @@ Option flags for `GitProxy`.
|
||||||
|
TRACE_TRACE
|
||||||
|
end
|
||||||
|
|
||||||
|
+# The type of object id
|
||||||
|
+@enum(GIT_OID_TYPE,
|
||||||
|
+ _OID_DEFAULT = 0,
|
||||||
|
+ OID_SHA1 = 1)
|
||||||
|
+
|
||||||
|
end
|
||||||
|
diff --git a/stdlib/LibGit2/src/types.jl b/stdlib/LibGit2/src/types.jl
|
||||||
|
index 0b653f9b6ad21..c796ff0f98b20 100644
|
||||||
|
--- a/stdlib/LibGit2/src/types.jl
|
||||||
|
+++ b/stdlib/LibGit2/src/types.jl
|
||||||
|
@@ -2,7 +2,7 @@
|
||||||
|
|
||||||
|
using Base: something
|
||||||
|
import Base.@kwdef
|
||||||
|
-import .Consts: GIT_SUBMODULE_IGNORE, GIT_MERGE_FILE_FAVOR, GIT_MERGE_FILE, GIT_CONFIG
|
||||||
|
+import .Consts: GIT_SUBMODULE_IGNORE, GIT_MERGE_FILE_FAVOR, GIT_MERGE_FILE, GIT_CONFIG, GIT_OID_TYPE
|
||||||
|
|
||||||
|
const OID_RAWSZ = 20
|
||||||
|
const OID_HEXSZ = OID_RAWSZ * 2
|
||||||
|
@@ -439,6 +439,9 @@ The fields represent:
|
||||||
|
# options controlling how the diff text is generated
|
||||||
|
context_lines::UInt32 = UInt32(3)
|
||||||
|
interhunk_lines::UInt32 = UInt32(0)
|
||||||
|
+ @static if LibGit2.VERSION >= v"1.7.0"
|
||||||
|
+ oid_type::GIT_OID_TYPE = Consts._OID_DEFAULT
|
||||||
|
+ end
|
||||||
|
id_abbrev::UInt16 = UInt16(7)
|
||||||
|
max_size::Int64 = Int64(512*1024*1024) #512Mb
|
||||||
|
old_prefix::Cstring = Cstring(C_NULL)
|
||||||
|
diff --git a/stdlib/LibGit2/test/libgit2-tests.jl b/stdlib/LibGit2/test/libgit2-tests.jl
|
||||||
|
index 4ace98a0b1..f230ff4e14 100644
|
||||||
|
--- a/stdlib/LibGit2/test/libgit2-tests.jl
|
||||||
|
+++ b/stdlib/LibGit2/test/libgit2-tests.jl
|
||||||
|
@@ -1181,19 +1177,19 @@ mktempdir() do dir
|
||||||
|
@testset "diff" begin
|
||||||
|
LibGit2.with(LibGit2.GitRepo(cache_repo)) do repo
|
||||||
|
@test !LibGit2.isdirty(repo)
|
||||||
|
- @test !LibGit2.isdirty(repo, test_file)
|
||||||
|
- @test !LibGit2.isdirty(repo, "nonexistent")
|
||||||
|
+# @test !LibGit2.isdirty(repo, test_file)
|
||||||
|
+# @test !LibGit2.isdirty(repo, "nonexistent")
|
||||||
|
@test !LibGit2.isdiff(repo, "HEAD")
|
||||||
|
@test !LibGit2.isdirty(repo, cached=true)
|
||||||
|
- @test !LibGit2.isdirty(repo, test_file, cached=true)
|
||||||
|
- @test !LibGit2.isdirty(repo, "nonexistent", cached=true)
|
||||||
|
+# @test !LibGit2.isdirty(repo, test_file, cached=true)
|
||||||
|
+# @test !LibGit2.isdirty(repo, "nonexistent", cached=true)
|
||||||
|
@test !LibGit2.isdiff(repo, "HEAD", cached=true)
|
||||||
|
open(joinpath(cache_repo,test_file), "a") do f
|
||||||
|
println(f, "zzzz")
|
||||||
|
end
|
||||||
|
@test LibGit2.isdirty(repo)
|
||||||
|
- @test LibGit2.isdirty(repo, test_file)
|
||||||
|
- @test !LibGit2.isdirty(repo, "nonexistent")
|
||||||
|
+# @test LibGit2.isdirty(repo, test_file)
|
||||||
|
+# @test !LibGit2.isdirty(repo, "nonexistent")
|
||||||
|
@test LibGit2.isdiff(repo, "HEAD")
|
||||||
|
@test !LibGit2.isdirty(repo, cached=true)
|
||||||
|
@test !LibGit2.isdiff(repo, "HEAD", cached=true)
|
20
julia-libunwind-1.9.patch
Normal file
20
julia-libunwind-1.9.patch
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
diff --git a/src/debuginfo.cpp b/src/debuginfo.cpp
|
||||||
|
index 95b562311b..69fceb0cfe 100644
|
||||||
|
--- a/src/debuginfo.cpp
|
||||||
|
+++ b/src/debuginfo.cpp
|
||||||
|
@@ -265,6 +265,7 @@ public:
|
||||||
|
di->format = UNW_INFO_FORMAT_ARM_EXIDX;
|
||||||
|
di->start_ip = (uintptr_t)arm_text_addr;
|
||||||
|
di->end_ip = (uintptr_t)(arm_text_addr + arm_text_len);
|
||||||
|
+ di->load_offset = 0;
|
||||||
|
di->u.rti.name_ptr = 0;
|
||||||
|
di->u.rti.table_data = arm_exidx_addr;
|
||||||
|
di->u.rti.table_len = arm_exidx_len;
|
||||||
|
@@ -1577,6 +1578,7 @@ void register_eh_frames(uint8_t *Addr, size_t Size)
|
||||||
|
di->u.rti.table_data = (unw_word_t)table;
|
||||||
|
di->start_ip = start_ip;
|
||||||
|
di->end_ip = end_ip;
|
||||||
|
+ di->load_offset = 0;
|
||||||
|
|
||||||
|
jl_profile_atomic([&]() {
|
||||||
|
_U_dyn_register(di);
|
@ -1,2 +1,4 @@
|
|||||||
# https://github.com/JuliaLang/julia/issues/28564
|
# https://github.com/JuliaLang/julia/issues/28564
|
||||||
addFilter("E: devel-file-in-non-devel-package.*/usr/lib.*/julia/.*")
|
addFilter("E: devel-file-in-non-devel-package.*/usr/lib.*/julia/.*")
|
||||||
|
# Julia has sofiles that are not actually an issue
|
||||||
|
addFilter("E: arch-dependent-file-in-usr-share*")
|
||||||
|
40
julia-suitesparse-7.patch
Normal file
40
julia-suitesparse-7.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
--- a/src/solvers/cholmod.jl.orig 2022-11-11 07:24:15.860939080 +0000
|
||||||
|
+++ b/src/solvers/cholmod.jl 2022-11-11 07:24:39.462357069 +0000
|
||||||
|
@@ -194,21 +194,6 @@
|
||||||
|
from www.julialang.org, which ship with the correct
|
||||||
|
versions of all dependencies.
|
||||||
|
"""
|
||||||
|
- elseif BUILD_VERSION.major != current_version.major
|
||||||
|
- @warn """
|
||||||
|
- CHOLMOD version incompatibility
|
||||||
|
-
|
||||||
|
- Julia was compiled with CHOLMOD version $BUILD_VERSION. It is
|
||||||
|
- currently linked with version $current_version.
|
||||||
|
- This might cause Julia to terminate when working with
|
||||||
|
- sparse matrix factorizations, e.g. solving systems of
|
||||||
|
- equations with \\.
|
||||||
|
-
|
||||||
|
- It is recommended that you use Julia with the same major
|
||||||
|
- version of CHOLMOD as the one used during the build, or
|
||||||
|
- download the generic binaries from www.julialang.org,
|
||||||
|
- which ship with the correct versions of all dependencies.
|
||||||
|
- """
|
||||||
|
end
|
||||||
|
|
||||||
|
intsize = sizeof(SuiteSparse_long)
|
||||||
|
@@ -232,15 +232,6 @@ function __init__()
|
||||||
|
"""
|
||||||
|
end
|
||||||
|
|
||||||
|
- # Register gc tracked allocator if CHOLMOD is new enough
|
||||||
|
- if current_version >= v"3.0.0"
|
||||||
|
- cnfg = cglobal((:SuiteSparse_config, :libsuitesparseconfig), Ptr{Cvoid})
|
||||||
|
- unsafe_store!(cnfg, cglobal(:jl_malloc, Ptr{Cvoid}), 1)
|
||||||
|
- unsafe_store!(cnfg, cglobal(:jl_calloc, Ptr{Cvoid}), 2)
|
||||||
|
- unsafe_store!(cnfg, cglobal(:jl_realloc, Ptr{Cvoid}), 3)
|
||||||
|
- unsafe_store!(cnfg, cglobal(:jl_free, Ptr{Cvoid}), 4)
|
||||||
|
- end
|
||||||
|
-
|
||||||
|
catch ex
|
||||||
|
@error "Error during initialization of module CHOLMOD" exception=ex,catch_backtrace()
|
||||||
|
end
|
@ -1,3 +1,35 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Dec 9 06:23:13 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
|
||||||
|
|
||||||
|
- Remove debug package. It's not created. Still we won't strip
|
||||||
|
debug symbols from julia as it will cause issues.
|
||||||
|
- Declare that it conflicts with juliaup.
|
||||||
|
- Update tagged release banner message that says it is an unofficial experimental build
|
||||||
|
- Add mbedtls-hardcoded-libs.patch
|
||||||
|
- Update description
|
||||||
|
- Add llvm-link-shared.patch
|
||||||
|
- Add openlibm.patch
|
||||||
|
- Add libblastrampoline-hardcoded-libs.patch
|
||||||
|
- Add use-system-libuv-correctly.patch
|
||||||
|
- Use sed to replace julia-hardcoded-libs.patch
|
||||||
|
- Add patch julia-suitesparse-7.patch
|
||||||
|
- Update julia-env-script-interpreter.patch
|
||||||
|
- Add new patches
|
||||||
|
* 21d4c2f1.patch
|
||||||
|
* 959902f1.patch
|
||||||
|
* e08e1444.patch
|
||||||
|
* f11bfc6c.patch
|
||||||
|
* julia-hardcoded-libs.patch
|
||||||
|
* julia-libgit2-1.7.patch
|
||||||
|
* julia-libunwind-1.9.patch
|
||||||
|
- Update to julia version 1.9.4
|
||||||
|
** CHANGELOG TOO HUGE SINCE 1.6.3 **
|
||||||
|
See https://github.com/JuliaLang/julia/compare/v1.6.3...v1.9.4
|
||||||
|
- Remove a lot of old patches
|
||||||
|
* julia-fix_doc_build.patch
|
||||||
|
* julia-fix-mbedtls-build-failure-gcc-11.patch
|
||||||
|
* julia-fix-task-build-failure-gcc-11.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Nov 24 08:19:54 UTC 2021 - Guillaume GARDET <guillaume.gardet@opensuse.org>
|
Wed Nov 24 08:19:54 UTC 2021 - Guillaume GARDET <guillaume.gardet@opensuse.org>
|
||||||
|
|
||||||
|
288
julia.spec
288
julia.spec
@ -1,4 +1,4 @@
|
|||||||
#
|
|
||||||
# spec file for package julia
|
# spec file for package julia
|
||||||
#
|
#
|
||||||
# Copyright (c) 2021 SUSE LLC
|
# Copyright (c) 2021 SUSE LLC
|
||||||
@ -23,47 +23,64 @@
|
|||||||
%undefine _build_create_debug
|
%undefine _build_create_debug
|
||||||
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
|
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
|
||||||
|
|
||||||
%global __provides_exclude_from ^%{_libdir}/%{name}/.*\\.so$
|
|
||||||
|
|
||||||
# List all bundled libraries.
|
|
||||||
%global _privatelibs lib(LLVM-.*|ccalltest|dSFMT|git2|llvmcalltest|openlibm|suitesparse_wrapper|mbedcrypto|mbedtls|mbedx509|uv)\\.so.*
|
|
||||||
%global __provides_exclude ^(%{_privatelibs})$
|
|
||||||
%global __requires_exclude ^(%{_privatelibs})$
|
|
||||||
|
|
||||||
%define libjulia_sover_major 1
|
%define libjulia_sover_major 1
|
||||||
%define libjulia_sover_minor 6
|
%define libjulia_sover_minor 9
|
||||||
%if "@BUILD_FLAVOR@%{nil}" == "compat"
|
%if "@BUILD_FLAVOR@%{nil}" == "compat"
|
||||||
%define compat_mode 1
|
%define compat_mode 1
|
||||||
%else
|
%else
|
||||||
%define compat_mode 0
|
%define compat_mode 0
|
||||||
%endif
|
%endif
|
||||||
Version: 1.6.3
|
|
||||||
|
# LTO currently makes building blastrampoline and Julia itself fail
|
||||||
|
# It is not enabled upstream anyway
|
||||||
|
%global _lto_cflags %nil
|
||||||
|
Version: 1.9.4
|
||||||
Release: 0
|
Release: 0
|
||||||
URL: http://julialang.org/
|
URL: http://julialang.org/
|
||||||
Source0: https://github.com/JuliaLang/julia/releases/download/v%{version}/julia-%{version}-full.tar.gz
|
Source0: https://github.com/JuliaLang/julia/releases/download/v%{version}/julia-%{version}-full.tar.gz
|
||||||
Source1: julia-rpmlintrc
|
Source1: julia-rpmlintrc
|
||||||
Source99: juliabuildopts
|
|
||||||
# PATCH-FIX-OPENSUSE julia-env-script-interpreter.patch ronisbr@gmail.com -- Change script interpreted to avoid errors in rpmlint.
|
# PATCH-FIX-OPENSUSE julia-env-script-interpreter.patch ronisbr@gmail.com -- Change script interpreted to avoid errors in rpmlint.
|
||||||
Patch0: julia-env-script-interpreter.patch
|
Patch1: julia-env-script-interpreter.patch
|
||||||
# PATCH-FIX-OPENSUSE julia-fix_doc_build.patch ronisbr@gmail.com -- Makefile is building the docs with `USE_SYSTEM_CSL=1` even if they are already available in the tarball.
|
Patch2: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/e08e1444.patch?ref_type=heads#/e08e1444.patch
|
||||||
Patch1: julia-fix_doc_build.patch
|
Patch3: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/959902f1.patch?ref_type=heads#/959902f1.patch
|
||||||
# PATCH-FIX-UPSTREAM julia-fix-mbedtls-build-failure-gcc-11.patch ronisbr@gmail.com - Fix MBEDTLS building using GCC 11.
|
Patch4: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/f11bfc6c.patch?ref_type=heads#/f11bfc6c.patch
|
||||||
Patch2: julia-fix-mbedtls-build-failure-gcc-11.patch
|
Patch5: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/21d4c2f1.patch?ref_type=heads#/21d4c2f1.patch
|
||||||
# PATCH-FIX-UPSTREAM julia-fix-task-build-failure-gcc-11.patch pandom79@gmail.com - Fix task.c building using GCC 11.
|
Patch6: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-libunwind-1.6.patch?ref_type=heads#/julia-libunwind-1.9.patch
|
||||||
Patch3: julia-fix-task-build-failure-gcc-11.patch
|
Patch8: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-libgit2-1.7.patch?ref_type=heads#/julia-libgit2-1.7.patch
|
||||||
|
Patch9: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-suitesparse-7.patch?ref_type=heads#/julia-suitesparse-7.patch
|
||||||
|
Patch10: use-system-libuv-correctly.patch
|
||||||
|
Patch11: openlibm.patch
|
||||||
|
Patch12: llvm-link-shared.patch
|
||||||
|
Patch13: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-hardcoded-libs.patch?ref_type=heads#/julia-hardcoded-libs.patch
|
||||||
|
Patch14: mbedtls-hardcoded-libs.patch
|
||||||
|
Patch15: libblastrampoline-hardcoded-libs.patch
|
||||||
BuildRequires: arpack-ng-devel >= 3.3.0
|
BuildRequires: arpack-ng-devel >= 3.3.0
|
||||||
|
BuildRequires: llvm15-devel
|
||||||
|
BuildRequires: libblastrampoline-devel
|
||||||
|
BuildRequires: lld15
|
||||||
|
BuildRequires: libwhich
|
||||||
|
BuildRequires: libgit2-devel
|
||||||
|
BuildRequires: zlib-devel
|
||||||
|
BuildRequires: p7zip >= 16
|
||||||
|
BuildRequires: dSFMT-devel
|
||||||
|
BuildRequires: libuv-devel
|
||||||
|
BuildRequires: mbedtls-devel
|
||||||
|
BuildRequires: openlibm-devel
|
||||||
|
BuildRequires: utf8proc-devel
|
||||||
BuildRequires: blas-devel
|
BuildRequires: blas-devel
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
BuildRequires: double-conversion-devel
|
BuildRequires: double-conversion-devel
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: fftw3-threads-devel >= 3.3.4
|
BuildRequires: fftw3-threads-devel >= 3.3.4
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
|
BuildRequires: gcc
|
||||||
BuildRequires: gcc-fortran
|
BuildRequires: gcc-fortran
|
||||||
BuildRequires: gmp-devel >= 6.1.2
|
BuildRequires: gmp-devel >= 6.1.2
|
||||||
BuildRequires: hicolor-icon-theme
|
BuildRequires: hicolor-icon-theme
|
||||||
BuildRequires: lapack-devel >= 3.5.0
|
BuildRequires: lapack-devel >= 3.5.0
|
||||||
BuildRequires: libcurl-devel
|
BuildRequires: libcurl-devel
|
||||||
BuildRequires: libnghttp2-devel
|
BuildRequires: libnghttp2-devel
|
||||||
|
BuildRequires: openblas-common-devel
|
||||||
BuildRequires: libopenblas_openmp-devel >= 0.3.5
|
BuildRequires: libopenblas_openmp-devel >= 0.3.5
|
||||||
BuildRequires: libssh2-devel >= 1.9.0
|
BuildRequires: libssh2-devel >= 1.9.0
|
||||||
BuildRequires: libunwind-devel >= 1.3.1
|
BuildRequires: libunwind-devel >= 1.3.1
|
||||||
@ -79,24 +96,12 @@ BuildRequires: python >= 2.5
|
|||||||
BuildRequires: readline-devel
|
BuildRequires: readline-devel
|
||||||
BuildRequires: suitesparse-devel >= 5.4.0
|
BuildRequires: suitesparse-devel >= 5.4.0
|
||||||
BuildRequires: update-desktop-files
|
BuildRequires: update-desktop-files
|
||||||
BuildRequires: zlib-devel >= 1.2.11
|
BuildRequires: ca-certificates
|
||||||
Requires: libamd2
|
Conflicts: juliaup
|
||||||
Requires: libarpack2
|
|
||||||
Requires: libcamd2
|
|
||||||
Requires: libccolamd2
|
|
||||||
Requires: libcholmod3
|
|
||||||
Requires: libcolamd2
|
|
||||||
Requires: libfftw3_threads3
|
|
||||||
Requires: libgmp10
|
|
||||||
Requires: libmpfr6
|
|
||||||
Requires: libopenblas_openmp0 >= 0.3.5
|
|
||||||
Requires: libpcre2-8-0
|
|
||||||
Requires: libspqr2
|
|
||||||
Requires: libsuitesparseconfig5
|
|
||||||
Requires: libumfpack5
|
|
||||||
Requires: ncurses
|
|
||||||
Requires: p7zip >= 16
|
Requires: p7zip >= 16
|
||||||
Requires: readline
|
Requires: readline
|
||||||
|
Requires: ca-certificates
|
||||||
|
Requires: julia-devel = %{version}
|
||||||
Recommends: arpack-ng-devel
|
Recommends: arpack-ng-devel
|
||||||
Recommends: git
|
Recommends: git
|
||||||
Recommends: gmp-devel
|
Recommends: gmp-devel
|
||||||
@ -140,6 +145,9 @@ library. The library, largely written in Julia itself, also integrates mature,
|
|||||||
best-of-breed C and Fortran libraries for linear algebra, random number
|
best-of-breed C and Fortran libraries for linear algebra, random number
|
||||||
generation, signal processing, and string processing.
|
generation, signal processing, and string processing.
|
||||||
|
|
||||||
|
This package is experimental and by no means supported by upstream. If you want
|
||||||
|
to use julia, please install juliaup instead
|
||||||
|
|
||||||
%package devel
|
%package devel
|
||||||
Summary: Julia development, debugging and testing files
|
Summary: Julia development, debugging and testing files
|
||||||
Group: Development/Languages/Other
|
Group: Development/Languages/Other
|
||||||
@ -155,45 +163,50 @@ debugging version of Julia. This package is normally not needed when programming
|
|||||||
in the Julia language, but rather for embedding Julia into external programs or
|
in the Julia language, but rather for embedding Julia into external programs or
|
||||||
debugging Julia itself.
|
debugging Julia itself.
|
||||||
|
|
||||||
%package debug
|
|
||||||
Summary: Julia debugging
|
|
||||||
Group: Development/Languages/Other
|
|
||||||
Requires: %{name} = %{version}
|
|
||||||
%if 0%{?compat_mode}
|
|
||||||
Conflicts: julia-debug
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%description debug
|
|
||||||
Contains a debugging version of Julia system image and Julia library.
|
|
||||||
|
|
||||||
%if 0%{?compat_mode} == 0
|
|
||||||
%package doc
|
|
||||||
Summary: Julia documentation and code examples
|
|
||||||
Group: Documentation/Other
|
|
||||||
BuildArch: noarch
|
|
||||||
|
|
||||||
%description doc
|
|
||||||
Contains the Julia manual, the reference documentation of the standard library.
|
|
||||||
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%{expand:%global juliabuildopts %(cat %{SOURCE99})}
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n julia-%{version}
|
%setup -q -n julia-%{version}
|
||||||
%patch0 -p1
|
patch -p1 -i %{PATCH1}
|
||||||
%patch1 -p1
|
patch -p1 -i %{PATCH2}
|
||||||
%patch2 -p1
|
patch -p1 -i %{PATCH3}
|
||||||
%patch3 -p1
|
patch -p1 -i %{PATCH4}
|
||||||
|
patch -p1 -i %{PATCH5}
|
||||||
|
# libunwind 1.6 compatibility
|
||||||
|
patch -p1 -i %{PATCH6}
|
||||||
|
# Fix tests with libgit2 1.7
|
||||||
|
patch -p1 -i %{PATCH8}
|
||||||
|
# Make.inc puts it in the wrong libpath
|
||||||
|
# patch -p1 -i %{PATCH10}
|
||||||
|
patch -p1 -i %{PATCH11}
|
||||||
|
patch -p1 -i %{PATCH12}
|
||||||
|
patch -p1 -i %{PATCH13}
|
||||||
|
patch -p1 -i %{PATCH14}
|
||||||
|
patch -p1 -i %{PATCH15}
|
||||||
|
|
||||||
%ifarch aarch64 %{arm}
|
%ifarch aarch64 %{arm}
|
||||||
# https://github.com/JuliaLang/julia/issues/41613#issuecomment-976535193
|
# https://github.com/JuliaLang/julia/issues/41613#issuecomment-976535193
|
||||||
sed -i 's#$(eval $(call symlink_system_library,CSL,libquadmath,0))##' base/Makefile
|
sed -i 's#$(eval $(call symlink_system_library,CSL,libquadmath,0))##' base/Makefile
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# remove .gitignore
|
pushd stdlib/srccache
|
||||||
find . -name ".git*" -exec rm {} \;
|
tar -xzf SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz
|
||||||
|
patch -d JuliaSparse-SparseArrays.jl-37e6e58 -p1 -i %{PATCH9}
|
||||||
|
rm SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz
|
||||||
|
tar -czf SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz JuliaSparse-SparseArrays.jl-37e6e58
|
||||||
|
md5sum SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz | cut -d ' ' -f 1 > ../../deps/checksums/SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz/md5
|
||||||
|
sha512sum SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz | cut -d ' ' -f 1 > ../../deps/checksums/SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz/sha512
|
||||||
|
|
||||||
|
popd
|
||||||
|
|
||||||
|
# Work around bug that prompts zlib to be downloaded even when not used
|
||||||
|
# https://github.com/JuliaLang/julia/pull/42524/files#r734972945
|
||||||
|
sed "s/ \$(build_prefix)\\/manifest\\/zlib//" -i deps/llvm.mk
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
# Workaround for https://github.com/JuliaLang/julia/issues/27118
|
||||||
|
%global build_cxxflags %(echo %{build_cxxflags} | sed 's/-Wp,-D_GLIBCXX_ASSERTIONS //')
|
||||||
|
# Workaround for https://github.com/JuliaLang/julia/issues/39822
|
||||||
|
# and https://bugzilla.redhat.com/show_bug.cgi?id=1928696
|
||||||
|
%global build_cflags %(echo %{build_cflags} | sed 's/-Wp,-D_GNU_SOURCE //')
|
||||||
|
|
||||||
%if 0%{?compat_mode} == 0
|
%if 0%{?compat_mode} == 0
|
||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
@ -225,7 +238,7 @@ find . -name ".git*" -exec rm {} \;
|
|||||||
%define julia_march x86-64
|
%define julia_march x86-64
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%ifarch armv6l armv6hl
|
%ifarch armv6l armv6hl aarch64
|
||||||
export LDFLAGS="$LDFLAGS -latomic"
|
export LDFLAGS="$LDFLAGS -latomic"
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
@ -233,14 +246,18 @@ export LDFLAGS="$LDFLAGS -latomic"
|
|||||||
# GCC-11.
|
# GCC-11.
|
||||||
# Ref.: https://build.opensuse.org/package/show/security:tls/mbedtls
|
# Ref.: https://build.opensuse.org/package/show/security:tls/mbedtls
|
||||||
export CFLAGS="%{optflags} -Wno-stringop-overflow -Wno-maybe-uninitialized"
|
export CFLAGS="%{optflags} -Wno-stringop-overflow -Wno-maybe-uninitialized"
|
||||||
export CXXLAGS="%{optflags} -Wno-stringop-overflow -Wno-maybe-uninitialized"
|
export CXXFLAGS="%{optflags} -Wno-stringop-overflow -Wno-maybe-uninitialized"
|
||||||
|
|
||||||
%define julia_builddir %{_builddir}/%{name}/
|
|
||||||
make %{?_smp_mflags} \
|
make %{?_smp_mflags} \
|
||||||
MARCH=%{julia_march} \
|
MARCH=%{julia_march} \
|
||||||
%ifarch aarch64
|
%ifarch aarch64
|
||||||
JULIA_CPU_TARGET="generic" \
|
JULIA_CPU_TARGET="generic;cortex-a57;thunderx2t99;armv8.2-a,crypto,fullfp16,lse,rdm" \
|
||||||
%endif
|
%endif
|
||||||
|
%ifarch x86_64
|
||||||
|
JULIA_CPU_TARGET="generic;sandybridge,-xsaveopt,clone_all;haswell,-rdrnd,base(1)" \
|
||||||
|
%endif
|
||||||
|
build_prefix=%{_builddir}/%{buildsubdir}/build%{_prefix} \
|
||||||
|
build_libdir=%{_builddir}/%{buildsubdir}/build%{_libdir} \
|
||||||
prefix=%{_prefix} \
|
prefix=%{_prefix} \
|
||||||
bindir=%{_bindir} \
|
bindir=%{_bindir} \
|
||||||
libdir=%{_libdir} \
|
libdir=%{_libdir} \
|
||||||
@ -248,7 +265,42 @@ make %{?_smp_mflags} \
|
|||||||
datarootdir=%{_datarootdir} \
|
datarootdir=%{_datarootdir} \
|
||||||
includedir=%{_includedir} \
|
includedir=%{_includedir} \
|
||||||
sysconfdir=%{_sysconfdir} \
|
sysconfdir=%{_sysconfdir} \
|
||||||
%{juliabuildopts} \
|
USE_BINARYBUILDER=0 \
|
||||||
|
USE_SYSTEM_CSL=1 \
|
||||||
|
USE_SYSTEM_LLVM=1 \
|
||||||
|
USE_SYSTEM_LLD=1 \
|
||||||
|
USE_SYSTEM_LIBUNWIND=1 \
|
||||||
|
USE_SYSTEM_PCRE=1 \
|
||||||
|
USE_SYSTEM_BLAS=1 \
|
||||||
|
OPENBLAS_LIBNAMESUFFIX= \
|
||||||
|
USE_SYSTEM_LAPACK=1 \
|
||||||
|
USE_SYSTEM_LIBBLASTRAMPOLINE=1 \
|
||||||
|
USE_SYSTEM_GMP=1 \
|
||||||
|
USE_SYSTEM_MPFR=1 \
|
||||||
|
USE_SYSTEM_LIBSUITESPARSE=1 \
|
||||||
|
USE_SYSTEM_SUITESPARSE=1 \
|
||||||
|
USE_INTEL_JITEVENTS=0 \
|
||||||
|
USE_SYSTEM_LIBWHICH=1 \
|
||||||
|
USE_SYSTEM_DSFMT=1 \
|
||||||
|
USE_SYSTEM_LIBUV=0 \
|
||||||
|
USE_SYSTEM_UTF8PROC=1 \
|
||||||
|
USE_SYSTEM_LIBGIT2=1 \
|
||||||
|
USE_SYSTEM_LIBSSH2=1 \
|
||||||
|
USE_SYSTEM_MBEDTLS=1 \
|
||||||
|
USE_SYSTEM_CURL=1 \
|
||||||
|
USE_SYSTEM_PATCHELF=1 \
|
||||||
|
USE_SYSTEM_ZLIB=1 \
|
||||||
|
USE_SYSTEM_P7ZIP=1 \
|
||||||
|
USE_SYSTEM_OPENLIBM=1 \
|
||||||
|
USE_BLAS64=0 \
|
||||||
|
LIBBLAS=-lblas \
|
||||||
|
LIBBLASNAME=libblas \
|
||||||
|
LIBLAPACK=-llapack \
|
||||||
|
LIBLAPACKNAME=liblapack \
|
||||||
|
JLDFLAGS="$LDFLAGS" \
|
||||||
|
VERBOSE=1 \
|
||||||
|
LLVM_CONFIG=llvm-config \
|
||||||
|
TAGGED_RELEASE_BANNER="openSUSE %{suse_version} experimental build (unofficial)" \
|
||||||
release debug
|
release debug
|
||||||
|
|
||||||
%check
|
%check
|
||||||
@ -256,11 +308,22 @@ make %{?_smp_mflags} \
|
|||||||
# make %{?_smp_mflags} test
|
# make %{?_smp_mflags} test
|
||||||
|
|
||||||
%install
|
%install
|
||||||
|
# We need these compilation flags to avoid error when building MBEDTLS with
|
||||||
|
# GCC-11.
|
||||||
|
# Ref.: https://build.opensuse.org/package/show/security:tls/mbedtls
|
||||||
|
export CFLAGS="%{optflags} -Wno-stringop-overflow -Wno-maybe-uninitialized"
|
||||||
|
export CXXFLAGS="%{optflags} -Wno-stringop-overflow -Wno-maybe-uninitialized"
|
||||||
|
|
||||||
make install DESTDIR=%{buildroot} \
|
make install DESTDIR=%{buildroot} \
|
||||||
MARCH=%{julia_march} \
|
MARCH=%{julia_march} \
|
||||||
%ifarch aarch64
|
%ifarch aarch64
|
||||||
JULIA_CPU_TARGET="generic" \
|
JULIA_CPU_TARGET="generic;cortex-a57;thunderx2t99;armv8.2-a,crypto,fullfp16,lse,rdm" \
|
||||||
%endif
|
%endif
|
||||||
|
%ifarch x86_64
|
||||||
|
JULIA_CPU_TARGET="generic;sandybridge,-xsaveopt,clone_all;haswell,-rdrnd,base(1)" \
|
||||||
|
%endif
|
||||||
|
build_prefix=%{_builddir}/%{buildsubdir}/build%{_prefix} \
|
||||||
|
build_libdir=%{_builddir}/%{buildsubdir}/build%{_libdir} \
|
||||||
prefix=%{_prefix} \
|
prefix=%{_prefix} \
|
||||||
bindir=%{_bindir} \
|
bindir=%{_bindir} \
|
||||||
libdir=%{_libdir} \
|
libdir=%{_libdir} \
|
||||||
@ -268,14 +331,48 @@ make install DESTDIR=%{buildroot} \
|
|||||||
datarootdir=%{_datarootdir} \
|
datarootdir=%{_datarootdir} \
|
||||||
includedir=%{_includedir} \
|
includedir=%{_includedir} \
|
||||||
sysconfdir=%{_sysconfdir} \
|
sysconfdir=%{_sysconfdir} \
|
||||||
%{juliabuildopts}
|
USE_BINARYBUILDER=0 \
|
||||||
|
USE_SYSTEM_CSL=1 \
|
||||||
|
USE_SYSTEM_LLVM=1 \
|
||||||
|
USE_SYSTEM_LLD=1 \
|
||||||
|
USE_SYSTEM_LIBUNWIND=1 \
|
||||||
|
USE_SYSTEM_PCRE=1 \
|
||||||
|
USE_SYSTEM_BLAS=1 \
|
||||||
|
OPENBLAS_LIBNAMESUFFIX= \
|
||||||
|
USE_SYSTEM_LAPACK=1 \
|
||||||
|
USE_SYSTEM_LIBBLASTRAMPOLINE=1 \
|
||||||
|
USE_SYSTEM_GMP=1 \
|
||||||
|
USE_SYSTEM_MPFR=1 \
|
||||||
|
USE_SYSTEM_LIBSUITESPARSE=1 \
|
||||||
|
USE_SYSTEM_SUITESPARSE=1 \
|
||||||
|
USE_INTEL_JITEVENTS=0 \
|
||||||
|
USE_SYSTEM_LIBWHICH=1 \
|
||||||
|
USE_SYSTEM_DSFMT=1 \
|
||||||
|
USE_SYSTEM_LIBUV=0 \
|
||||||
|
USE_SYSTEM_UTF8PROC=1 \
|
||||||
|
USE_SYSTEM_LIBGIT2=1 \
|
||||||
|
USE_SYSTEM_LIBSSH2=1 \
|
||||||
|
USE_SYSTEM_MBEDTLS=1 \
|
||||||
|
USE_SYSTEM_CURL=1 \
|
||||||
|
USE_SYSTEM_PATCHELF=1 \
|
||||||
|
USE_SYSTEM_ZLIB=1 \
|
||||||
|
USE_SYSTEM_P7ZIP=1 \
|
||||||
|
USE_SYSTEM_OPENLIBM=1 \
|
||||||
|
USE_BLAS64=0 \
|
||||||
|
LIBBLAS=-lblas \
|
||||||
|
LIBBLASNAME=libblas \
|
||||||
|
LIBLAPACK=-llapack \
|
||||||
|
LIBLAPACKNAME=liblapack \
|
||||||
|
JLDFLAGS="$LDFLAGS" \
|
||||||
|
VERBOSE=1 \
|
||||||
|
LLVM_CONFIG=llvm-config \
|
||||||
|
TAGGED_RELEASE_BANNER="openSUSE %{suse_version} experimental build (unofficial)"
|
||||||
|
|
||||||
# GZip man page.
|
# GZip man page.
|
||||||
gzip %{buildroot}/%{_mandir}/man1/julia.1
|
gzip %{buildroot}/%{_mandir}/man1/julia.1
|
||||||
|
|
||||||
# Copy the man page for every executable.
|
# Copy the man page for every executable.
|
||||||
cd %{buildroot}/%{_mandir}/man1/
|
cd %{buildroot}/%{_mandir}/man1/
|
||||||
ln -sf julia.1.gz julia-debug.1.gz
|
|
||||||
|
|
||||||
rm -f %{buildroot}%{_libdir}/julia/libuv.a
|
rm -f %{buildroot}%{_libdir}/julia/libuv.a
|
||||||
rm -f %{buildroot}%{_datadir}/julia/base/build.h
|
rm -f %{buildroot}%{_datadir}/julia/base/build.h
|
||||||
@ -286,14 +383,21 @@ mkdir -p %{buildroot}%{_docdir}/julia
|
|||||||
mv -f %{buildroot}%{_datadir}/doc/julia/* %{buildroot}%{_docdir}/julia/
|
mv -f %{buildroot}%{_datadir}/doc/julia/* %{buildroot}%{_docdir}/julia/
|
||||||
rm -r %{buildroot}%{_datadir}/doc/julia
|
rm -r %{buildroot}%{_datadir}/doc/julia
|
||||||
|
|
||||||
|
ln -sfv /var/lib/ca-certificates/ca-bundle.pem %{buildroot}%{_datadir}/julia/cert.pem # Needed by some julia packages
|
||||||
|
|
||||||
# Remove execution permission on documentation files.
|
# Remove execution permission on documentation files.
|
||||||
chmod -x+X -R %{buildroot}%{_docdir}/julia/*
|
chmod -x+X -R %{buildroot}%{_docdir}/julia/*
|
||||||
|
|
||||||
# Remove hidden files from stdlib.
|
# Remove hidden files and zero-length files and directories from stdlib.
|
||||||
pushd %{buildroot}%{_datadir}/julia/stdlib/
|
pushd %{buildroot}
|
||||||
find . -name ".codecov.yml" -exec rm -rf {} \;
|
find . -name ".codecov.yml" -prune -execdir rm -rf {} \;
|
||||||
find . -name ".gitignore" -exec rm -rf {} \;
|
find . -name ".git*" -prune -execdir rm -rf {} \;
|
||||||
find . -name ".travis.yml" -exec rm -rf {} \;
|
find . -name ".ci" -prune -execdir rm -rf {} \;
|
||||||
|
find . -name ".devcontainer" -prune -execdir rm -rf {} \;
|
||||||
|
find . -name ".travis.yml" -prune -execdir rm -rf {} \;
|
||||||
|
find . -empty -type d -prune -execdir rm -rf {} \;
|
||||||
|
find . -empty -type f -prune -execdir rm -rf {} \;
|
||||||
|
find . -name "*.orig" -prune -execdir rm -rf {} \;
|
||||||
popd
|
popd
|
||||||
|
|
||||||
%if 0%{?compat_mode}
|
%if 0%{?compat_mode}
|
||||||
@ -315,8 +419,6 @@ rm %{buildroot}%{_datadir}/appdata/julia.appdata.xml
|
|||||||
%postun -p /sbin/ldconfig
|
%postun -p /sbin/ldconfig
|
||||||
%post devel -p /sbin/ldconfig
|
%post devel -p /sbin/ldconfig
|
||||||
%postun devel -p /sbin/ldconfig
|
%postun devel -p /sbin/ldconfig
|
||||||
%post debug -p /sbin/ldconfig
|
|
||||||
%postun debug -p /sbin/ldconfig
|
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%doc CONTRIBUTING.md NEWS.md README.md
|
%doc CONTRIBUTING.md NEWS.md README.md
|
||||||
@ -326,10 +428,16 @@ rm %{buildroot}%{_datadir}/appdata/julia.appdata.xml
|
|||||||
%{_datadir}/julia/base
|
%{_datadir}/julia/base
|
||||||
%{_datadir}/julia/base.cache
|
%{_datadir}/julia/base.cache
|
||||||
%{_datadir}/julia/stdlib
|
%{_datadir}/julia/stdlib
|
||||||
|
%{_datadir}/julia/compiled*
|
||||||
%{_datadir}/julia/cert.pem
|
%{_datadir}/julia/cert.pem
|
||||||
|
%dir %{_libexecdir}/julia
|
||||||
|
%{_libexecdir}/julia/*
|
||||||
|
|
||||||
%if !%{?compat_mode}
|
%if !%{?compat_mode}
|
||||||
%dir %{_datadir}/appdata/
|
%dir %{_datadir}/appdata/
|
||||||
%{_datadir}/appdata/julia.appdata.xml
|
%{_datadir}/appdata/julia.appdata.xml
|
||||||
|
%dir %{_docdir}/julia
|
||||||
|
%{_docdir}/julia/*
|
||||||
%endif
|
%endif
|
||||||
%{_datadir}/applications/julia.desktop
|
%{_datadir}/applications/julia.desktop
|
||||||
%{_libdir}/julia/
|
%{_libdir}/julia/
|
||||||
@ -337,11 +445,6 @@ rm %{buildroot}%{_datadir}/appdata/julia.appdata.xml
|
|||||||
%{_mandir}/man1/julia.1%{?ext_man}
|
%{_mandir}/man1/julia.1%{?ext_man}
|
||||||
%dir %{_sysconfdir}/julia/
|
%dir %{_sysconfdir}/julia/
|
||||||
%config(noreplace) %{_sysconfdir}/julia/startup.jl
|
%config(noreplace) %{_sysconfdir}/julia/startup.jl
|
||||||
# Exclude debugging files.
|
|
||||||
%exclude %{_libdir}/julia/libccalltest.so.debug
|
|
||||||
%exclude %{_libdir}/julia/sys-debug.so
|
|
||||||
# Exclude documentation.
|
|
||||||
%exclude %{_docdir}/julia/html
|
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%{_datadir}/julia/test/
|
%{_datadir}/julia/test/
|
||||||
@ -350,21 +453,4 @@ rm %{buildroot}%{_datadir}/appdata/julia.appdata.xml
|
|||||||
%{_libdir}/libjulia.so.%{libjulia_sover_major}
|
%{_libdir}/libjulia.so.%{libjulia_sover_major}
|
||||||
%{_libdir}/libjulia.so
|
%{_libdir}/libjulia.so
|
||||||
|
|
||||||
%files debug
|
|
||||||
%{_bindir}/julia-debug
|
|
||||||
%{_libdir}/libjulia-debug.so.%{libjulia_sover_major}.%{libjulia_sover_minor}
|
|
||||||
%{_libdir}/libjulia-debug.so.%{libjulia_sover_major}
|
|
||||||
%{_libdir}/libjulia-debug.so
|
|
||||||
%{_libdir}/julia/libccalltest.so.debug
|
|
||||||
%{_libdir}/julia/sys-debug.so
|
|
||||||
%{_mandir}/man1/julia-debug.1%{?ext_man}
|
|
||||||
|
|
||||||
%if 0%{?compat_mode} == 0
|
|
||||||
%files doc
|
|
||||||
%{_docdir}/julia
|
|
||||||
%exclude %{_docdir}/julia/CONTRIBUTING.md
|
|
||||||
%exclude %{_docdir}/julia/NEWS.md
|
|
||||||
%exclude %{_docdir}/julia/README.md
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
BUNDLE_DEBUG_LIBS=1 \
|
|
||||||
NO_GIT=1 \
|
|
||||||
USE_SYSTEM_LLVM=0 \
|
|
||||||
USE_SYSTEM_LIBUNWIND=1 \
|
|
||||||
USE_SYSTEM_READLINE=1 \
|
|
||||||
USE_SYSTEM_PCRE=1 \
|
|
||||||
USE_SYSTEM_LIBM=0 \
|
|
||||||
USE_SYSTEM_OPENLIBM=0 \
|
|
||||||
USE_SYSTEM_OPENSPECFUN=1 \
|
|
||||||
USE_SYSTEM_DSFMT=0 \
|
|
||||||
USE_SYSTEM_BLAS=1 \
|
|
||||||
LIBBLAS=-lopenblas \
|
|
||||||
LIBBLASNAME=libopenblas \
|
|
||||||
USE_SYSTEM_LAPACK=1 \
|
|
||||||
LIBLAPACK=-libopenblas \
|
|
||||||
LIBLAPACKNAME=libopenblas \
|
|
||||||
USE_SYSTEM_FFTW=1 \
|
|
||||||
LIBFFTWNAME=libfftw3_threads.so.3 \
|
|
||||||
LIBFFTWFNAME=libfftw3f_threads.so.3 \
|
|
||||||
USE_SYSTEM_GMP=1 \
|
|
||||||
USE_SYSTEM_MPFR=1 \
|
|
||||||
USE_SYSTEM_ARPACK=1 \
|
|
||||||
USE_SYSTEM_SUITESPARSE=1 \
|
|
||||||
USE_SYSTEM_ZLIB=1 \
|
|
||||||
USE_SYSTEM_GRISU=1 \
|
|
||||||
USE_SYSTEM_LIBUV=0 \
|
|
||||||
USE_SYSTEM_UTF8PROC=0 \
|
|
||||||
USE_SYSTEM_PATCHELF=1 \
|
|
||||||
USE_SYSTEM_P7ZIP=1 \
|
|
||||||
USE_SYSTEM_MBEDTLS=0 \
|
|
||||||
USE_SYSTEM_LIBSSH2=1 \
|
|
||||||
USE_SYSTEM_LIBGIT2=0 \
|
|
||||||
USE_SYSTEM_CURL=1 \
|
|
||||||
USE_SYSTEM_NGHTTP2=1 \
|
|
||||||
USE_SYSTEM_CSL=1 \
|
|
||||||
USE_MKL=0 \
|
|
||||||
USE_BLAS64=0 \
|
|
||||||
USE_LLVM_SHLIB=1 \
|
|
||||||
VERBOSE=1 \
|
|
||||||
USECLANG=0 \
|
|
||||||
USE_BINARYBUILDER=0
|
|
12
libblastrampoline-hardcoded-libs.patch
Normal file
12
libblastrampoline-hardcoded-libs.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -ruN julia-1.9.4.orig/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl julia-1.9.4/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl
|
||||||
|
--- julia-1.9.4.orig/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl 2023-12-09 14:21:37.910096392 +0800
|
||||||
|
+++ julia-1.9.4/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl 2023-12-09 14:21:58.006998468 +0800
|
||||||
|
@@ -24,7 +24,7 @@
|
||||||
|
elseif Sys.isapple()
|
||||||
|
"@rpath/libblastrampoline.5.dylib"
|
||||||
|
else
|
||||||
|
- "libblastrampoline.so.5"
|
||||||
|
+ "libblastrampoline.so"
|
||||||
|
end
|
||||||
|
|
||||||
|
function __init__()
|
21
llvm-link-shared.patch
Normal file
21
llvm-link-shared.patch
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
diff -ruN julia-1.9.4.orig/src/Makefile julia/src/Makefile
|
||||||
|
--- julia-1.9.4.orig/src/Makefile 2023-12-08 06:25:53.604185583 +0800
|
||||||
|
+++ julia/src/Makefile 2023-12-08 13:19:45.202318921 +0800
|
||||||
|
@@ -125,7 +125,7 @@
|
||||||
|
# USE_SYSTEM_LLVM == 0
|
||||||
|
ifneq ($(USE_LLVM_SHLIB),1)
|
||||||
|
# USE_LLVM_SHLIB != 1
|
||||||
|
-CG_LLVMLINK += $(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --libs $(CG_LLVM_LIBS) --link-static) $($(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --system-libs 2> /dev/null)
|
||||||
|
+CG_LLVMLINK += $(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --libs $(CG_LLVM_LIBS) --link-shared) $($(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --system-libs 2> /dev/null)
|
||||||
|
else
|
||||||
|
# USE_LLVM_SHLIB == 1
|
||||||
|
ifeq ($(OS), Darwin)
|
||||||
|
@@ -141,7 +141,7 @@
|
||||||
|
endif # USE_LLVM_SHLIB == 1
|
||||||
|
endif # JULIACODEGEN == LLVM
|
||||||
|
|
||||||
|
-RT_LLVM_LINK_ARGS := $(shell $(LLVM_CONFIG_HOST) --libs $(RT_LLVM_LIBS) --system-libs --link-static)
|
||||||
|
+RT_LLVM_LINK_ARGS := $(shell $(LLVM_CONFIG_HOST) --libs $(RT_LLVM_LIBS) --system-libs --link-shared)
|
||||||
|
RT_LLVMLINK += $(LLVM_LDFLAGS) $(RT_LLVM_LINK_ARGS)
|
||||||
|
ifeq ($(OS), WINNT)
|
||||||
|
RT_LLVMLINK += -luuid -lole32
|
16
mbedtls-hardcoded-libs.patch
Normal file
16
mbedtls-hardcoded-libs.patch
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
diff -ruN julia-1.9.4.orig/stdlib/MbedTLS_jll/src/MbedTLS_jll.jl julia/stdlib/MbedTLS_jll/src/MbedTLS_jll.jl
|
||||||
|
--- julia-1.9.4.orig/stdlib/MbedTLS_jll/src/MbedTLS_jll.jl 2023-12-08 17:54:46.804532060 +0800
|
||||||
|
+++ julia/stdlib/MbedTLS_jll/src/MbedTLS_jll.jl 2023-12-09 07:41:38.758431369 +0800
|
||||||
|
@@ -31,9 +31,9 @@
|
||||||
|
const libmbedtls = "@rpath/libmbedtls.14.dylib"
|
||||||
|
const libmbedx509 = "@rpath/libmbedx509.1.dylib"
|
||||||
|
else
|
||||||
|
- const libmbedcrypto = "libmbedcrypto.so.7"
|
||||||
|
- const libmbedtls = "libmbedtls.so.14"
|
||||||
|
- const libmbedx509 = "libmbedx509.so.1"
|
||||||
|
+ const libmbedcrypto = "libmbedcrypto.so"
|
||||||
|
+ const libmbedtls = "libmbedtls.so"
|
||||||
|
+ const libmbedx509 = "libmbedx509.so"
|
||||||
|
end
|
||||||
|
|
||||||
|
function __init__()
|
12
openlibm.patch
Normal file
12
openlibm.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -ruN julia-1.9.4.orig/Make.inc julia/Make.inc
|
||||||
|
--- julia-1.9.4.orig/Make.inc 2023-12-08 06:25:53.640851723 +0800
|
||||||
|
+++ julia/Make.inc 2023-12-08 12:47:48.403970277 +0800
|
||||||
|
@@ -1111,7 +1111,7 @@
|
||||||
|
LIBM := -lm
|
||||||
|
LIBMNAME := libm
|
||||||
|
else
|
||||||
|
-LIBM := -lopenlibm
|
||||||
|
+LIBM := -L/usr/lib -lopenlibm
|
||||||
|
LIBMNAME := libopenlibm
|
||||||
|
endif
|
||||||
|
|
12
use-system-libuv-correctly.patch
Normal file
12
use-system-libuv-correctly.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -ruN julia-1.9.4.orig/Make.inc julia-1.9.4/Make.inc
|
||||||
|
--- julia-1.9.4.orig/Make.inc 2023-12-08 06:25:53.640851723 +0800
|
||||||
|
+++ julia-1.9.4/Make.inc 2023-12-08 10:44:21.177558348 +0800
|
||||||
|
@@ -1116,7 +1116,7 @@
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(USE_SYSTEM_LIBUV), 1)
|
||||||
|
- LIBUV := $(LOCALBASE)/lib/libuv-julia.a
|
||||||
|
+ LIBUV := -luv
|
||||||
|
LIBUV_INC := $(LOCALBASE)/include
|
||||||
|
else
|
||||||
|
LIBUV := $(build_libdir)/libuv.a
|
Loading…
Reference in New Issue
Block a user