samples/samples.mk
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed May 21 22:00:52 2008 +0000 (2008-05-21)
changeset 527 4ac12179ef23
parent 333 d647d0e6021e
child 539 c538627f69f1
permissions -rw-r--r--
Introduce target-specific LDFLAGS, the same way we have CFLAGS for the target.
It seems to be helping gcc somewhat into telling the correct endianness to ld that sticks with little endian even when the target is big (eg armeb-unknown-linux-uclibcgnueabi).
There's still work to do, especially finish the gcc part that is not in this commit.

/trunk/scripts/functions | 9 7 2 0 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
yann@166
     1
# Makefile to manage samples
yann@63
     2
yann@166
     3
# Build the list of available samples
yann@182
     4
CT_TOP_SAMPLES := $(patsubst $(CT_TOP_DIR)/samples/%/crosstool.config,%,$(wildcard $(CT_TOP_DIR)/samples/*/crosstool.config))
yann@182
     5
CT_LIB_SAMPLES := $(filter-out $(CT_TOP_SAMPLES),$(patsubst $(CT_LIB_DIR)/samples/%/crosstool.config,%,$(wildcard $(CT_LIB_DIR)/samples/*/crosstool.config)))
yann@182
     6
yann@182
     7
CT_SAMPLES := $(CT_TOP_SAMPLES) $(CT_LIB_SAMPLES)
yann@63
     8
yann@176
     9
help-config::
yann@333
    10
	@echo  '  saveconfig         - Save current config as a preconfigured target'
yann@176
    11
yann@176
    12
help-samples::
yann@474
    13
	@echo  '  show-samples       - show a brief overview of each samples listed below:'
yann@182
    14
	@$(CT_LIB_DIR)/scripts/showSamples.sh $(CT_SAMPLES)
yann@176
    15
yann@176
    16
help-build::
yann@333
    17
	@echo  '  regtest[.#]        - Regtest-build all samples'
yann@333
    18
	@echo  '  regtest-local[.#]  - Regtest-build all local samples'
yann@333
    19
	@echo  '  regtest-global[.#] - Regtest-build all global samples'
yann@63
    20
yann@474
    21
show-samples:
yann@474
    22
	@$(CT_LIB_DIR)/scripts/showSamples.sh -v $(CT_SAMPLES)
yann@474
    23
yann@166
    24
# How we do build one sample
yann@182
    25
PHONY += $(CT_SAMPLES)
yann@166
    26
$(CT_SAMPLES):
yann@286
    27
	@echo  'Configuring for "$@"'
yann@230
    28
	@$(CT_NG) $(patsubst %,copy_config_%,$(@)) oldconfig
yann@286
    29
	@echo  'Execute "$(CT_NG) build" to build your toolchain'
yann@182
    30
yann@230
    31
$(patsubst %,copy_config_%,$(CT_SAMPLES)):
yann@230
    32
	@if [ -f $(CT_TOP_DIR)/samples/$(patsubst copy_config_%,%,$(@))/crosstool.config ]; then                    \
yann@230
    33
	      cp "$(CT_TOP_DIR)/samples/$(patsubst copy_config_%,%,$(@))/crosstool.config" "$(CT_TOP_DIR)/.config"; \
yann@182
    34
	 else                                                                                                       \
yann@230
    35
	      cp "$(CT_LIB_DIR)/samples/$(patsubst copy_config_%,%,$(@))/crosstool.config" "$(CT_TOP_DIR)/.config"; \
yann@182
    36
	 fi
yann@166
    37
yann@166
    38
# And now for building all samples one after the other
yann@230
    39
PHONY += regtest regtest_local regtest_global
yann@230
    40
regtest: regtest-local regtest-global
yann@230
    41
yann@230
    42
regtest-local: $(patsubst %,regtest_%,$(CT_TOP_SAMPLES))
yann@230
    43
yann@230
    44
regtest-global: $(patsubst %,regtest_%,$(CT_LIB_SAMPLES))
yann@230
    45
yann@333
    46
regtest.% regtest-local.% regtest-global.%:
yann@333
    47
	@$(CT_NG) $(shell echo "$(@)" |sed -r -e 's|^([^.]+)\.([[:digit:]]+)$$|\1 CT_JOBS=\2|;')
yann@333
    48
yann@230
    49
# One regtest per sample
yann@166
    50
# We could use a simple rule like: 'regtest: $(CT_SAMPLES)', but that doesn't
yann@166
    51
# work because we want to save the samples as well.
yann@166
    52
# Also, we don't want to see anylog at all, save for the elapsed time, and we
yann@166
    53
# want to save the log file in a specific place
yann@166
    54
# Furthermore, force the location where the toolchain will be installed.
yann@166
    55
# Finaly, we can't use 'make sample-name' as we need to provide default values
yann@166
    56
# if the options set has changed, but oldconfig does not like when stdin is
yann@166
    57
# not a terminal (eg. it is a pipe).
yann@230
    58
$(patsubst %,regtest_%,$(CT_SAMPLES)):
yann@230
    59
	@samp=$(patsubst regtest_%,%,$@)                                                                ;   \
yann@230
    60
	 echo -e "\rBuilding sample \"$${samp}\""                                                       &&  \
yann@230
    61
	 $(CT_NG) copy_config_$${samp}                                                                  &&  \
yann@230
    62
	 yes "" |$(CT_NG) defoldconfig >/dev/null 2>&1                                                  &&  \
yann@230
    63
	 sed -i -r -e 's:^(CT_PREFIX_DIR=).*$$:\1"$${CT_TOP_DIR}/targets/tst/$${CT_TARGET}":;' .config  &&  \
yann@230
    64
	 sed -i -r -e 's:^.*(CT_LOG_(WARN|INFO|EXTRA|DEBUG|ALL)).*$$:# \1 is not set:;' .config         &&  \
yann@230
    65
	 sed -i -r -e 's:^.*(CT_LOG_ERROR).*$$:\1=y:;' .config                                          &&  \
yann@230
    66
	 sed -i -r -e 's:^(CT_LOG_LEVEL_MAX)=.*$$:\1="ERROR":;' .config                                 &&  \
yann@230
    67
	 sed -i -r -e 's:^.*(CT_LOG_TO_FILE).*$$:\1=y:;' .config                                        &&  \
yann@230
    68
	 sed -i -r -e 's:^.*(CT_LOG_PROGRESS_BAR).*$$:\1=y:;' .config                                   &&  \
yann@230
    69
	 yes "" |$(CT_NG) defoldconfig >/dev/null 2>&1                                                  &&  \
yann@230
    70
	 $(CT_NG) build                                                                                 &&  \
yann@230
    71
	 echo -e "\rSuccessfully built sample \"$${samp}\""                                             &&  \
yann@230
    72
	 echo -e "\rMaking tarball for sample \"$${samp}\""                                             &&  \
yann@230
    73
	 $(CT_NG) tarball                                                                               &&  \
yann@230
    74
	 echo -e "\rSuccessfully built tarball for sample \"$${samp}\""                                 ;   \
yann@230
    75
	 echo -e "\rCleaning sample \"$${samp}\""                                                       ;   \
yann@230
    76
	 $(CT_NG) distclean                                                                             ;   \
yann@230
    77
	 echo -e "\r"
yann@166
    78
yann@63
    79
saveconfig:
yann@189
    80
	@$(CT_LIB_DIR)/scripts/saveSample.sh