summaryrefslogtreecommitdiff
path: root/libgcc/Makefile
blob: 0e96527d04c507f1b3e53561bf49755dc48fdf4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
ifneq (,$(DEVKITARM))
    ifneq (,$(wildcard $(DEVKITARM)/bin))	    
        include $(DEVKITARM)/base_tools
        DKA_EXISTS=1
    else
        DKA_EXISTS=0
    endif
else
DKA_EXISTS=0
endif

ifneq ($(DKA_EXISTS),1)
PREFIX := arm-none-eabi-
export AR := $(PREFIX)ar
export AS := $(PREFIX)as
endif

CC1 = ../old_agbcc

libgcc.a: libgcc1.a libgcc2.a fp-bit.o dp-bit.o
	$(AR) -x libgcc1.a;
	$(AR) -x libgcc2.a;
	$(AR) -rc libgcc.a *.o

LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX

LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \
_lshrdi3 _ashldi3 _ashrdi3 _ffsdi2 \
_udiv_w_sdiv _udivmoddi4 _cmpdi2 _ucmpdi2 _floatdidf _floatdisf \
_fixunsdfsi _fixunssfsi _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi

libgcc1.a: lib1thumb.asm
	-rm -f tmplibgcc1.a
# Actually build it in tmplibgcc1.a, then rename at end,
# so that libgcc1.a itself remains nonexistent if compilation is aborted.
	set -e
	for name in $(LIB1ASMFUNCS); \
	do \
	  echo $${name}; \
	  $(CPP) -undef -nostdinc -DL$${name} -x assembler-with-cpp -o $${name}.s lib1thumb.asm; \
	  bash -c 'echo -e ".text\n\t.align\t2, 0\n"' >> $${name}.s ; \
	  $(AS) -mcpu=arm7tdmi -o $${name}.o $${name}.s; \
	  rm -f $${name}.s; \
	  $(AR) -rc tmplibgcc1.a $${name}.o; \
	  rm -f $${name}.o; \
	done
	mv tmplibgcc1.a libgcc1.a

libgcc2.a: libgcc2.c longlong.h
	-rm -f tmplibgcc2.a
# Actually build it in tmplibgcc2.a, then rename at end,
# so that libgcc2.a itself remains nonexistent if compilation is aborted.
	set -e
	for name in $(LIB2FUNCS); \
	do \
	  echo $${name}; \
	  $(CPP) -undef -I ../ginclude -nostdinc -DL$${name} -o $${name}.i libgcc2.c; \
	  $(CC1) -O2 $${name}.i; \
	  rm -f $${name}.i; \
	  bash -c 'echo -e ".text\n\t.align\t2, 0\n"' >> $${name}.s ; \
	  $(AS) -mcpu=arm7tdmi -o $${name}.o $${name}.s; \
	  rm -f $${name}.s; \
	  $(AR) -rc tmplibgcc2.a $${name}.o; \
	  rm -f $${name}.o; \
	done
	mv tmplibgcc2.a libgcc2.a

fp-bit.o: fp-bit.c
	$(CPP) -undef -I ../ginclude -nostdinc -o fp-bit.i fp-bit.c;
	$(CC1) -O2 fp-bit.i
	rm -f fp-bit.i
	bash -c 'echo -e ".text\n\t.align\t2, 0\n"' >> fp-bit.s
	$(AS) -mcpu=arm7tdmi -o fp-bit.o fp-bit.s;
	rm -f fp-bit.s

dp-bit.o: dp-bit.c
	$(CPP) -undef -I ../ginclude -nostdinc -o dp-bit.i dp-bit.c;
	$(CC1) -O2 dp-bit.i
	rm -f dp-bit.i
	bash -c 'echo -e ".text\n\t.align\t2, 0\n"' >> dp-bit.s
	$(AS) -mcpu=arm7tdmi -o dp-bit.o dp-bit.s;
	rm -f dp-bit.s

fp-bit.c: fp-bit-base.c
	echo '#define FLOAT' > fp-bit.c
	echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c
	cat fp-bit-base.c >> fp-bit.c

dp-bit.c: fp-bit-base.c
	echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c
	echo '#define FLOAT_WORD_ORDER_MISMATCH' >> dp-bit.c
	cat fp-bit-base.c >> dp-bit.c

.PHONY: clean

clean:
	rm -f *.o *.a *.s *.i