Compare commits
1 commit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af57312bd0 |
7 changed files with 357 additions and 71 deletions
|
|
@ -1,17 +1,17 @@
|
|||
From 04e523e937625bf30d775681c11e00f6dc6fc00a Mon Sep 17 00:00:00 2001
|
||||
From 507a1382cb82160c2a6cfc0ea5bcb3e33ece7307 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 24 Jun 2014 10:00:15 +0100
|
||||
Subject: [PATCH 1/2] Don't add rpaths to libraries.
|
||||
Subject: [PATCH 1/4] Don't add rpaths to libraries.
|
||||
|
||||
---
|
||||
configure.ac | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 3754ad8a39..fb60c7c14c 100644
|
||||
index 0c9d63859a..48aa9f0a29 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1422,8 +1422,6 @@ AS_IF([test x"$enable_shared" != "xno"],
|
||||
@@ -1221,8 +1221,6 @@ AS_IF([test x"$enable_shared" != "xno"],
|
||||
[[*-*-openbsd7.[3-9]|*-*-openbsd[89].*]],
|
||||
[mkdll_flags="${mkdll_flags} -Wl,--no-execute-only"])
|
||||
oc_ldflags="$oc_ldflags -Wl,-E"
|
||||
|
|
@ -21,5 +21,5 @@ index 3754ad8a39..fb60c7c14c 100644
|
|||
supports_shared_libraries=true],
|
||||
[mkdll='shared-libs-not-available'])
|
||||
--
|
||||
2.52.0
|
||||
2.44.0
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,28 @@
|
|||
From ef549c9a97838331877b139f407269db2a0fc691 Mon Sep 17 00:00:00 2001
|
||||
From edd903fc73b98eb784b307a47110985967cb1d09 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 29 May 2012 20:44:18 +0100
|
||||
Subject: [PATCH 2/2] configure: Allow user defined C compiler flags.
|
||||
Subject: [PATCH 2/4] configure: Allow user defined C compiler flags.
|
||||
|
||||
---
|
||||
configure.ac | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index fb60c7c14c..f6a493ccf5 100644
|
||||
index 48aa9f0a29..fc29c88f50 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3243,7 +3243,7 @@ AC_CONFIG_COMMANDS_PRE([
|
||||
@@ -869,6 +869,10 @@ AS_CASE([$ocaml_cc_vendor],
|
||||
internal_cflags="$cc_warnings"],
|
||||
[common_cflags="-O"])
|
||||
|
||||
+# Allow CFLAGS and LDFLAGS to be added.
|
||||
+common_cflags="$common_cflags $CFLAGS"
|
||||
+cclibs="$cclibs $LDFLAGS"
|
||||
+
|
||||
# Enable SSE2 on x86 mingw to avoid using 80-bit registers.
|
||||
AS_CASE([$host],
|
||||
[i686-*-mingw32*],
|
||||
@@ -2648,7 +2652,7 @@ AC_CONFIG_COMMANDS_PRE([
|
||||
[mkexedebugflag="${mkexe_ldflags_prefix}${mkexedebugflag}"])
|
||||
mkdll_ldflags=""
|
||||
AS_IF([test -n "${LDFLAGS}"],
|
||||
|
|
@ -20,6 +31,3 @@ index fb60c7c14c..f6a493ccf5 100644
|
|||
mkdll_ldflags="${mkdll_ldflags} ${mkexe_ldflags_prefix}${flag}"
|
||||
done
|
||||
mkdll_ldflags_exp="$mkdll_ldflags"])
|
||||
--
|
||||
2.52.0
|
||||
|
||||
|
|
|
|||
114
0003-flambda-Improve-transitive-closure-in-invariant_para.patch
Normal file
114
0003-flambda-Improve-transitive-closure-in-invariant_para.patch
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
From acdc441ff1acb5390467e649bc9a9bfddd7df774 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Thu, 9 May 2024 10:03:23 +0200
|
||||
Subject: [PATCH 3/4] flambda: Improve transitive closure in
|
||||
invariant_params_in_recursion (#13150)
|
||||
|
||||
The old implementation did not really exploit the sparseness of the
|
||||
graph because it used newly discovered edges in later iterations.
|
||||
The new implementation processes each original relation only once
|
||||
per starting node, and does not re-process newly discovered relations.
|
||||
|
||||
(cherry picked from commit 787b4fbb5aaf3728de54ca240ba9ca0bf56ace60)
|
||||
---
|
||||
Changes | 5 ++
|
||||
middle_end/flambda/invariant_params.ml | 66 ++++++++++----------------
|
||||
2 files changed, 31 insertions(+), 40 deletions(-)
|
||||
|
||||
diff --git a/Changes b/Changes
|
||||
index 75842fc216..d26512067d 100644
|
||||
--- a/Changes
|
||||
+++ b/Changes
|
||||
@@ -1,6 +1,11 @@
|
||||
OCaml 5.2.1 (18 November 2024)
|
||||
------------------------------
|
||||
|
||||
+- #13150: improve a transitive-closure computation algorithm in the flambda
|
||||
+ middle-end to avoid a compilation time blowup on Menhir-generated code
|
||||
+ (Florian Weimer, review by Gabriel Scherer and Pierre Chambart,
|
||||
+ report by Richard Jones)
|
||||
+
|
||||
- #13207: Be sure to reload the register caching the exception handler in
|
||||
caml_c_call and caml_c_call_stack_args, as its value may have been changed
|
||||
if the OCaml stack is expanded during a callback.
|
||||
diff --git a/middle_end/flambda/invariant_params.ml b/middle_end/flambda/invariant_params.ml
|
||||
index 414d39310a..dba63970fd 100644
|
||||
--- a/middle_end/flambda/invariant_params.ml
|
||||
+++ b/middle_end/flambda/invariant_params.ml
|
||||
@@ -65,47 +65,33 @@ let implies relation from to_ =
|
||||
relation
|
||||
|
||||
let transitive_closure state =
|
||||
- let union s1 s2 =
|
||||
- match s1, s2 with
|
||||
- | Top, _ | _, Top -> Top
|
||||
- | Implication s1, Implication s2 ->
|
||||
- Implication (Variable.Pair.Set.union s1 s2)
|
||||
+ (* Depth-first search for all implications for one argument.
|
||||
+ Arguments are moved from candidate to frontier, assuming
|
||||
+ they are newly added to the result. *)
|
||||
+ let rec loop candidate frontier result =
|
||||
+ match (candidate, frontier) with
|
||||
+ | ([], []) -> Implication result
|
||||
+ | ([], frontier::fs) ->
|
||||
+ (* Obtain fresh candidate for the frontier argument. *)
|
||||
+ (match Variable.Pair.Map.find frontier state with
|
||||
+ | exception Not_found -> loop [] fs result
|
||||
+ | Top -> Top
|
||||
+ | Implication candidate ->
|
||||
+ loop (Variable.Pair.Set.elements candidate) fs result)
|
||||
+ | (candidate::cs, frontier) ->
|
||||
+ let result' = Variable.Pair.Set.add candidate result in
|
||||
+ if result' != result then
|
||||
+ (* Result change means candidate becomes part of frontier. *)
|
||||
+ loop cs (candidate :: frontier) result'
|
||||
+ else
|
||||
+ loop cs frontier result
|
||||
in
|
||||
- let equal s1 s2 =
|
||||
- match s1, s2 with
|
||||
- | Top, Implication _ | Implication _, Top -> false
|
||||
- | Top, Top -> true
|
||||
- | Implication s1, Implication s2 -> Variable.Pair.Set.equal s1 s2
|
||||
- in
|
||||
- let update arg state =
|
||||
- let original_set =
|
||||
- try Variable.Pair.Map.find arg state with
|
||||
- | Not_found -> Implication Variable.Pair.Set.empty
|
||||
- in
|
||||
- match original_set with
|
||||
- | Top -> state
|
||||
- | Implication arguments ->
|
||||
- let set =
|
||||
- Variable.Pair.Set.fold
|
||||
- (fun orig acc->
|
||||
- let set =
|
||||
- try Variable.Pair.Map.find orig state with
|
||||
- | Not_found -> Implication Variable.Pair.Set.empty in
|
||||
- union set acc)
|
||||
- arguments original_set
|
||||
- in
|
||||
- Variable.Pair.Map.add arg set state
|
||||
- in
|
||||
- let once state =
|
||||
- Variable.Pair.Map.fold (fun arg _ state -> update arg state) state state
|
||||
- in
|
||||
- let rec fp state =
|
||||
- let state' = once state in
|
||||
- if Variable.Pair.Map.equal equal state state'
|
||||
- then state
|
||||
- else fp state'
|
||||
- in
|
||||
- fp state
|
||||
+ Variable.Pair.Map.map
|
||||
+ (fun set ->
|
||||
+ match set with
|
||||
+ | Top -> Top
|
||||
+ | Implication set -> loop [] (Variable.Pair.Set.elements set) set)
|
||||
+ state
|
||||
|
||||
(* CR-soon pchambart: to move to Flambda_utils and document
|
||||
mshinwell: I think this calculation is basically the same as
|
||||
--
|
||||
2.44.0
|
||||
|
||||
178
0004-Compute-more-accurate-instruction-sizes-for-branch-r.patch
Normal file
178
0004-Compute-more-accurate-instruction-sizes-for-branch-r.patch
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
From 4eb80b13779125fcd76a445ab0004ca064fab634 Mon Sep 17 00:00:00 2001
|
||||
From: Miod Vallat <miod@tarides.com>
|
||||
Date: Fri, 7 Jun 2024 06:19:45 +0000
|
||||
Subject: [PATCH 4/4] Compute more accurate instruction sizes for branch
|
||||
relaxation.
|
||||
|
||||
(cherry picked from commit 114ddae2d4c85391a4f939dc6623424ae35a07aa)
|
||||
---
|
||||
Changes | 4 ++
|
||||
asmcomp/power/emit.mlp | 87 ++++++++++++++++++++++++------------------
|
||||
2 files changed, 53 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/Changes b/Changes
|
||||
index 53bb5369b9..1a81509247 100644
|
||||
--- a/Changes
|
||||
+++ b/Changes
|
||||
@@ -6,6 +6,10 @@ OCaml 5.2.1 (18 November 2024)
|
||||
(Florian Weimer, review by Gabriel Scherer and Pierre Chambart,
|
||||
report by Richard Jones)
|
||||
|
||||
+- #13221: Compute more accurate instruction sizes for branch relocation on
|
||||
+ POWER.
|
||||
+ (Miod Vallat, review by Gabriel Scherer)
|
||||
+
|
||||
- #13207: Be sure to reload the register caching the exception handler in
|
||||
caml_c_call and caml_c_call_stack_args, as its value may have been changed
|
||||
if the OCaml stack is expanded during a callback.
|
||||
diff --git a/asmcomp/power/emit.mlp b/asmcomp/power/emit.mlp
|
||||
index 47f5419a92..fdf22996fa 100644
|
||||
--- a/asmcomp/power/emit.mlp
|
||||
+++ b/asmcomp/power/emit.mlp
|
||||
@@ -177,6 +177,28 @@ let emit_tocload emit_dest dest entry =
|
||||
|
||||
(* Output a load or store operation *)
|
||||
|
||||
+let load_mnemonic = function
|
||||
+ | Byte_unsigned -> "lbz"
|
||||
+ | Byte_signed -> "lbz"
|
||||
+ | Sixteen_unsigned -> "lhz"
|
||||
+ | Sixteen_signed -> "lha"
|
||||
+ | Thirtytwo_unsigned -> "lwz"
|
||||
+ | Thirtytwo_signed -> "lwa"
|
||||
+ | Word_int | Word_val -> "ld"
|
||||
+ | Single -> "lfs"
|
||||
+ | Double -> "lfd"
|
||||
+
|
||||
+let store_mnemonic = function
|
||||
+ | Byte_unsigned | Byte_signed -> "stb"
|
||||
+ | Sixteen_unsigned | Sixteen_signed -> "sth"
|
||||
+ | Thirtytwo_unsigned | Thirtytwo_signed -> "stw"
|
||||
+ | Word_int | Word_val -> "std"
|
||||
+ | Single -> "stfs"
|
||||
+ | Double -> "stfd"
|
||||
+
|
||||
+let store_needs_lwsync chunk assignment =
|
||||
+ assignment && (chunk = Word_int || chunk = Word_val)
|
||||
+
|
||||
let valid_offset instr ofs =
|
||||
ofs land 3 = 0 || (instr <> "ld" && instr <> "std" && instr <> "lwa")
|
||||
|
||||
@@ -383,11 +405,17 @@ module BR = Branch_relaxation.Make (struct
|
||||
|
||||
let tocload_size = 2
|
||||
|
||||
- let load_store_size = function
|
||||
+ let load_store_size instr = function
|
||||
| Ibased(_s, d) ->
|
||||
- let (_lo, hi) = low_high_s d in
|
||||
- tocload_size + (if hi = 0 then 1 else 2)
|
||||
- | Iindexed ofs -> if is_immediate ofs then 1 else 3
|
||||
+ let (lo, hi) = low_high_s d in
|
||||
+ tocload_size +
|
||||
+ (if hi <> 0 then 1 else 0) +
|
||||
+ (if valid_offset instr lo then 1 else 2)
|
||||
+ | Iindexed ofs ->
|
||||
+ if is_immediate ofs && valid_offset instr ofs then 1 else begin
|
||||
+ let (lo, _hi) = low_high_u ofs in
|
||||
+ if lo <> 0 then 3 else 2
|
||||
+ end
|
||||
| Iindexed2 -> 1
|
||||
|
||||
let instr_size f = function
|
||||
@@ -415,16 +443,16 @@ module BR = Branch_relaxation.Make (struct
|
||||
else if alloc then tocload_size + 2
|
||||
else 5
|
||||
| Lop(Istackoffset _) -> 1
|
||||
- | Lop(Iload {memory_chunk; addressing_mode; _ }) ->
|
||||
- if memory_chunk = Byte_signed
|
||||
- then load_store_size addressing_mode + 1
|
||||
- else load_store_size addressing_mode
|
||||
+ | Lop(Iload {memory_chunk; addressing_mode; is_atomic }) ->
|
||||
+ let loadinstr = load_mnemonic memory_chunk in
|
||||
+ (if is_atomic then 4 else 0) +
|
||||
+ (if memory_chunk = Byte_signed then 1 else 0) +
|
||||
+ load_store_size loadinstr addressing_mode
|
||||
| Lop(Istore(chunk, addr, assignment)) ->
|
||||
- (match chunk with
|
||||
- | Single -> 1
|
||||
- | Word_int | Word_val when assignment -> 1
|
||||
- | _ -> 0)
|
||||
- + load_store_size addr
|
||||
+ let storeinstr = store_mnemonic chunk in
|
||||
+ (if chunk = Single then 1 else 0) +
|
||||
+ (if store_needs_lwsync chunk assignment then 1 else 0) +
|
||||
+ load_store_size storeinstr addr
|
||||
| Lop(Ialloc _) -> 5
|
||||
| Lop(Ispecific(Ialloc_far _)) -> 6
|
||||
| Lop(Ipoll { return_label = Some(_) }) -> 5
|
||||
@@ -442,12 +470,12 @@ module BR = Branch_relaxation.Make (struct
|
||||
| Lop(Ispecific(Icheckbound_imm_far _)) -> 3
|
||||
| Lop(Iintop_imm _) -> 1
|
||||
| Lop(Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf) -> 1
|
||||
- | Lop(Ifloatofint) -> 9
|
||||
- | Lop(Iintoffloat) -> 4
|
||||
+ | Lop(Ifloatofint) -> 3
|
||||
+ | Lop(Iintoffloat) -> 3
|
||||
| Lop(Iopaque) -> 0
|
||||
| Lop(Ispecific _) -> 1
|
||||
- | Lop (Idls_get) -> 1
|
||||
- | Lop (Ireturn_addr) -> 1
|
||||
+ | Lop(Idls_get) -> 1
|
||||
+ | Lop(Ireturn_addr) -> 1
|
||||
| Lreloadretaddr -> 2
|
||||
| Lreturn -> 2
|
||||
| Llabel _ -> 0
|
||||
@@ -457,7 +485,7 @@ module BR = Branch_relaxation.Make (struct
|
||||
1 + (if lbl0 = None then 0 else 1)
|
||||
+ (if lbl1 = None then 0 else 1)
|
||||
+ (if lbl2 = None then 0 else 1)
|
||||
- | Lswitch _ -> 5 + tocload_size
|
||||
+ | Lswitch _ -> 7 + tocload_size
|
||||
| Lentertrap -> 1
|
||||
| Ladjust_trap_depth _ -> 0
|
||||
| Lpushtrap _ -> 4 + tocload_size
|
||||
@@ -705,17 +733,7 @@ let emit_instr env i =
|
||||
` addi 1, 1, {emit_int (-n)}\n`;
|
||||
adjust_stack_offset env n
|
||||
| Lop(Iload { memory_chunk; addressing_mode; is_atomic }) ->
|
||||
- let loadinstr =
|
||||
- match memory_chunk with
|
||||
- | Byte_unsigned -> "lbz"
|
||||
- | Byte_signed -> "lbz"
|
||||
- | Sixteen_unsigned -> "lhz"
|
||||
- | Sixteen_signed -> "lha"
|
||||
- | Thirtytwo_unsigned -> "lwz"
|
||||
- | Thirtytwo_signed -> "lwa"
|
||||
- | Word_int | Word_val -> "ld"
|
||||
- | Single -> "lfs"
|
||||
- | Double -> "lfd" in
|
||||
+ let loadinstr = load_mnemonic memory_chunk in
|
||||
if is_atomic then
|
||||
` sync\n`;
|
||||
emit_load_store loadinstr addressing_mode i.arg 0 i.res.(0);
|
||||
@@ -731,19 +749,12 @@ let emit_instr env i =
|
||||
` frsp {emit_reg tmp}, {emit_reg i.arg.(0)}\n`;
|
||||
emit_load_store "stfs" addr i.arg 1 tmp
|
||||
| Lop(Istore(chunk, addr, assignment)) ->
|
||||
- let storeinstr =
|
||||
- match chunk with
|
||||
- | Byte_unsigned | Byte_signed -> "stb"
|
||||
- | Sixteen_unsigned | Sixteen_signed -> "sth"
|
||||
- | Thirtytwo_unsigned | Thirtytwo_signed -> "stw"
|
||||
- | Word_int | Word_val -> "std"
|
||||
- | Single -> assert false
|
||||
- | Double -> "stfd" in
|
||||
+ let storeinstr = store_mnemonic chunk in
|
||||
(* Non-initializing stores need a memory barrier to follow the
|
||||
Multicore OCaml memory model. Stores of size other than
|
||||
Word_int and Word_val do not follow the memory model and therefore
|
||||
do not need a barrier *)
|
||||
- if assignment && (chunk = Word_int || chunk = Word_val) then
|
||||
+ if store_needs_lwsync chunk assignment then
|
||||
` lwsync\n`;
|
||||
emit_load_store storeinstr addr i.arg 1 i.arg.(0)
|
||||
| Lop(Ialloc { bytes; dbginfo }) ->
|
||||
--
|
||||
2.44.0
|
||||
|
||||
100
ocaml.spec
100
ocaml.spec
|
|
@ -1,6 +1,13 @@
|
|||
# Don't add -Wl,-dT,<build dir>
|
||||
%undefine _package_note_flags
|
||||
|
||||
# OCaml 5.1 broke building with LTO. A file prims.c is generated with
|
||||
# primitive function declarations, all with "void" for their parameter
|
||||
# list. This does not match the real definitions, leading to lots of
|
||||
# -Wlto-type-mismatch warnings. These change the output of the tests,
|
||||
# leading to many failed tests. This is still a problem in 5.2.
|
||||
%global _lto_cflags %{nil}
|
||||
|
||||
# OCaml has a bytecode backend that works on anything with a C
|
||||
# compiler, and a native code backend available on a subset of
|
||||
# architectures. A further subset of architectures support native
|
||||
|
|
@ -25,7 +32,7 @@ ExcludeArch: %{ix86}
|
|||
|
||||
# These are all the architectures that the tests run on. The tests
|
||||
# take a long time to run, so don't run them on slow machines.
|
||||
%global test_arches %{arm64} %{power64} %{riscv64} s390x %{x86_64}
|
||||
%global test_arches aarch64 %{power64} riscv64 s390x x86_64
|
||||
# These are the architectures for which the tests must pass otherwise
|
||||
# the build will fail.
|
||||
#global test_arches_required aarch64 ppc64le x86_64
|
||||
|
|
@ -38,8 +45,8 @@ ExcludeArch: %{ix86}
|
|||
%global rcver %{nil}
|
||||
|
||||
Name: ocaml
|
||||
Version: 5.5.0
|
||||
Release: 2%{?dist}
|
||||
Version: 5.2.1
|
||||
Release: 1%{?dist}
|
||||
|
||||
Summary: OCaml compiler and programming environment
|
||||
|
||||
|
|
@ -61,7 +68,7 @@ Source2: ocaml_files.py
|
|||
#
|
||||
# https://pagure.io/fedora-ocaml
|
||||
#
|
||||
# Current branch: fedora-45-5.4.1
|
||||
# Current branch: fedora-41-5.2.0
|
||||
#
|
||||
# ALTERNATIVELY add a patch to the end of the list (leaving the
|
||||
# existing patches unchanged) adding a comment to note that it should
|
||||
|
|
@ -71,17 +78,31 @@ Source2: ocaml_files.py
|
|||
Patch: 0001-Don-t-add-rpaths-to-libraries.patch
|
||||
Patch: 0002-configure-Allow-user-defined-C-compiler-flags.patch
|
||||
|
||||
# Improve performance of flambda optimizer in some cases. Required to
|
||||
# compiler blow-up in coccinelle package. Upstream, but not included
|
||||
# in 5.2 branch.
|
||||
# https://github.com/ocaml/ocaml/pull/13150
|
||||
Patch: 0003-flambda-Improve-transitive-closure-in-invariant_para.patch
|
||||
|
||||
# Fix for ppc64le code generation issue found after 5.2.0 was released.
|
||||
# https://github.com/ocaml/ocaml/issues/13220
|
||||
# https://github.com/ocaml/ocaml/commit/114ddae2d4c85391a4f939dc6623424ae35a07aa
|
||||
Patch: 0004-Compute-more-accurate-instruction-sizes-for-branch-r.patch
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: git-core
|
||||
BuildRequires: git
|
||||
BuildRequires: gcc
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: gawk
|
||||
BuildRequires: hardlink
|
||||
BuildRequires: perl-interpreter
|
||||
BuildRequires: annobin-annocheck
|
||||
BuildRequires: util-linux
|
||||
BuildRequires: /usr/bin/annocheck
|
||||
BuildRequires: pkgconfig(libzstd)
|
||||
|
||||
# Documentation requirements
|
||||
BuildRequires: asciidoc
|
||||
BuildRequires: python3-pygments
|
||||
|
||||
# ocamlopt runs gcc to link binaries. Because Fedora includes
|
||||
# hardening flags automatically, redhat-rpm-config is also required.
|
||||
|
|
@ -101,15 +122,19 @@ Requires: ocaml-runtime%{?_isa} = %{version}-%{release}
|
|||
BuildRequires: ocaml-srpm-macros >= 10
|
||||
Requires: ocaml-srpm-macros >= 10
|
||||
|
||||
# Bundles an MD5 implementation in runtime/caml/md5.h and runtime/md5.c
|
||||
Provides: bundled(md5-plumb)
|
||||
|
||||
Provides: ocaml(compiler) = %{version}
|
||||
|
||||
%if %{native_compiler}
|
||||
%global __ocaml_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte' -i Dynlink_cmo_format -i Dynlink_cmxs_format
|
||||
%global __ocaml_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte'
|
||||
%else
|
||||
%global __ocaml_requires_opts -c -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte' -i Backend_intf -i Inlining_decision_intf -i Simplify_boxed_integer_ops_intf
|
||||
%endif
|
||||
%global __ocaml_provides_opts -f '%{buildroot}%{_bindir}/ocamlrun %{buildroot}%{_bindir}/ocamlobjinfo.byte'
|
||||
|
||||
|
||||
%description
|
||||
OCaml is a high-level, strongly-typed, functional and object-oriented
|
||||
programming language from the ML family of languages.
|
||||
|
|
@ -126,11 +151,9 @@ and a comprehensive library.
|
|||
# and runtime/md5.c
|
||||
License: LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception AND LicenseRef-Fedora-Public-Domain
|
||||
Summary: OCaml runtime environment
|
||||
Requires: util-linux
|
||||
Provides: ocaml(runtime) = %{version}
|
||||
|
||||
# Bundles an MD5 implementation in runtime/caml/md5.h and runtime/md5.c
|
||||
Provides: bundled(md5-plumb)
|
||||
|
||||
%description runtime
|
||||
OCaml is a high-level, strongly-typed, functional and object-oriented
|
||||
programming language from the ML family of languages.
|
||||
|
|
@ -248,7 +271,7 @@ sed -i '/^EXTRACAMLFLAGS=/aLINKOPTS=-cclib -lm' otherlibs/unix/Makefile
|
|||
--disable-native-compiler \
|
||||
--disable-native-toplevel \
|
||||
%endif
|
||||
%ifarch %{x86_64} %{arm64}
|
||||
%ifarch x86_64
|
||||
%if 0%{?_include_frame_pointers}
|
||||
--enable-frame-pointers \
|
||||
%endif
|
||||
|
|
@ -296,10 +319,7 @@ make -j1 tests ||:
|
|||
|
||||
%install
|
||||
%make_install
|
||||
|
||||
# OCaml 5.5.0 uses relative paths in ld.conf by default to support relocatable
|
||||
# OCaml, which we don't need. Overwrite ld.conf with the absolute path.
|
||||
echo %{_libdir}/ocaml/stublibs > $RPM_BUILD_ROOT%{_libdir}/ocaml/ld.conf
|
||||
perl -pi -e "s|^$RPM_BUILD_ROOT||" $RPM_BUILD_ROOT%{_libdir}/ocaml/ld.conf
|
||||
|
||||
echo %{version} > $RPM_BUILD_ROOT%{_libdir}/ocaml/fedora-ocaml-release
|
||||
|
||||
|
|
@ -312,6 +332,9 @@ install -m 0644 %{SOURCE1} $RPM_BUILD_ROOT%{rpmmacrodir}/macros.ocaml-rpm
|
|||
mkdir -p $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
|
||||
install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
|
||||
|
||||
# Link, rather than copy, identical binaries
|
||||
hardlink -t $RPM_BUILD_ROOT%{_libdir}/ocaml/stublibs
|
||||
|
||||
|
||||
%files
|
||||
%license LICENSE
|
||||
|
|
@ -354,6 +377,7 @@ install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
|
|||
%endif
|
||||
|
||||
%{_libdir}/ocaml/expunge
|
||||
%{_libdir}/ocaml/ld.conf
|
||||
%{_libdir}/ocaml/Makefile.config
|
||||
|
||||
%{_libdir}/ocaml/*.a
|
||||
|
|
@ -361,9 +385,11 @@ install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
|
|||
%{_libdir}/ocaml/*.cmxa
|
||||
%{_libdir}/ocaml/*.cmx
|
||||
%{_libdir}/ocaml/*.o
|
||||
%{_libdir}/ocaml/libasmrun_shared.so
|
||||
%endif
|
||||
%{_libdir}/ocaml/*.mli
|
||||
%{_libdir}/ocaml/sys.ml.in
|
||||
%{_libdir}/ocaml/libcamlrun_shared.so
|
||||
|
||||
%{_libdir}/ocaml/{dynlink,runtime_events,str,threads,unix}/*.mli
|
||||
%if %{native_compiler}
|
||||
|
|
@ -384,18 +410,12 @@ install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
|
|||
%doc README.html Changes
|
||||
%license LICENSE
|
||||
%{_bindir}/ocamlrun
|
||||
%{_bindir}/*ocamlrun-a100
|
||||
%{_bindir}/ocamlrund
|
||||
%{_bindir}/*ocamlrund-a100
|
||||
%{_bindir}/ocamlruni
|
||||
%{_bindir}/*ocamlruni-a100
|
||||
%dir %{_libdir}/ocaml
|
||||
%{_libdir}/ocaml/libasmrun*.so
|
||||
%{_libdir}/ocaml/libcamlrun*.so
|
||||
%{_libdir}/ocaml/*.cmo
|
||||
%{_libdir}/ocaml/*.cmi
|
||||
%{_libdir}/ocaml/*.cma
|
||||
%{_libdir}/ocaml/ld.conf
|
||||
%{_libdir}/ocaml/stublibs
|
||||
%dir %{_libdir}/ocaml/dynlink
|
||||
%{_libdir}/ocaml/dynlink/META
|
||||
|
|
@ -455,42 +475,8 @@ install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_rpmconfigdir}/redhat
|
|||
|
||||
|
||||
%changelog
|
||||
* Thu Jul 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5.5.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
|
||||
|
||||
* Tue Jun 23 2026 Jerry James <loganjerry@gmail.com> - 5.5.0-1
|
||||
- New upstream version 5.5.0 (RHBZ#2442622)
|
||||
- Drop upstreamed fix for arm64 frame pointers
|
||||
- Reenable LTO
|
||||
- Move ld.conf, libasmrun, and libcamlrun to ocaml-runtime
|
||||
- Drop hardlink dependency; rpm now does this by default
|
||||
- Drop unused utilx-linux dependency
|
||||
|
||||
* Thu Feb 26 2026 Richard W.M. Jones <rjones@redhat.com> - 5.4.1-4
|
||||
- Backport fix for arm64 frame pointers
|
||||
|
||||
* Fri Feb 20 2026 Richard W.M. Jones <rjones@redhat.com> - 5.4.1-1
|
||||
- New upstream version 5.4.1 (RHBZ#2440356)
|
||||
|
||||
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5.4.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
|
||||
|
||||
* Mon Oct 13 2025 Richard W.M. Jones <rjones@redhat.com> - 5.4.0-1
|
||||
- New upstream version 5.4.0 (RHBZ#2368289)
|
||||
|
||||
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.0-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||
|
||||
* Sun Jun 22 2025 Yaakov Selkowitz <yselkowi@redhat.com> - 5.3.0-3
|
||||
- Fix RPM macros for Python 3.14
|
||||
|
||||
* Fri Jan 17 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||
|
||||
* Thu Jan 9 2025 Jerry James <loganjerry@gmail.com> - 5.3.0-1
|
||||
- New upstream version 5.3.0
|
||||
- Drop upstreamed patches
|
||||
- BR git-core instead of git
|
||||
* Tue Jan 28 2025 Jerry James <loganjerry@gmail.com> - 5.2.1-1
|
||||
- New upstream version 5.2.1
|
||||
|
||||
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.0-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
|
|
|||
|
|
@ -429,7 +429,7 @@ if __name__ == "__main__":
|
|||
parser.add_argument('-i', '--install',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='install files instead of generating %%files')
|
||||
help='install files instead of generating %files')
|
||||
parser.add_argument('-n', '--no-devel',
|
||||
action='store_true',
|
||||
default=False,
|
||||
|
|
|
|||
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (ocaml-5.5.0.tar.gz) = bf13c18cd1fc7b2e5e9623024ea8623710f646ff2fbc0f59dab70e4d4318ed8623bdcc3ec59ce37af07af2b767f520dea23fb474c26297b3e858b6c8e080b4e6
|
||||
SHA512 (ocaml-5.2.1.tar.gz) = b0803dd90a0ac6fdf609345c481b3dc637eb9cbb9bea296cfd79f6913ab34b9e02970bcddd83e8bc419cbe1c4694bb7889146615841b5ee101081a82eee024e2
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue