summaryrefslogtreecommitdiff
path: root/toolchain/gcc/Makefile
blob: a2bdaacd1f83f1a5e22e67e96f96782e73f46c66 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.

include $(TOPDIR)/rules.mk
include ../rules.mk
include Makefile.inc


ifeq ($(ADK_CXX),y)
TARGET_LANGUAGES:=	c,c++
else
TARGET_LANGUAGES:=	c
endif

GCC_CONFOPTS=		--prefix=$(STAGING_TOOLS) \
			--build=$(GNU_HOST_NAME) \
			--host=$(GNU_HOST_NAME) \
			--target=$(REAL_GNU_TARGET_NAME) \
			--with-gmp=$(STAGING_TOOLS) \
			--with-mpfr=$(STAGING_TOOLS) \
			--disable-__cxa_atexit \
			--enable-target-optspace \
			--with-gnu-ld \
			--disable-libmudflap \
			--disable-libgomp \
			--disable-biarch \
			--disable-multilib \
			--disable-nls 

ifeq ($(ADK_LINUX_ARM_TOMTOM),y)
GCC_CONFOPTS+=		--enable-sjlj-exceptions
else
GCC_CONFOPTS+=		--disable-sjlj-exceptions
endif

ifeq ($(ADK_SSP),y)
GCC_CONFOPTS+=		--enable-libssp
else
GCC_CONFOPTS+=		--disable-libssp
endif

ifeq ($(ADK_DEVICE_NO_FPU),y)
GCC_CONFOPTS+=		--with-float=soft
endif

ifeq ($(ADK_LINUX_64),y)
GCC_CONFOPTS+=		--with-abi=64
endif

ifeq ($(ADK_TARGET_LIB_UCLIBC),y)
GCC_CONFOPTS+=		--disable-tls
endif

include ${TOPDIR}/mk/buildhlp.mk

GCC_BUILD_DIR_MINIMAL:=	$(WRKBUILD)-minimal
GCC_BUILD_DIR_INITIAL:=	$(WRKBUILD)-initial
GCC_BUILD_DIR_FINAL:=	$(WRKBUILD)-final

$(GCC_BUILD_DIR_MINIMAL)/.configured:
	mkdir -p $(GCC_BUILD_DIR_MINIMAL)
	(cd $(GCC_BUILD_DIR_MINIMAL); rm -f config.cache; \
		PATH=$(TARGET_PATH) \
		$(WRKBUILD)/configure \
			${GCC_CONFOPTS} \
			--enable-languages=c \
			--disable-shared \
			--with-newlib \
			--without-headers \
	);
	touch $@

$(GCC_BUILD_DIR_MINIMAL)/.compiled: $(GCC_BUILD_DIR_MINIMAL)/.configured
	PATH=$(TARGET_PATH) \
	$(MAKE) -C $(GCC_BUILD_DIR_MINIMAL) all-gcc 
	touch $@

$(WRKBUILD)/.headers: $(GCC_BUILD_DIR_MINIMAL)/.compiled
	PATH=$(TARGET_PATH) \
	$(MAKE) -C $(GCC_BUILD_DIR_MINIMAL) install-gcc
	touch $@

$(GCC_BUILD_DIR_INITIAL)/.configured:
	rm -rf $(STAGING_TOOLS)/$(REAL_GNU_TARGET_NAME)/sys-include
	ln -sf ${STAGING_DIR}/include $(STAGING_TOOLS)/$(REAL_GNU_TARGET_NAME)/sys-include
	rm -rf ${STAGING_TOOLS}/$(REAL_GNU_TARGET_NAME)/lib
	ln -sf ${STAGING_DIR}/lib $(STAGING_TOOLS)/$(REAL_GNU_TARGET_NAME)/lib
	mkdir -p $(GCC_BUILD_DIR_INITIAL)
	(cd $(GCC_BUILD_DIR_INITIAL); rm -f config.cache; \
		PATH=$(TARGET_PATH) \
		$(WRKBUILD)/configure \
			${GCC_CONFOPTS} \
			--enable-languages=c \
			--disable-shared \
			--with-sysroot=$(TOOLCHAIN_SYSROOT) \
	);
	touch $@


$(GCC_BUILD_DIR_INITIAL)/.compiled: $(GCC_BUILD_DIR_INITIAL)/.configured
	PATH=$(TARGET_PATH) \
	$(MAKE) -C $(GCC_BUILD_DIR_INITIAL) all
	touch $@

$(WRKBUILD)/.configured: $(GCC_BUILD_DIR_INITIAL)/.compiled
	PATH=$(TARGET_PATH) \
	$(MAKE) -C $(GCC_BUILD_DIR_INITIAL) install
	touch $@

$(GCC_BUILD_DIR_FINAL)/.configured:
	mkdir -p $(GCC_BUILD_DIR_FINAL)
	(cd $(GCC_BUILD_DIR_FINAL); rm -f config.cache; \
		PATH=$(TARGET_PATH) \
		$(WRKBUILD)/configure \
			${GCC_CONFOPTS} \
			--enable-languages=$(TARGET_LANGUAGES) \
			--with-sysroot=$(STAGING_DIR) \
			--with-slibdir=$(STAGING_DIR)/lib \
			--enable-shared \
	);
	touch $@

$(WRKBUILD)/.compiled: $(GCC_BUILD_DIR_FINAL)/.configured
	PATH=$(TARGET_PATH) \
	$(MAKE) -C $(GCC_BUILD_DIR_FINAL) all
	touch $@

$(WRKBUILD)/.installed: $(WRKBUILD)/.compiled
	PATH=$(TARGET_PATH) \
	$(MAKE) -C $(GCC_BUILD_DIR_FINAL) install
	# workaround if you cross-compile binutils
	rm $(STAGING_DIR)/lib/libiberty.a
	# Set up the symlinks to enable lying about target name.
	set -e; \
	(cd $(STAGING_TOOLS); \
		ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \
		cd bin; \
		for app in $(REAL_GNU_TARGET_NAME)-* ; do \
			ln -sf $${app} \
		   	$(GNU_TARGET_NAME)$${app##$(REAL_GNU_TARGET_NAME)}; \
		done; \
	)
	touch $@

include ${TOPDIR}/mk/toolchain.mk