scripts/build/cc/gcc.sh
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 1259 9a567f354599
child 1269 17e37102a037
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@850
     1
# This file adds the function to build the gcc C compiler
yann@850
     2
# Copyright 2007 Yann E. MORIN
yann@850
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@850
     4
yann@850
     5
# Download gcc
yann@850
     6
do_cc_get() {
yann@1268
     7
    local version="${CT_CC_VERSION}${CT_CC_GCC_4_4_snapshot_date}"
yann@1268
     8
yann@850
     9
    # Ah! gcc folks are kind of 'different': they store the tarballs in
yann@850
    10
    # subdirectories of the same name! That's because gcc is such /crap/ that
yann@850
    11
    # it is such /big/ that it needs being splitted for distribution! Sad. :-(
yann@850
    12
    # Arrgghh! Some of those versions does not follow this convention:
yann@850
    13
    # gcc-3.3.3 lives in releases/gcc-3.3.3, while gcc-2.95.* isn't in a
yann@850
    14
    # subdirectory! You bastard!
yann@1268
    15
    CT_GetFile "gcc-${version}"                                                         \
yann@1268
    16
               {ftp,http}://ftp.gnu.org/gnu/gcc{,{,/releases}/gcc-${version}}           \
yann@1268
    17
               ftp://ftp.irisa.fr/pub/mirrors/gcc.gnu.org/gcc/releases/gcc-${version}   \
yann@1268
    18
               ftp://ftp.uvsq.fr/pub/gcc/snapshots/${version}
yann@1268
    19
yann@1129
    20
    # Starting with GCC 4.3, ecj is used for Java, and will only be
yann@1129
    21
    # built if the configure script finds ecj.jar at the top of the
yann@1129
    22
    # GCC source tree, which will not be there unless we get it and
yann@1129
    23
    # put it there ourselves
yann@1129
    24
    if [ "${CT_CC_LANG_JAVA_USE_ECJ}" = "y" ]; then
yann@1129
    25
        CT_GetFile ecj-latest .jar ftp://gcc.gnu.org/pub/java   \
yann@1129
    26
                                   ftp://sourceware.org/pub/java
yann@1129
    27
    fi
yann@850
    28
}
yann@850
    29
yann@850
    30
# Extract gcc
yann@850
    31
do_cc_extract() {
yann@1268
    32
    local version="${CT_CC_VERSION}${CT_CC_GCC_4_4_snapshot_date}"
yann@1268
    33
yann@1268
    34
    CT_Extract "gcc-${version}"
yann@1268
    35
    CT_Patch "gcc-${version}"
yann@1268
    36
yann@1129
    37
    # Copy ecj-latest.jar to ecj.jar at the top of the GCC source tree
yann@1268
    38
    if [ "${CT_CC_LANG_JAVA_USE_ECJ}" = "y"             \
yann@1268
    39
         -a ! -f "${CT_SRC_DIR}/gcc-${version}/ecj.jar" \
yann@1259
    40
       ]; then
yann@1268
    41
        CT_DoExecLog ALL cp -v "${CT_TARBALLS_DIR}/ecj-latest.jar" "${CT_SRC_DIR}/gcc-${version}/ecj.jar"
yann@1129
    42
    fi
yann@850
    43
}
yann@850
    44
yann@850
    45
#------------------------------------------------------------------------------
yann@850
    46
# Core gcc pass 1
yann@850
    47
do_cc_core_pass_1() {
yann@850
    48
    # If we're building for bare metal, build the static core gcc,
yann@850
    49
    # with libgcc.
yann@850
    50
    # In case we're not bare metal, and we're NPTL, build the static core gcc.
yann@850
    51
    # In any other case, do nothing.
yann@850
    52
    case "${CT_BARE_METAL},${CT_THREADS}" in
yann@850
    53
        y,*)    do_cc_core mode=baremetal build_libgcc=yes;;
yann@850
    54
        ,nptl)  do_cc_core mode=static build_libgcc=no;;
yann@850
    55
        *)      ;;
yann@850
    56
    esac
yann@850
    57
}
yann@850
    58
yann@850
    59
# Core gcc pass 2
yann@850
    60
do_cc_core_pass_2() {
yann@850
    61
    # In case we're building for bare metal, do nothing, we already have
yann@850
    62
    # our compiler.
yann@892
    63
    # In case we're NPTL, build the shared core gcc and the target libgcc.
yann@892
    64
    # In any other case, build the static core gcc and, if using gcc-4.3+,
yann@892
    65
    # also build the target libgcc.
yann@850
    66
    case "${CT_BARE_METAL},${CT_THREADS}" in
yann@850
    67
        y,*)    ;;
yann@892
    68
        ,nptl)
yann@892
    69
            do_cc_core mode=shared build_libgcc=yes
yann@892
    70
            ;;
yann@892
    71
        *)  if [ "${CT_CC_GCC_4_3_or_later}" = "y" ]; then
yann@892
    72
                do_cc_core mode=static build_libgcc=yes
yann@892
    73
            else
yann@892
    74
                do_cc_core mode=static build_libgcc=no
yann@892
    75
            fi
yann@892
    76
            ;;
yann@850
    77
    esac
yann@850
    78
}
yann@850
    79
yann@850
    80
#------------------------------------------------------------------------------
yann@850
    81
# Build core gcc
yann@850
    82
# This function is used to build both the static and the shared core C conpiler,
yann@850
    83
# with or without the target libgcc. We need to know wether:
yann@850
    84
#  - we're building static, shared or bare metal: mode=[static|shared|baremetal]
yann@850
    85
#  - we need to build libgcc or not             : build_libgcc=[yes|no]
yann@850
    86
# Usage: do_cc_core_static mode=[static|shared|baremetal] build_libgcc=[yes|no]
yann@850
    87
do_cc_core() {
yann@850
    88
    local mode
yann@850
    89
    local build_libgcc
yann@850
    90
    local core_prefix_dir
yann@850
    91
    local extra_config
yann@1107
    92
    local lang_opt
yann@1268
    93
    local version="${CT_CC_VERSION}${CT_CC_GCC_4_4_snapshot_date}"
yann@850
    94
yann@850
    95
    eval $1
yann@850
    96
    eval $2
yann@850
    97
    CT_TestOrAbort "Internal Error: 'mode' must either 'static', 'shared' or 'baremetal', not '${mode:-(empty)}'" "${mode}" = "static" -o "${mode}" = "shared" -o "${mode}" = "baremetal"
yann@850
    98
    CT_TestOrAbort "Internal Error: 'build_libgcc' must be either 'yes' or 'no', not '${build_libgcc:-(empty)}'" "${build_libgcc}" = "yes" -o "${build_libgcc}" = "no"
yann@850
    99
    # In normal conditions, ( "${mode}" = "shared" ) implies
yann@850
   100
    # ( "${build_libgcc}" = "yes" ), but I won't check for that
yann@850
   101
yann@1107
   102
    CT_DoStep INFO "Installing ${mode} core C compiler"
yann@850
   103
    mkdir -p "${CT_BUILD_DIR}/build-cc-core-${mode}"
yann@850
   104
    cd "${CT_BUILD_DIR}/build-cc-core-${mode}"
yann@850
   105
yann@1107
   106
    lang_opt=c
yann@850
   107
    case "${mode}" in
yann@850
   108
        static)
yann@850
   109
            core_prefix_dir="${CT_CC_CORE_STATIC_PREFIX_DIR}"
yann@850
   110
            extra_config="${extra_config} --with-newlib --enable-threads=no --disable-shared"
yann@850
   111
            copy_headers=y
yann@850
   112
            ;;
yann@850
   113
        shared)
yann@850
   114
            core_prefix_dir="${CT_CC_CORE_SHARED_PREFIX_DIR}"
yann@850
   115
            extra_config="${extra_config} --enable-shared"
yann@850
   116
            copy_headers=y
yann@850
   117
            ;;
