Makefile.in
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Mar 26 18:47:34 2009 +0000 (2009-03-26)
changeset 1268 5594b05bc2d8
parent 1184 a4e9bf8c9448
child 1297 7439f29a0476
child 1366 5e5d1e6f55d3
permissions -rw-r--r--
Add support for building toolchains with gcc-4.4 snapshots.
Initial patch by Dmitry PLOTNIKOV: http://sourceware.org/ml/crossgcc/2009-03/msg00053.html
It [the toolchain] uses current ct-ng (nightly snapshot 20090324, latest
release 1.3.2 work also), glibc 2.9 (from CVS), binutils 2.19 and latest
snapshot of GCC 4.4.0 (as of March 20, 2009).

We have successfully built linux kernel 2.6.29 and a lot of other stuff
with this toolchain.

Here's the patch that adds GCC 4.4.0 to the ct-ng menu and enables it to
download a 4.4.0 snapshot from ftp.

Patch was adpated by me, mostly to better fit the configuration layout.

/trunk/scripts/build/cc/gcc.sh | 34 22 12 0 ++++++++++++++++++++++------------
/trunk/config/cc/gcc.in | 35 30 5 0 ++++++++++++++++++++++++++++++-----
2 files changed, 52 insertions(+), 17 deletions(-)
yann@197
     1
# Makefile.in for building crosstool-NG
yann@182
     2
# This file serves as source for the ./configure operation
yann@182
     3
yann@1156
     4
# This series of test is here because GNU make 3.81 will *not* use MAKEFLAGS
yann@1156
     5
# to set additional flags in the current Makfile ( see:
yann@1156
     6
# http://savannah.gnu.org/bugs/?20501 ), although the make manual says it
yann@1156
     7
# should ( see: http://www.gnu.org/software/make/manual/make.html#Options_002fRecursion )
yann@1156
     8
# so we have to work it around by calling ourselves back if needed
yann@1156
     9
yann@1156
    10
# So why do we need not to use the built rules and variables? Because we
yann@1156
    11
# need to generate scripts/crosstool-NG.sh from scripts/crosstool-NG.sh.in
yann@1156
    12
# and there is a built-in implicit rule '%.sh:' that has neither a pre-requisite
yann@1156
    13
# nor a command associated, and that built-in implicit rule takes precedence
yann@1156
    14
# over our non-built-in implicit rule '%: %.in', below.
yann@1156
    15
yann@1156
    16
# CT_MAKEFLAGS will be used later, below...
yann@1156
    17
yann@1156
    18
# Do not print directories as we descend into them
yann@1156
    19
ifeq ($(filter --no-print-directory,$(MAKEFLAGS)),)
yann@1156
    20
CT_MAKEFLAGS += --no-print-directory
yann@1156
    21
endif
yann@1156
    22
yann@1156
    23
# Use neither builtin rules, nor builtin variables
yann@1156
    24
# Note: dual test, because if -R and -r are given on the command line
yann@1156
    25
# (who knows?), MAKEFLAGS contains 'Rr' instead of '-Rr', while adding
yann@1156
    26
# '-Rr' to MAKEFLAGS adds it literaly ( and does not add 'Rr' )
yann@1156
    27
ifeq ($(filter Rr,$(MAKEFLAGS)),)
yann@1156
    28
ifeq ($(filter -Rr,$(MAKEFLAGS)),)
yann@1156
    29
CT_MAKEFLAGS += -Rr
yann@1156
    30
endif # No -Rr
yann@1156
    31
endif # No Rr
yann@1156
    32
yann@1156
    33
# Remove any suffix rules
yann@1156
    34
.SUFFIXES:
yann@554
    35
yann@382
    36
all: Makefile build
yann@382
    37
yann@1047
    38
###############################################################################
yann@182
    39
# Configuration variables
yann@182
    40
yann@182
    41
VERSION:= @@VERSION@@
yann@182
    42
BINDIR := @@BINDIR@@
yann@185
    43
LIBDIR := @@LIBDIR@@
yann@185
    44
DOCDIR := @@DOCDIR@@
yann@185
    45
MANDIR := @@MANDIR@@
yann@182
    46
DATE   := @@DATE@@
yann@285
    47
LOCAL  := @@LOCAL@@
yann@1141
    48
yann@1141
    49
# Paths found by ./configure
yann@1153
    50
