Makefile.in
author Remy Bohmer <linux@bohmer.net>
Sun Jul 11 22:23:34 2010 +0200 (2010-07-11)
changeset 2021 3e52a1510f87
parent 1993 6641889d5603
child 2026 a8a4d5c97738
permissions -rw-r--r--
debug/gdb: Fix compilation for Mingw hosts

GDB requires PDcurses instead of ncurses while running on Windows.
So, do not always compile ncurses in case GDB needs to build.

PDcurses is provided by an earlier build step and is not described in
this file.

Signed-off-by: Remy Bohmer <linux@bohmer.net>
[yann.morin.1998@anciense.nib.fr: we already have a way to detect ncurses usage]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
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
sed    := @@sed@@
titus@1962
    55
libtool:= @@libtool@@
titus@1962
    56
objcopy:= @@objcopy@@
titus@1962
    57
objdump:= @@objdump@@
titus@1962
    58
readelf:= @@readelf@@
titus@1962
    59
patch  := @@patch@@
yann@1109
    60
yann@1109
    61
###############################################################################
yann@1109
    62
# Sanity checks
yann@1109
    63
yann@1109
    64
# Check if Makefile is up to date:
yann@1109
    65
Makefile: Makefile.in
yann@1109
    66
	@echo "$< did changed: you must re-run './configure'"
yann@1109
    67
	@false
yann@1109
    68
yann@1109
    69
# If installing with DESTDIR, check it's an absolute path
yann@1109
    70
ifneq ($(strip $(DESTDIR)),)
yann@1109
    71
  ifneq ($(DESTDIR),$(abspath /$(DESTDIR)))
yann@1109
    72
    $(error DESTDIR is not an absolute PATH: '$(DESTDIR)')
yann@1109
    73
  endif
yann@1109
    74
endif
yann@182
    75
yann@182
    76
###############################################################################
yann@182
    77
# Global make rules
yann@182
    78
yann@1156
    79
# If any extra MAKEFLAGS were added, re-run ourselves
yann@1156
    80
# See top of file for an explanation of why this is needed...
yann@1156
    81
ifneq ($(strip $(CT_MAKEFLAGS)),)
yann@1156
    82
yann@1156
    83
MAKEFLAGS += $(CT_MAKEFLAGS)
yann@1156
    84
build install clean distclean uninstall:
yann@1156
    85
	@$(MAKE) $@
yann@1156
    86
yann@1156
    87
else
yann@1156
    88
# There were no additional MAKEFLAGS to add, do the job
yann@1156
    89
yann@555
    90
TARGETS := bin lib doc man
yann@182
    91
yann@555
    92
build: $(patsubst %,build-%,$(TARGETS))
yann@182
    93
yann@1101
    94
install: build real-install
yann@555
    95
yann@555
    96
clean: $(patsubst %,clean-%,$(TARGETS))
yann@182
    97
yann@182
    98
distclean: clean
yann@554
    99
	@echo "  RM     'Makefile'"
yann@182
   100
	@rm -f Makefile
yann@182
   101
yann@1048
   102
uninstall: real-uninstall
yann@182
   103
yann@182
   104
###############################################################################
yann@182
   105
# Specific make rules
yann@182
   106
yann@182
   107
#--------------------------------------
yann@182
   108
# Build rules
yann@182
   109
yann@1336
   110
build-bin: ct-ng scripts/crosstool-NG.sh scripts/saveSample.sh scripts/showTuple.sh
yann@1297
   111
	@chmod 755 $^
yann@182
   112
yann@1153
   113
build-lib: paths.mk
yann@182
   114
yann@555
   115
build-doc:
yann@555
   116
yann@309
   117
build-man: docs/ct-ng.1.gz
yann@309
   118
yann@309
   119
docs/ct-ng.1.gz: docs/ct-ng.1
yann@554
   120
	@echo "  GZIP   '$@'"
yann@317
   121
	@gzip -c9 $< >$@
yann@182
   122
yann@470
   123
%: %.in Makefile
yann@554
   124
	@echo "  SED    '$@'"
yann@1153
   125
	@$(sed) -r -e 's,@@CT_BINDIR@@,$(BINDIR),g;'    \
yann@1153
   126
	           -e 's,@@CT_LIBDIR@@,$(LIBDIR),g;'    \
yann@1153
   127
	           -e 's,@@CT_DOCDIR@@,$(DOCDIR),g;'    \
yann@1153
   128
	           -e 's,@@CT_MANDIR@@,$(MANDIR),g;'    \
yann@1153
   129
	           -e 's,@@CT_VERSION@@,$(VERSION),g;'	\
yann@1153
   130
	           -e 's,@@CT_DATE@@,$(DATE),g;'        \
yann@1153
   131
	           -e 's,@@CT_make@@,$(make),g;'        \
yann@1156
   132
	           -e 's,@@CT_bash@@,$(bash),g;'        \
