1From 99b62670d01c6081d883303722726beb65699cbb Mon Sep 17 00:00:00 2001
2From: Zong Li <zong.li@sifive.com>
3Date: Wed, 6 May 2020 01:23:22 -0700
4Subject: [PATCH] Makefile for cross compile SoftFloat 3e
5
6This commit adds a Makefile for cross compile on SoftFloat
73e version. Almost implementation is based on meta-oe porting
8from Fabio Berton <fabio.berton@ossystems.com.br>.
9
10Signed-off-by: Zong Li <zongbox@gmail.com>
11---
12Upstream-Status: Pending
13
14 SoftFloat-3e/build/Linux-Cross-Compile/Makefile   | 325 ++++++++++++++++++++++
15 SoftFloat-3e/build/Linux-Cross-Compile/platform.h |  52 ++++
16 2 files changed, 377 insertions(+)
17 create mode 100644 SoftFloat-3e/build/Linux-Cross-Compile/Makefile
18 create mode 100644 SoftFloat-3e/build/Linux-Cross-Compile/platform.h
19
20diff --git a/SoftFloat-3e/build/Linux-Cross-Compile/Makefile b/SoftFloat-3e/build/Linux-Cross-Compile/Makefile
21new file mode 100644
22index 0000000..4da4bc9
23--- /dev/null
24+++ b/SoftFloat-3e/build/Linux-Cross-Compile/Makefile
25@@ -0,0 +1,325 @@
26+
27+#=============================================================================
28+#
29+# This Makefile template is part of the SoftFloat IEEE Floating-Point
30+# Arithmetic Package, Release 3e, by John R. Hauser.
31+#
32+# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
33+# University of California.  All rights reserved.
34+#
35+# Redistribution and use in source and binary forms, with or without
36+# modification, are permitted provided that the following conditions are met:
37+#
38+#  1. Redistributions of source code must retain the above copyright notice,
39+#     this list of conditions, and the following disclaimer.
40+#
41+#  2. Redistributions in binary form must reproduce the above copyright
42+#     notice, this list of conditions, and the following disclaimer in the
43+#     documentation and/or other materials provided with the distribution.
44+#
45+#  3. Neither the name of the University nor the names of its contributors
46+#     may be used to endorse or promote products derived from this software
47+#     without specific prior written permission.
48+#
49+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
50+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
51+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
52+# DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
53+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
54+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
55+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
56+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
57+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
58+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
59+#
60+#=============================================================================
61+
62+SOURCE_DIR ?= ../../source
63+SPECIALIZE_TYPE ?= 8086
64+
65+SOFTFLOAT_OPTS ?= \
66+  -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
67+  -DSOFTFLOAT_FAST_DIV64TO32
68+
69+DELETE = rm -f
70+C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
71+COMPILE_C = \
72+  ${CC} -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \
73+  $(C_INCLUDES) -O2 -o $@
74+MAKELIB = ${AR} crs $@
75+
76+OBJ = .o
77+LIB = .a
78+
79+OTHER_HEADERS =
80+
81+.PHONY: all
82+all: softfloat$(LIB)
83+
84+OBJS_PRIMITIVES = \
85+  s_compare96M$(OBJ) \
86+  s_compare128M$(OBJ) \
87+  s_shortShiftLeft64To96M$(OBJ) \
88+  s_shortShiftLeftM$(OBJ) \
89+  s_shiftLeftM$(OBJ) \
90+  s_shortShiftRightM$(OBJ) \
91+  s_shortShiftRightJam64$(OBJ) \
92+  s_shortShiftRightJamM$(OBJ) \
93+  s_shiftRightJam32$(OBJ) \
94+  s_shiftRightJam64$(OBJ) \
95+  s_shiftRightJamM$(OBJ) \
96+  s_shiftRightM$(OBJ) \
97+  s_countLeadingZeros8$(OBJ) \
98+  s_countLeadingZeros16$(OBJ) \
99+  s_countLeadingZeros32$(OBJ) \
100+  s_countLeadingZeros64$(OBJ) \
101+  s_addM$(OBJ) \
102+  s_addCarryM$(OBJ) \
103+  s_addComplCarryM$(OBJ) \
104+  s_negXM$(OBJ) \
105+  s_sub1XM$(OBJ) \
106+  s_subM$(OBJ) \
107+  s_mul64To128M$(OBJ) \
108+  s_mul128MTo256M$(OBJ) \
109+  s_approxRecip_1Ks$(OBJ) \
110+  s_approxRecip32_1$(OBJ) \
111+  s_approxRecipSqrt_1Ks$(OBJ) \
112+  s_approxRecipSqrt32_1$(OBJ) \
113+  s_remStepMBy32$(OBJ) \
114+
115+OBJS_SPECIALIZE = \
116+  softfloat_raiseFlags$(OBJ) \
117+  s_f16UIToCommonNaN$(OBJ) \
118+  s_commonNaNToF16UI$(OBJ) \
119+  s_propagateNaNF16UI$(OBJ) \
120+  s_f32UIToCommonNaN$(OBJ) \
121+  s_commonNaNToF32UI$(OBJ) \
122+  s_propagateNaNF32UI$(OBJ) \
123+  s_f64UIToCommonNaN$(OBJ) \
124+  s_commonNaNToF64UI$(OBJ) \
125+  s_propagateNaNF64UI$(OBJ) \
126+  extF80M_isSignalingNaN$(OBJ) \
127+  s_extF80MToCommonNaN$(OBJ) \
128+  s_commonNaNToExtF80M$(OBJ) \
129+  s_propagateNaNExtF80M$(OBJ) \
130+  f128M_isSignalingNaN$(OBJ) \
131+  s_f128MToCommonNaN$(OBJ) \
132+  s_commonNaNToF128M$(OBJ) \
133+  s_propagateNaNF128M$(OBJ) \
134+
135+OBJS_OTHERS = \
136+  s_roundToUI32$(OBJ) \
137+  s_roundMToUI64$(OBJ) \
138+  s_roundToI32$(OBJ) \
139+  s_roundMToI64$(OBJ) \
140+  s_normSubnormalF16Sig$(OBJ) \
141+  s_roundPackToF16$(OBJ) \
142+  s_normRoundPackToF16$(OBJ) \
143+  s_addMagsF16$(OBJ) \
144+  s_subMagsF16$(OBJ) \
145+  s_mulAddF16$(OBJ) \
146+  s_normSubnormalF32Sig$(OBJ) \
147+  s_roundPackToF32$(OBJ) \
148+  s_normRoundPackToF32$(OBJ) \
149+  s_addMagsF32$(OBJ) \
150+  s_subMagsF32$(OBJ) \
151+  s_mulAddF32$(OBJ) \
152+  s_normSubnormalF64Sig$(OBJ) \
153+  s_roundPackToF64$(OBJ) \
154+  s_normRoundPackToF64$(OBJ) \
155+  s_addMagsF64$(OBJ) \
156+  s_subMagsF64$(OBJ) \
157+  s_mulAddF64$(OBJ) \
158+  s_tryPropagateNaNExtF80M$(OBJ) \
159+  s_invalidExtF80M$(OBJ) \
160+  s_normExtF80SigM$(OBJ) \
161+  s_roundPackMToExtF80M$(OBJ) \
162+  s_normRoundPackMToExtF80M$(OBJ) \
163+  s_addExtF80M$(OBJ) \
164+  s_compareNonnormExtF80M$(OBJ) \
165+  s_isNaNF128M$(OBJ) \
166+  s_tryPropagateNaNF128M$(OBJ) \
167+  s_invalidF128M$(OBJ) \
168+  s_shiftNormSigF128M$(OBJ) \
169+  s_roundPackMToF128M$(OBJ) \
170+  s_normRoundPackMToF128M$(OBJ) \
171+  s_addF128M$(OBJ) \
172+  s_mulAddF128M$(OBJ) \
173+  softfloat_state$(OBJ) \
174+  ui32_to_f16$(OBJ) \
175+  ui32_to_f32$(OBJ) \
176+  ui32_to_f64$(OBJ) \
177+  ui32_to_extF80M$(OBJ) \
178+  ui32_to_f128M$(OBJ) \
179+  ui64_to_f16$(OBJ) \
180+  ui64_to_f32$(OBJ) \
181+  ui64_to_f64$(OBJ) \
182+  ui64_to_extF80M$(OBJ) \
183+  ui64_to_f128M$(OBJ) \
184+  i32_to_f16$(OBJ) \
185+  i32_to_f32$(OBJ) \
186+  i32_to_f64$(OBJ) \
187+  i32_to_extF80M$(OBJ) \
188+  i32_to_f128M$(OBJ) \
189+  i64_to_f16$(OBJ) \
190+  i64_to_f32$(OBJ) \
191+  i64_to_f64$(OBJ) \
192+  i64_to_extF80M$(OBJ) \
193+  i64_to_f128M$(OBJ) \
194+  f16_to_ui32$(OBJ) \
195+  f16_to_ui64$(OBJ) \
196+  f16_to_i32$(OBJ) \
197+  f16_to_i64$(OBJ) \
198+  f16_to_ui32_r_minMag$(OBJ) \
199+  f16_to_ui64_r_minMag$(OBJ) \
200+  f16_to_i32_r_minMag$(OBJ) \
201+  f16_to_i64_r_minMag$(OBJ) \
202+  f16_to_f32$(OBJ) \
203+  f16_to_f64$(OBJ) \
204+  f16_to_extF80M$(OBJ) \
205+  f16_to_f128M$(OBJ) \
206+  f16_roundToInt$(OBJ) \
207+  f16_add$(OBJ) \
208+  f16_sub$(OBJ) \
209+  f16_mul$(OBJ) \
210+  f16_mulAdd$(OBJ) \
211+  f16_div$(OBJ) \
212+  f16_rem$(OBJ) \
213+  f16_sqrt$(OBJ) \
214+  f16_eq$(OBJ) \
215+  f16_le$(OBJ) \
216+  f16_lt$(OBJ) \
217+  f16_eq_signaling$(OBJ) \
218+  f16_le_quiet$(OBJ) \
219+  f16_lt_quiet$(OBJ) \
220+  f16_isSignalingNaN$(OBJ) \
221+  f32_to_ui32$(OBJ) \
222+  f32_to_ui64$(OBJ) \
223+  f32_to_i32$(OBJ) \
224+  f32_to_i64$(OBJ) \
225+  f32_to_ui32_r_minMag$(OBJ) \
226+  f32_to_ui64_r_minMag$(OBJ) \
227+  f32_to_i32_r_minMag$(OBJ) \
228+  f32_to_i64_r_minMag$(OBJ) \
229+  f32_to_f16$(OBJ) \
230+  f32_to_f64$(OBJ) \
231+  f32_to_extF80M$(OBJ) \
232+  f32_to_f128M$(OBJ) \
233+  f32_roundToInt$(OBJ) \
234+  f32_add$(OBJ) \
235+  f32_sub$(OBJ) \
236+  f32_mul$(OBJ) \
237+  f32_mulAdd$(OBJ) \
238+  f32_div$(OBJ) \
239+  f32_rem$(OBJ) \
240+  f32_sqrt$(OBJ) \
241+  f32_eq$(OBJ) \
242+  f32_le$(OBJ) \
243+  f32_lt$(OBJ) \
244+  f32_eq_signaling$(OBJ) \
245+  f32_le_quiet$(OBJ) \
246+  f32_lt_quiet$(OBJ) \
247+  f32_isSignalingNaN$(OBJ) \
248+  f64_to_ui32$(OBJ) \
249+  f64_to_ui64$(OBJ) \
250+  f64_to_i32$(OBJ) \
251+  f64_to_i64$(OBJ) \
252+  f64_to_ui32_r_minMag$(OBJ) \
253+  f64_to_ui64_r_minMag$(OBJ) \
254+  f64_to_i32_r_minMag$(OBJ) \
255+  f64_to_i64_r_minMag$(OBJ) \
256+  f64_to_f16$(OBJ) \
257+  f64_to_f32$(OBJ) \
258+  f64_to_extF80M$(OBJ) \
259+  f64_to_f128M$(OBJ) \
260+  f64_roundToInt$(OBJ) \
261+  f64_add$(OBJ) \
262+  f64_sub$(OBJ) \
263+  f64_mul$(OBJ) \
264+  f64_mulAdd$(OBJ) \
265+  f64_div$(OBJ) \
266+  f64_rem$(OBJ) \
267+  f64_sqrt$(OBJ) \
268+  f64_eq$(OBJ) \
269+  f64_le$(OBJ) \
270+  f64_lt$(OBJ) \
271+  f64_eq_signaling$(OBJ) \
272+  f64_le_quiet$(OBJ) \
273+  f64_lt_quiet$(OBJ) \
274+  f64_isSignalingNaN$(OBJ) \
275+  extF80M_to_ui32$(OBJ) \
276+  extF80M_to_ui64$(OBJ) \
277+  extF80M_to_i32$(OBJ) \
278+  extF80M_to_i64$(OBJ) \
279+  extF80M_to_ui32_r_minMag$(OBJ) \
280+  extF80M_to_ui64_r_minMag$(OBJ) \
281+  extF80M_to_i32_r_minMag$(OBJ) \
282+  extF80M_to_i64_r_minMag$(OBJ) \
283+  extF80M_to_f16$(OBJ) \
284+  extF80M_to_f32$(OBJ) \
285+  extF80M_to_f64$(OBJ) \
286+  extF80M_to_f128M$(OBJ) \
287+  extF80M_roundToInt$(OBJ) \
288+  extF80M_add$(OBJ) \
289+  extF80M_sub$(OBJ) \
290+  extF80M_mul$(OBJ) \
291+  extF80M_div$(OBJ) \
292+  extF80M_rem$(OBJ) \
293+  extF80M_sqrt$(OBJ) \
294+  extF80M_eq$(OBJ) \
295+  extF80M_le$(OBJ) \
296+  extF80M_lt$(OBJ) \
297+  extF80M_eq_signaling$(OBJ) \
298+  extF80M_le_quiet$(OBJ) \
299+  extF80M_lt_quiet$(OBJ) \
300+  f128M_to_ui32$(OBJ) \
301+  f128M_to_ui64$(OBJ) \
302+  f128M_to_i32$(OBJ) \
303+  f128M_to_i64$(OBJ) \
304+  f128M_to_ui32_r_minMag$(OBJ) \
305+  f128M_to_ui64_r_minMag$(OBJ) \
306+  f128M_to_i32_r_minMag$(OBJ) \
307+  f128M_to_i64_r_minMag$(OBJ) \
308+  f128M_to_f16$(OBJ) \
309+  f128M_to_f32$(OBJ) \
310+  f128M_to_f64$(OBJ) \
311+  f128M_to_extF80M$(OBJ) \
312+  f128M_roundToInt$(OBJ) \
313+  f128M_add$(OBJ) \
314+  f128M_sub$(OBJ) \
315+  f128M_mul$(OBJ) \
316+  f128M_mulAdd$(OBJ) \
317+  f128M_div$(OBJ) \
318+  f128M_rem$(OBJ) \
319+  f128M_sqrt$(OBJ) \
320+  f128M_eq$(OBJ) \
321+  f128M_le$(OBJ) \
322+  f128M_lt$(OBJ) \
323+  f128M_eq_signaling$(OBJ) \
324+  f128M_le_quiet$(OBJ) \
325+  f128M_lt_quiet$(OBJ) \
326+
327+OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
328+
329+$(OBJS_ALL): \
330+  $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
331+  $(SOURCE_DIR)/include/primitives.h
332+$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
333+  $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
334+  $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
335+  $(SOURCE_DIR)/include/softfloat.h
336+
337+$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
338+	$(COMPILE_C) $(SOURCE_DIR)/$*.c
339+
340+$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
341+	$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
342+
343+softfloat$(LIB): $(OBJS_ALL)
344+	$(DELETE) $@
345+	$(MAKELIB) $^
346+
347+.PHONY: clean
348+clean:
349+	$(DELETE) $(OBJS_ALL) softfloat$(LIB)
350+
351diff --git a/SoftFloat-3e/build/Linux-Cross-Compile/platform.h b/SoftFloat-3e/build/Linux-Cross-Compile/platform.h
352new file mode 100644
353index 0000000..1728c15
354--- /dev/null
355+++ b/SoftFloat-3e/build/Linux-Cross-Compile/platform.h
356@@ -0,0 +1,52 @@
357+
358+/*============================================================================
359+
360+This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic
361+Package, Release 3e, by John R. Hauser.
362+
363+Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of
364+California.  All rights reserved.
365+
366+Redistribution and use in source and binary forms, with or without
367+modification, are permitted provided that the following conditions are met:
368+
369+ 1. Redistributions of source code must retain the above copyright notice,
370+    this list of conditions, and the following disclaimer.
371+
372+ 2. Redistributions in binary form must reproduce the above copyright notice,
373+    this list of conditions, and the following disclaimer in the documentation
374+    and/or other materials provided with the distribution.
375+
376+ 3. Neither the name of the University nor the names of its contributors may
377+    be used to endorse or promote products derived from this software without
378+    specific prior written permission.
379+
380+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
381+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
382+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
383+DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
384+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
385+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
386+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
387+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
388+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
389+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
390+
391+=============================================================================*/
392+
393+/*----------------------------------------------------------------------------
394+*----------------------------------------------------------------------------*/
395+#define LITTLEENDIAN 1
396+
397+/*----------------------------------------------------------------------------
398+*----------------------------------------------------------------------------*/
399+#ifdef __GNUC_STDC_INLINE__
400+#define INLINE inline
401+#else
402+#define INLINE extern inline
403+#endif
404+
405+/*----------------------------------------------------------------------------
406+*----------------------------------------------------------------------------*/
407+#define SOFTFLOAT_BUILTIN_CLZ 1
408+#include "opts-GCC.h"
409--
4102.7.4
411
412