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