yann@1153
   133
	           $@.in >$@
yann@1153
   134
yann@1153
   135
# We create a script fragment that is parseable from inside a Makefile,
yann@1153
   136
# but also from inside a shell script, hence the reason why we don't
fr@1643
   137
# use := to set variables, although that will incur a (very small)
yann@1153
   138
# penalty from the Makefile that includes it (due to re-evaluation at
yann@1153
   139
# each call).
yann@1153
   140
paths.mk:
yann@1153
   141
	@echo "  GEN    '$@'"
yann@1153
   142
	@(echo "export install=$(install)"; \
yann@1153
   143
	  echo "export bash=$(bash)";       \
yann@1153
   144
	  echo "export grep=$(grep)";       \
yann@1153
   145
	  echo "export make=$(make)";       \
yann@1153
   146
	  echo "export sed=$(sed)";         \
titus@1962
   147
	  echo "export libtool=$(libtool)"; \
titus@1962
   148
	  echo "export objcopy=$(objcopy)"; \
titus@1962
   149
	  echo "export objdump=$(objdump)"; \
titus@1962
   150
	  echo "export readelf=$(readelf)"; \
titus@1962
   151
	  echo "export patch=$(patch)";     \
yann@1153
   152
	 ) >paths.mk
yann@182
   153
yann@182
   154
#--------------------------------------
yann@182
   155
# Clean rules
yann@182
   156
yann@182
   157
clean-bin:
yann@554
   158
	@echo "  RM     'ct-ng'"
yann@182
   159
	@rm -f ct-ng
yann@1339
   160
	@echo "  RM     'scripts/crosstool-NG.sh'"
yann@1158
   161
	@rm -f scripts/crosstool-NG.sh
yann@1339
   162
	@echo "  RM     'scripts/saveSample.sh'"
yann@1186
   163
	@rm -f scripts/saveSample.sh
yann@1339
   164
	@echo "  RM     'scripts/showTuple.sh'"
yann@1336
   165
	@rm -f scripts/showTuple.sh
yann@182
   166
yann@182
   167
clean-lib:
yann@1154
   168
	@echo "  RM     'paths.mk'"
yann@1154
   169
	@rm -f paths.mk
yann@182
   170
yann@182
   171
clean-doc:
yann@555
   172
yann@555
   173
clean-man:
yann@554
   174
	@echo "  RM     'docs/ct-ng.1'"
yann@318
   175
	@rm -f docs/ct-ng.1
yann@554
   176
	@echo "  RM     'docs/ct-ng.1.gz'"
yann@318
   177
	@rm -f docs/ct-ng.1.gz
yann@182
   178
yann@182
   179
#--------------------------------------
yann@554
   180
# Check for --local setup
yann@182
   181
yann@1297
   182
ifeq ($(strip $(LOCAL)),y)
yann@1048
   183
yann@1101
   184
real-install:
yann@1297
   185
	@true
yann@1048
   186
yann@1048
   187
real-uninstall:
yann@1048
   188
	@true
yann@1048
   189
yann@1048
   190
else
yann@285
   191
yann@554
   192
#--------------------------------------
yann@554
   193
# Install rules
yann@554
   194
yann@1876
   195
real-install: $(patsubst %,install-%,$(TARGETS)) install-post
yann@1048
   196
yann@1047
   197
install-bin: $(DESTDIR)$(BINDIR)
yann@1994
   198
	@echo "  INST    'ct-ng'"
yann@1153
   199
	@$(install) -m 755 ct-ng "$(DESTDIR)$(BINDIR)/ct-ng"
yann@182
   200
yann@555
   201
# If one is hacking crosstool-NG, the patch set might change between any two
yann@555
   202
# installations of the same VERSION, thus the patches must be removed prior
yann@555
   203
# to being installed. It is simpler to remove the whole lib/ directory, as it
yann@555
   204
# is the goal of the install-lib rule to install the lib/ directory...
yann@1047
   205
install-lib: uninstall-lib $(DESTDIR)$(LIBDIR) install-lib-main install-lib-samples
yann@182
   206
yann@1994
   207
LIB_SUB_DIR := config contrib kconfig patches scripts
yann@1994
   208
$(patsubst %,install-lib-%-copy,$(LIB_SUB_DIR)): $(DESTDIR)$(LIBDIR)
yann@1994
   209
	@echo "  INSTDIR '$(patsubst install-lib-%-copy,%,$(@))/'"
yann@1994
   210
	@tar cf - --exclude='*.sh.in' $(patsubst install-lib-%-copy,%,$(@)) \
yann@1994
   211
	 |(cd "$(DESTDIR)$(LIBDIR)"; tar xf -)
yann@1994
   212
yann@1994
   213
# Huh? It seems we need at least one command to make this rule kick-in.
yann@1994
   214
install-lib-%: install-lib-%-copy; @true
yann@1994
   215
yann@1994
   216
