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