install:= @@install@@
yann@1153
    51
bash   := @@bash@@
yann@1153
    52
grep   := @@grep@@
yann@1153
    53
make   := @@make@@
yann@1153
    54
awk    := @@awk@@
yann@1153
    55
sed    := @@sed@@
yann@1109
    56
yann@1109
    57
###############################################################################
yann@1109
    58
# Sanity checks
yann@1109
    59
yann@1109
    60
# Check if Makefile is up to date:
yann@1109
    61
Makefile: Makefile.in
yann@1109
    62
	@echo "$< did changed: you must re-run './configure'"
yann@1109
    63
	@false
yann@1109
    64
yann@1109
    65
# If installing with DESTDIR, check it's an absolute path
yann@1109
    66
ifneq ($(strip $(DESTDIR)),)
yann@1109
    67
  ifneq ($(DESTDIR),$(abspath /$(DESTDIR)))
yann@1109
    68
    $(error DESTDIR is not an absolute PATH: '$(DESTDIR)')
yann@1109
    69
  endif
yann@1109
    70
endif
yann@182
    71
yann@182
    72
###############################################################################
yann@182
    73
# Global make rules
yann@182
    74
yann@1156
    75
# If any extra MAKEFLAGS were added, re-run ourselves
yann@1156
    76
# See top of file for an explanation of why this is needed...
yann@1156
    77
ifneq ($(strip $(CT_MAKEFLAGS)),)
yann@1156
    78
yann@1156
    79
MAKEFLAGS += $(CT_MAKEFLAGS)
yann@1156
    80
build install clean distclean uninstall:
yann@1156
    81
	@$(MAKE) $@
yann@1156
    82
yann@1156
    83
else
yann@1156
    84
# There were no additional MAKEFLAGS to add, do the job
yann@1156
    85
yann@555
    86
TARGETS := bin lib doc man
yann@182
    87
yann@555
    88
build: $(patsubst %,build-%,$(TARGETS))
yann@182
    89
yann@1101
    90
install: build real-install
yann@555
    91
yann@555
    92
clean: $(patsubst %,clean-%,$(TARGETS))
yann@182
    93
yann@182
    94
distclean: clean
yann@554
    95
	@echo "  RM     'Makefile'"
yann@182
    96
	@rm -f Makefile
yann@182
    97
yann@1048
    98
uninstall: real-uninstall
yann@182
    99
yann@182
   100
###############################################################################
yann@182
   101
# Specific make rules
yann@182
   102
yann@182
   103
#--------------------------------------
yann@182
   104
# Build rules
yann@182
   105
yann@1186
   106
build-bin: ct-ng scripts/crosstool-NG.sh scripts/saveSample.sh
yann@182
   107
yann@1153
   108
build-lib: paths.mk
yann@182
   109
yann@555
   110
build-doc:
yann@555
   111
yann@309
   112
build-man: docs/ct-ng.1.gz
yann@309
   113
yann@309
   114
docs/ct-ng.1.gz: docs/ct-ng.1
yann@554
   115
	@echo "  GZIP   '$@'"
yann@317
   116
	@gzip -c9 $< >$@
yann@182
   117
yann@470
   118
%: %.in Makefile
yann@554
   119
	@echo "  SED    '$@'"
yann@1153
   120
	@$(sed) -r -e 's,@@CT_BINDIR@@,$(BINDIR),g;'    \
yann@1153
   121
	           -e 's,@@CT_LIBDIR@@,$(LIBDIR),g;'    \
yann@1153
   122
	           -e 's,@@CT_DOCDIR@@,$(DOCDIR),g;'    \
yann@1153
   123
	           -e 's,@@CT_MANDIR@@,$(MANDIR),g;'    \
yann@1153
   124
	           -e 's,@@CT_VERSION@@,$(VERSION),g;'	\
yann@1153
   125
	           -e 's,@@CT_DATE@@,$(DATE),g;'        \
yann@1153
   126
	           -e 's,@@CT_make@@,$(make),g;'        \
yann@1156
   127
	           -e 's,@@CT_bash@@,$(bash),g;'        \
yann@1153
   128
	           $@.in >$@
yann@1153
   129
yann@1153
   130
# We create a script fragment that is parseable from inside a Makefile,
yann@1153
   131
# but also from inside a shell script, hence the reason why we don't
yann@1153
   132