yann@850
   118
        baremetal)
yann@850
   119
            core_prefix_dir="${CT_PREFIX_DIR}"
yann@850
   120
            extra_config="${extra_config} --with-newlib --enable-threads=no --disable-shared"
yann@1107
   121
            [ "${CT_CC_LANG_CXX}" = "y" ] && lang_opt="${lang_opt},c++"
yann@850
   122
            copy_headers=n
yann@850
   123
            ;;
yann@850
   124
    esac
yann@850
   125
yann@850
   126
    if [ "${copy_headers}" = "y" ]; then
yann@850
   127
        CT_DoLog DEBUG "Copying headers to install area of bootstrap gcc, so it can build libgcc2"
yann@850
   128
        CT_DoExecLog ALL mkdir -p "${core_prefix_dir}/${CT_TARGET}/include"
yann@850
   129
        CT_DoExecLog ALL cp -r "${CT_HEADERS_DIR}"/* "${core_prefix_dir}/${CT_TARGET}/include"
yann@850
   130
    fi
yann@850
   131
yann@850
   132
    CT_DoLog EXTRA "Configuring ${mode} core C compiler"
yann@850
   133
yann@850
   134
    extra_config="${extra_config} ${CT_ARCH_WITH_ARCH}"
yann@850
   135
    extra_config="${extra_config} ${CT_ARCH_WITH_ABI}"
yann@850
   136
    extra_config="${extra_config} ${CT_ARCH_WITH_CPU}"
yann@850
   137
    extra_config="${extra_config} ${CT_ARCH_WITH_TUNE}"
yann@850
   138
    extra_config="${extra_config} ${CT_ARCH_WITH_FPU}"
yann@850
   139
    extra_config="${extra_config} ${CT_ARCH_WITH_FLOAT}"
yann@850
   140
    [ "${CT_GMP_MPFR}" = "y" ] && extra_config="${extra_config} --with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}"
yann@850
   141
    if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
yann@850
   142
        extra_config="${extra_config} --enable-__cxa_atexit"
yann@850
   143
    else
yann@850
   144
        extra_config="${extra_config} --disable-__cxa_atexit"
yann@850
   145
    fi
yann@850
   146
yann@850
   147
    CT_DoLog DEBUG "Extra config passed: '${extra_config}'"
yann@850
   148
yann@850
   149
    # Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532)
yann@1041
   150
    CC_FOR_BUILD="${CT_BUILD}-gcc"                  \
yann@850
   151
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                  \
yann@850
   152
    CT_DoExecLog ALL                                \
yann@1268
   153
    "${CT_SRC_DIR}/gcc-${version}/configure"        \
yann@1041
   154
        --build=${CT_BUILD}                         \
yann@850
   155
        --host=${CT_HOST}                           \
yann@850
   156
        --target=${CT_TARGET}                       \
yann@850
   157
        --prefix="${core_prefix_dir}"               \
yann@850
   158
        --with-local-prefix="${CT_SYSROOT_DIR}"     \
yann@850
   159
        --disable-multilib                          \
yann@850
   160
        ${CC_CORE_SYSROOT_ARG}                      \
yann@850
   161
        ${extra_config}                             \
yann@850
   162
        --disable-nls                               \
yann@850
   163
        --enable-symvers=gnu                        \
yann@1107
   164
        --enable-languages="${lang_opt}"            \
yann@850
   165
        --enable-target-optspace                    \
yann@850
   166
        ${CT_CC_CORE_EXTRA_CONFIG}
yann@850
   167
yann@850
   168
    if [ "${build_libgcc}" = "yes" ]; then
yann@850
   169
        # HACK: we need to override SHLIB_LC from gcc/config/t-slibgcc-elf-ver or
yann@850
   170
        # gcc/config/t-libunwind so -lc is removed from the link for
yann@850
   171
        # libgcc_s.so, as we do not have a target -lc yet.
yann@850
   172
        # This is not as ugly as it appears to be ;-) All symbols get resolved
yann@850
   173
        # during the glibc build, and we provide a proper libgcc_s.so for the
yann@850
   174
        # cross toolchain during the final gcc build.
yann@850
   175
        #
yann@850
   176
        # As we cannot modify the source tree, nor override SHLIB_LC itself
yann@850
   177
        # during configure or make, we have to edit the resultant
yann@850
   178
        # gcc/libgcc.mk itself to remove -lc from the link.
yann@850
   179
        # This causes us to have to jump through some hoops...
yann@850
   180
        #
yann@850
   181
        # To produce libgcc.mk to edit we firstly require libiberty.a,
yann@850
   182
        # so we configure then build it.
yann@850
   183
        # Next we have to configure gcc, create libgcc.mk then edit it...
yann@850
   184
        # So much easier if we just edit the source tree, but hey...
yann@1268
   185
        if [ ! -f "${CT_SRC_DIR}/gcc-${version}/gcc/BASE-VER" ]; then
yann@850
   186
            CT_DoExecLog ALL make configure-libiberty
yann@850
   187
            CT_DoExecLog ALL make ${PARALLELMFLAGS} -C libiberty libiberty.a
yann@850
   188
            CT_DoExecLog ALL make configure-gcc configure-libcpp
yann@850
   189
            CT_DoExecLog ALL make ${PARALLELMFLAGS} all-libcpp
yann@850
   190
        else
yann@850
   191
            CT_DoExecLog ALL make configure-gcc configure-libcpp configure-build-libiberty
yann@850
   192
            CT_DoExecLog ALL make ${PARALLELMFLAGS} all-libcpp all-build-libiberty
yann@850
   193
        fi
yann@850
   194
        # HACK: gcc-4.2 uses libdecnumber to build libgcc.mk, so build it here.
yann@1268
   195
        if [ -d "${CT_SRC_DIR}/gcc-${version}/libdecnumber" ]; then
yann@850
   196
            CT_DoExecLog ALL make configure-libdecnumber
yann@850
   197
            CT_DoExecLog ALL make ${PARALLELMFLAGS} -C libdecnumber libdecnumber.a
yann@850
   198
        fi
yann@850
   199
yann@850
   200
        # Starting with GCC 4.3, libgcc.mk is no longer built,
yann@850
   201
        # and libgcc.mvars is used instead.
yann@850
   202
yann@892
   203
        if [ "${CT_CC_GCC_4_3_or_later}" = "y" ]; then
yann@850
   204
            libgcc_rule="libgcc.mvars"
yann@850
   205
            build_rules="all-gcc all-target-libgcc"
yann@850
   206
            install_rules="install-gcc install-target-libgcc"
yann@850
   207
        else
yann@850
   208
            libgcc_rule="libgcc.mk"
yann@850
   209
            build_rules="all-gcc"
yann@850
   210
            install_rules="install-gcc"
yann@850
   211
        fi
yann@850
   212
yann@850
   213
        CT_DoExecLog ALL make ${PARALLELMFLAGS} -C gcc ${libgcc_rule}
yann@850
   214
        sed -r -i -e 's@-lc@@g' gcc/${libgcc_rule}
yann@850
   215
    else # build_libgcc
yann@850
   216
            build_rules="all-gcc"
yann@850
   217
            install_rules="install-gcc"
yann@850
   218
    fi   # ! build libgcc
yann@850
   219
yann@850
   220
    if [ "${CT_CANADIAN}" = "y" ]; then
yann@850
   221
        CT_DoLog EXTRA "Building libiberty"
yann@850
   222
        CT_DoExecLog ALL make ${PARALLELMFLAGS} all-build-libiberty
yann@850
   223
    fi
yann@850
   224
yann@850
   225
    CT_DoLog EXTRA "Building ${mode} core C compiler"
yann@850
   226
    CT_DoExecLog ALL make ${PARALLELMFLAGS} ${build_rules}
yann@850
   227
yann@850
   228
    CT_DoLog EXTRA "Installing ${mode} core C compiler"
yann@850
   229
    CT_DoExecLog ALL make ${install_rules}
yann@850
   230
yann@850
   231
    CT_EndStep
yann@850
   232
}
yann@850
   233
yann@850
   234
#------------------------------------------------------------------------------
yann@850
   235
# Build final gcc
yann@850
   236
do_cc() {
yann@1268
   237
    local version="${CT_CC_VERSION}${CT_CC_GCC_4_4_snapshot_date}"
yann@1268
   238
yann@850
   239
    # If building for bare metal, nothing to be done here, the static core conpiler is enough!
yann@850
   240
    [ "${CT_BARE_METAL}" = "y" ] && return 0
yann@850
   241
yann@850
   242
    CT_DoStep INFO "Installing final compiler"
yann@850
   243
yann@850
   244
    mkdir -p "${CT_BUILD_DIR}/build-cc"
yann@850
   245
    cd "${CT_BUILD_DIR}/build-cc"
yann@850
   246
yann@850
   247
    CT_DoLog EXTRA "Configuring final compiler"
yann@850
   248
yann@850
   249
    # Enable selected languages
yann@850
   250
    lang_opt="c"
yann@850
   251
    [ "${CT_CC_LANG_CXX}" = "y"      ] && lang_opt="${lang_opt},c++"
yann@850
   252
    [ "${CT_CC_LANG_FORTRAN}" = "y"  ] && lang_opt="${lang_opt},fortran"
yann@850
   253
    [ "${CT_CC_LANG_ADA}" = "y"      ] && lang_opt="${lang_opt},ada"
yann@850
   254
    [ "${CT_CC_LANG_JAVA}" = "y"     ] && lang_opt="${lang_opt},java"
yann@850
   255
    [ "${CT_CC_LANG_OBJC}" = "y"     ] && lang_opt="${lang_opt},objc"
yann@850
   256
    [ "${CT_CC_LANG_OBJCXX}" = "y"   ] && lang_opt="${lang_opt},obj-c++"
yann@850
   257
    CT_Test "Building ADA language is not yet supported. Will try..." "${CT_CC_LANG_ADA}" = "y"
yann@850
   258
    CT_Test "Building Objective-C language is not yet supported. Will try..." "${CT_CC_LANG_OBJC}" = "y"
yann@850
   259
    CT_Test "Building Objective-C++ language is not yet supported. Will try..." "${CT_CC_LANG_OBJCXX}" = "y"
yann@850
   260
    CT_Test "Building ${CT_CC_LANG_OTHERS//,/ } language(s) is not yet supported. Will try..." -n "${CT_CC_LANG_OTHERS}"
yann@850
   261
    lang_opt=$(echo "${lang_opt},${CT_CC_LANG_OTHERS}" |sed -r -e 's/,+/,/g; s/,*$//;')
yann@850
   262
yann@850
   263
    extra_config="--enable-languages=${lang_opt}"
yann@850
   264
    extra_config="${extra_config} --disable-multilib"
yann@850
   265
    extra_config="${extra_config} ${CT_ARCH_WITH_ARCH}"
yann@850
   266
    extra_config="${extra_config} ${CT_ARCH_WITH_ABI}"
yann@850
   267
    extra_config="${extra_config} ${CT_ARCH_WITH_CPU}"
yann@850
   268
    extra_config="${extra_config} ${CT_ARCH_WITH_TUNE}"
yann@850
   269
    extra_config="${extra_config} ${CT_ARCH_WITH_FPU}"
yann@850
   270
    extra_config="${extra_config} ${CT_ARCH_WITH_FLOAT}"
yann@850
   271
    [ "${CT_SHARED_LIBS}" = "y" ]                   || extra_config="${extra_config} --disable-shared"
yann@850
   272
    [ "${CT_GMP_MPFR}" = "y" ]                      && extra_config="${extra_config} --with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}"
yann@850
   273
    [ -n "${CT_CC_PKGVERSION}" ]                    && extra_config="${extra_config} --with-pkgversion=${CT_CC_PKGVERSION}"
yann@850
   274
    [ -n "${CT_CC_BUGURL}" ]                        && extra_config="${extra_config} --with-bugurl=${CT_CC_BUGURL}"
yann@850
   275
    [ "${CT_CC_SJLJ_EXCEPTIONS_USE}" = "y" ]        && extra_config="${extra_config} --enable-sjlj-exceptions"
yann@850
   276
    [ "${CT_CC_SJLJ_EXCEPTIONS_DONT_USE}" = "y" ]   && extra_config="${extra_config} --disable-sjlj-exceptions"
yann@850
   277
    if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
yann@850
   278
        extra_config="${extra_config} --enable-__cxa_atexit"
yann@850
   279
    else
yann@850
   280
        extra_config="${extra_config} --disable-__cxa_atexit"
yann@850
   281
    fi
yann@850
   282
yann@850
   283
    CT_DoLog DEBUG "Extra config passed: '${extra_config}'"
yann@850
   284
yann@850
   285
    # --enable-symvers=gnu really only needed for sh4 to work around a
yann@850
   286
    # detection problem only matters for gcc-3.2.x and later, I think.
yann@850
   287
    # --disable-nls to work around crash bug on ppc405, but also because
yann@850
   288
    # embedded systems don't really need message catalogs...
yann@1122
   289
    CC_FOR_BUILD="${CT_BUILD}-gcc"                  \
yann@1122
   290
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                  \
yann@1122
   291
    CFLAGS_FOR_TARGET="${CT_TARGET_CFLAGS}"         \
yann@1122
   292
    CXXFLAGS_FOR_TARGET="${CT_TARGET_CFLAGS}"       \
yann@1122
   293
    LDFLAGS_FOR_TARGET="${CT_TARGET_LDFLAGS}"       \
yann@1122
   294
    CT_DoExecLog ALL                                \
yann@1268
   295
    "${CT_SRC_DIR}/gcc-${version}/configure"        \
yann@1122
   296
        --build=${CT_BUILD}                         \
yann@1122
   297
        --host=${CT_HOST}                           \
yann@1122
   298
        --target=${CT_TARGET}                       \
yann@1122
   299
        --prefix="${CT_PREFIX_DIR}"                 \
yann@1122
   300
        ${CC_SYSROOT_ARG}                           \
yann@1122
   301
        ${extra_config}                             \
yann@1122
   302
        --with-local-prefix="${CT_SYSROOT_DIR}"     \
yann@1122
   303
        --disable-nls                               \
yann@1122
   304
        --enable-threads=posix                      \
yann@1122
   305
        --enable-symvers=gnu                        \
yann@1122
   306
        --enable-c99                                \
yann@1122
   307
        --enable-long-long                          \
yann@1122
   308
        --enable-target-optspace                    \
yann@850
   309
        ${CT_CC_EXTRA_CONFIG}
yann@850
   310
yann@850
   311
    if [ "${CT_CANADIAN}" = "y" ]; then
yann@850
   312
        CT_DoLog EXTRA "Building libiberty"
yann@850
   313
        CT_DoExecLog ALL make ${PARALLELMFLAGS} all-build-libiberty
yann@850
   314
    fi
yann@850
   315
yann@850
   316
    CT_DoLog EXTRA "Building final compiler"
yann@850
   317
    CT_DoExecLog ALL make ${PARALLELMFLAGS} all
yann@850
   318
yann@850
   319
    CT_DoLog EXTRA "Installing final compiler"
yann@850
   320
    CT_DoExecLog ALL make install
yann@850
   321
yann@850
   322
    # Create a symlink ${CT_TARGET}-cc to ${CT_TARGET}-gcc to always be able
yann@850
   323
    # to call the C compiler with the same, somewhat canonical name.
yann@1007
   324
    CT_DoExecLog ALL ln -sv "${CT_TARGET}"-gcc "${CT_PREFIX_DIR}/bin/${CT_TARGET}"-cc
yann@850
   325
yann@850
   326
    CT_EndStep
yann@850
   327
}