# Huh? that one does not inherit the -opy dependency, above...
yann@1994
   217
install-lib-scripts: install-lib-scripts-copy
yann@1184
   218
	@chmod a+x $(DESTDIR)$(LIBDIR)/scripts/crosstool-NG.sh
yann@1186
   219
	@chmod a+x $(DESTDIR)$(LIBDIR)/scripts/saveSample.sh
yann@1101
   220
	@rm -f "$(DESTDIR)$(LIBDIR)/scripts/addToolVersion.sh"
yann@1994
   221
yann@1994
   222
install-lib-main: $(DESTDIR)$(LIBDIR) $(patsubst %,install-lib-%,$(LIB_SUB_DIR))
yann@1994
   223
	@echo "  INST    'steps.mk'"
yann@1153
   224
	@$(install) -m 644 steps.mk "$(DESTDIR)$(LIBDIR)/steps.mk"
yann@1994
   225
	@echo "  INST    'paths.mk'"
yann@1153
   226
	@$(install) -m 644 paths.mk "$(DESTDIR)$(LIBDIR)/paths.mk"
yann@182
   227
yann@182
   228
# Samples need a little love:
yann@425
   229
#  - change every occurrence of CT_TOP_DIR to CT_LIB_DIR
yann@1047
   230
install-lib-samples: $(DESTDIR)$(LIBDIR) install-lib-main
yann@1994
   231
	@echo "  INSTDIR 'samples/'"
yann@1576
   232
	@tar cf - samples |(cd "$(DESTDIR)$(LIBDIR)"; tar xf -)
yann@1141
   233
	@for samp_file in "$(DESTDIR)$(LIBDIR)/samples/"*"/crosstool.config"; do                    \
yann@1153
   234
	     $(sed) -r -i -e 's,\$$\{CT_TOP_DIR\},\$$\{CT_LIB_DIR\},g;' $${samp_file};           \
yann@1153
   235
	     $(sed) -r -i -e 's,^(CT_WORK_DIR)=.*,\1="\$${CT_TOP_DIR}/targets",;' $${samp_file}; \
yann@182
   236
	 done
yann@182
   237
yann@1047
   238
install-doc: $(DESTDIR)$(DOCDIR)
yann@1141
   239
	@for doc_file in docs/CREDITS docs/overview.txt; do             \
yann@1994
   240
	     echo "  INST    '$${doc_file}'";                           \
yann@1153
   241
	     $(install) -m 644 "$${doc_file}" "$(DESTDIR)$(DOCDIR)"; \
yann@182
   242
	 done
yann@249
   243
yann@1047
   244
install-man: $(DESTDIR)$(MANDIR)
yann@1994
   245
	@echo "  INST    'ct-ng.1.gz'"
yann@1153
   246
	@$(install) -m 644 docs/ct-ng.1.gz "$(DESTDIR)$(MANDIR)"
yann@182
   247
yann@1047
   248
$(sort $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(DOCDIR) $(DESTDIR)$(MANDIR)):
yann@1994
   249
	@echo "  MKDIR   '$@/'"
yann@1153
   250
	@$(install) -m 755 -d "$@"
yann@182
   251
yann@1876
   252
install-post:
yann@1876
   253
	@echo
yann@1994
   254
	@echo "For auto-completion, do not forget to install 'ct-ng.comp' into"
yann@1994
   255
	@echo "your bash completion directory (usually /etc/bash_completion.d)"
yann@182
   256
yann@182
   257
#--------------------------------------
yann@182
   258
# Uninstall rules
yann@182
   259
yann@1048
   260
real-uninstall: $(patsubst %,uninstall-%,$(TARGETS))
yann@1048
   261
yann@554
   262
uninstall-bin:
yann@1994
   263
	@echo "  RM      '$(DESTDIR)$(BINDIR)/ct-ng'"
yann@1047
   264
	@rm -f "$(DESTDIR)$(BINDIR)/ct-ng"
yann@182
   265
yann@554
   266
uninstall-lib:
yann@1994
   267
	@echo "  RMDIR   '$(DESTDIR)$(LIBDIR)/'"
yann@1047
   268
	@rm -rf "$(DESTDIR)$(LIBDIR)"
yann@298
   269
yann@554
   270
uninstall-doc:
yann@1994
   271
	@echo "  RMDIR   '$(DESTDIR)$(DOCDIR)/'"
yann@1047
   272
	@rm -rf "$(DESTDIR)$(DOCDIR)"
yann@554
   273
yann@554
   274
uninstall-man:
yann@1994
   275
	@echo "  RM      '$(DESTDIR)$(MANDIR)/ct-ng.1.gz'"
yann@1047
   276
	@rm -f "$(DESTDIR)$(MANDIR)/ct-ng.1"{,.gz}
yann@1048
   277
yann@1048
   278
endif # Not --local
yann@1156
   279
yann@1156
   280
endif # No extra MAKEFLAGS were added