# use := to set varaibles, although that will incur a (very small)
yann@1153
   133
# penalty from the Makefile that includes it (due to re-evaluation at
yann@1153
   134
# each call).
yann@1153
   135
paths.mk:
yann@1153
   136
	@echo "  GEN    '$@'"
yann@1153
   137
	@(echo "export install=$(install)"; \
yann@1153
   138
	  echo "export bash=$(bash)";       \
yann@1153
   139
	  echo "export grep=$(grep)";       \
yann@1153
   140
	  echo "export make=$(make)";       \
yann@1153
   141
	  echo "export awk=$(awk)";         \
yann@1153
   142
	  echo "export sed=$(sed)";         \
yann@1153
   143
	 ) >paths.mk
yann@182
   144
yann@182
   145
#--------------------------------------
yann@182
   146
# Clean rules
yann@182
   147
yann@182
   148
clean-bin:
yann@554
   149
	@echo "  RM     'ct-ng'"
yann@182
   150
	@rm -f ct-ng
yann@1158
   151
	@echo "  RM     'script/crosstool-NG.sh'"
yann@1158
   152
	@rm -f scripts/crosstool-NG.sh
yann@1186
   153
	@echo "  RM     'script/saveSample.sh'"
yann@1186
   154
	@rm -f scripts/saveSample.sh
yann@182
   155
yann@182
   156
clean-lib:
yann@1154
   157
	@echo "  RM     'paths.mk'"
yann@1154
   158
	@rm -f paths.mk
yann@182
   159
yann@182
   160
clean-doc:
yann@555
   161
yann@555
   162
clean-man:
yann@554
   163
	@echo "  RM     'docs/ct-ng.1'"
yann@318
   164
	@rm -f docs/ct-ng.1
yann@554
   165
	@echo "  RM     'docs/ct-ng.1.gz'"
yann@318
   166
	@rm -f docs/ct-ng.1.gz
yann@182
   167
yann@182
   168
#--------------------------------------
yann@554
   169
# Check for --local setup
yann@182
   170
yann@1048
   171
ifeq ($(strip $(LOCAL)),1)
yann@1048
   172
yann@1101
   173
real-install:
yann@1048
   174
	@echo "  CHMOD  'ct-ng'"
yann@1048
   175
	@chmod a+x ct-ng
yann@1156
   176
	@echo "  CHMOD  'scripts/crosstool-NG.sh'"
yann@1156
   177
	@chmod a+x scripts/crosstool-NG.sh
yann@1186
   178
	@echo "  CHMOD  'scripts/saveSample.sh'"
yann@1186
   179
	@chmod a+x scripts/saveSample.sh
yann@1048
   180
yann@1048
   181
real-uninstall:
yann@1048
   182
	@true
yann@1048
   183
yann@1048
   184
else
yann@285
   185
yann@554
   186
#--------------------------------------
yann@554
   187
# Install rules
yann@554
   188
yann@1101
   189
real-install: $(patsubst %,install-%,$(TARGETS))
yann@1048
   190
yann@1047
   191
install-bin: $(DESTDIR)$(BINDIR)
yann@554
   192
	@echo "  INST   'ct-ng'"
yann@1153
   193
	@$(install) -m 755 ct-ng "$(DESTDIR)$(BINDIR)/ct-ng"
yann@182
   194
yann@555
   195
# If one is hacking crosstool-NG, the patch set might change between any two
yann@555
   196
# installations of the same VERSION, thus the patches must be removed prior
yann@555
   197
# to being installed. It is simpler to remove the whole lib/ directory, as it
yann@555
   198
# is the goal of the install-lib rule to install the lib/ directory...
yann@1047
   199
install-lib: uninstall-lib $(DESTDIR)$(LIBDIR) install-lib-main install-lib-samples
yann@182
   200
yann@1048
   201
install-lib-main: $(DESTDIR)$(LIBDIR)
yann@1184
   202
	@for src_dir in config kconfig patches scripts; do              \
yann@1184
   203
	     echo "  INST   '$${src_dir}/'";                            \
yann@1184
   204
	     tar cf - --exclude=.svn --exclude='*.sh.in' $${src_dir}    \
yann@1184
   205
	     |(cd "$(DESTDIR)$(LIBDIR)"; tar xf -);                     \
yann@182
   206
	 done
