Makefile.in
author Anthony Foiani <anthony.foiani@gmail.com>
Thu May 19 23:06:16 2011 +0200 (2011-05-19)
branch1.11
changeset 2464 4b844234d214
parent 2423 861c2479baea
child 2481 30644208c955
permissions -rw-r--r--
complibs/ppl: build only C and C++ interfaces for PPL

By default, PPL wants to build interfaces for any of a variety of
langauges it finds on the local host (python, java, possibly perl, also
more esoteric languages such as ocaml and prolog).

These extra interfaces can double the compile time for the library. For
single-process builds, I found a savings of more than 40%:

default / j1: 716s total, 143.2s avg, 0.52s stdev
just_c / j1: 406s total, 81.2s avg, 0.33s stdev
just_c_cpp / j1: 413s total, 82.6s avg, 0.22s stdev

And for multi-process builds, it approached 50%:

default / j4: 625s total, 125.0s avg, 0.57s stdev
just_c / j4: 338s total, 67.6s avg, 1.25s stdev
just_c_cpp / j4: 327s total, 65.4s avg, 0.36s stdev

Since the PPL we build within ct-ng is only used by GCC, we only need to
build the C and C++ interfaces.

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