yann@1184
   207
	@chmod a+x $(DESTDIR)$(LIBDIR)/scripts/crosstool-NG.sh
yann@1186
   208
	@chmod a+x $(DESTDIR)$(LIBDIR)/scripts/saveSample.sh
yann@1101
   209
	@rm -f "$(DESTDIR)$(LIBDIR)/scripts/addToolVersion.sh"
yann@554
   210
	@echo "  INST   'steps.mk'"
yann@1153
   211
	@$(install) -m 644 steps.mk "$(DESTDIR)$(LIBDIR)/steps.mk"
yann@1153
   212
	@echo "  INST   'paths.mk'"
yann@1153
   213
	@$(install) -m 644 paths.mk "$(DESTDIR)$(LIBDIR)/paths.mk"
yann@182
   214
yann@182
   215
# Samples need a little love:
yann@425
   216
#  - change every occurrence of CT_TOP_DIR to CT_LIB_DIR
yann@1047
   217
install-lib-samples: $(DESTDIR)$(LIBDIR) install-lib-main
yann@554
   218
	@echo "  INST   'samples/'"
yann@1047
   219
	@tar cf - --exclude=.svn samples |(cd "$(DESTDIR)$(LIBDIR)"; tar xf -)
yann@1141
   220
	@for samp_file in "$(DESTDIR)$(LIBDIR)/samples/"*"/crosstool.config"; do                    \
yann@1153
   221
	     $(sed) -r -i -e 's,\$$\{CT_TOP_DIR\},\$$\{CT_LIB_DIR\},g;' $${samp_file};           \
yann@1153
   222
	     $(sed) -r -i -e 's,^(CT_WORK_DIR)=.*,\1="\$${CT_TOP_DIR}/targets",;' $${samp_file}; \
yann@182
   223
	 done
yann@182
   224
yann@1047
   225
install-doc: $(DESTDIR)$(DOCDIR)
yann@1141
   226
	@for doc_file in docs/CREDITS docs/overview.txt; do             \
yann@1141
   227
	     echo "  INST   '$${doc_file}'";                            \
yann@1153
   228
	     $(install) -m 644 "$${doc_file}" "$(DESTDIR)$(DOCDIR)"; \
yann@182
   229
	 done
yann@249
   230
yann@1047
   231
install-man: $(DESTDIR)$(MANDIR)
yann@554
   232
	@echo "  INST   'ct-ng.1.gz'"
yann@1153
   233
	@$(install) -m 644 docs/ct-ng.1.gz "$(DESTDIR)$(MANDIR)"
yann@182
   234
yann@1047
   235
$(sort $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(DOCDIR) $(DESTDIR)$(MANDIR)):
yann@554
   236
	@echo "  MKDIR  '$@'"
yann@1153
   237
	@$(install) -m 755 -d "$@"
yann@182
   238
yann@182
   239
yann@182
   240
#--------------------------------------
yann@182
   241
# Uninstall rules
yann@182
   242
yann@1048
   243
real-uninstall: $(patsubst %,uninstall-%,$(TARGETS))
yann@1048
   244
yann@554
   245
uninstall-bin:
yann@1047
   246
	@echo "  RM     '$(DESTDIR)$(BINDIR)/ct-ng'"
yann@1047
   247
	@rm -f "$(DESTDIR)$(BINDIR)/ct-ng"
yann@182
   248
yann@554
   249
uninstall-lib:
yann@1047
   250
	@echo "  RMDIR  '$(DESTDIR)$(LIBDIR)/'"
yann@1047
   251
	@rm -rf "$(DESTDIR)$(LIBDIR)"
yann@298
   252
yann@554
   253
uninstall-doc:
yann@1047
   254
	@echo "  RMDIR  '$(DESTDIR)$(DOCDIR)/'"
yann@1047
   255
	@rm -rf "$(DESTDIR)$(DOCDIR)"
yann@554
   256
yann@554
   257
uninstall-man:
yann@1047
   258
	@echo "  RM     '$(DESTDIR)$(MANDIR)/ct-ng.1.gz'"
yann@1047
   259
	@rm -f "$(DESTDIR)$(MANDIR)/ct-ng.1"{,.gz}
yann@1048
   260
yann@1048
   261
endif # Not --local
yann@1156
   262
yann@1156
   263
endif # No extra MAKEFLAGS were added