[PATCH 1 of 1] cc/gcc: Add the ability to build gcc from svn

Bryan Hundven bryanhundven@gmail.com
Wed Aug 22 15:40:00 GMT 2012


# HG changeset patch
# User Bryan Hundven <bryanhundven@gmail.com>
# Date 1345649959 25200
# Node ID cc6aefabb711e3da03d5673315fe89efe3df38c9
# Parent  d3cc9bc005c8385262a92bf290f31b6d874e72b5
cc/gcc: Add the ability to build gcc from svn

I took some of the svn functionality from eglibc.

Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>

diff -r d3cc9bc005c8 -r cc6aefabb711 config/cc/gcc.in
--- a/config/cc/gcc.in	Mon Aug 20 20:29:48 2012 +0200
+++ b/config/cc/gcc.in	Wed Aug 22 08:39:19 2012 -0700
@@ -33,6 +33,14 @@
 choice
     bool
     prompt "gcc version"
+
+config CC_V_SVN
+    bool
+    prompt "gcc from svn"
+    depends on EXPERIMENTAL
+    depends on CONFIGURE_has_svn
+    select CC_GCC_latest
+
 # Don't remove next line
 # CT_INSERT_VERSION_BELOW
 
@@ -228,6 +236,65 @@
 
 endchoice
 
+if CC_V_SVN
+
+config GCC_BRANCH
+    string
+    prompt "Branch or tag to use"
+    default "trunk"
+    help
+      Enter the branch of gcc to use.
+      Default is trunk
+      
+      A few examples might be:
+      * trunk
+      * branches/gcc-4_7-branch
+      * branches/gcc-4_4-branch
+      * branches/gccgo
+      * branches/google
+      * tags/gcc_4_7_1_release
+      * tags/microblaze-4.4.2
+
+config GCC_REVISION
+    string
+    prompt "Revision to use"
+    default "HEAD"
+    help
+      Enter the revision of trunk you want to use.
+      Default is HEAD
+      
+      A revision argument can be one of:
+          NUMBER       revision number
+          '{' DATE '}' revision at start of the date (*)
+          'HEAD'       latest in repository
+      
+      (*) If you want to use a date, please use ISO-8601 formats if
+      at all possible.
+
+config GCC_HTTP
+    bool
+    prompt "use http:// instead of svn://"
+    help
+      By default, when gcc is downloaded it is checked out using
+      svn://gcc.gnu.org/svn/gcc. This option allows you to download gcc
+      from http://gcc.gnu.org/svn/gcc, if you are behind a proxy or firewall.
+      If you are behind a proxy, don't forget to update your
+      .subversion/servers file with your proxy info in [global].
+
+config GCC_CHECKOUT
+    bool
+    prompt "checkout instead of export"
+    default n
+    help
+      By default, the gcc download will be an export of the subversion
+      repository. If you say 'y' here, then the repository will instead be
+      checked-out, so that you can update it later.
+      
+      Note that crosstool-NG will *not* update your working copy, you will
+      have to do that yourself.
+
+endif
+
 config CC_GCC_4_2
     bool
     select CC_GCC_4_2_or_later
@@ -301,6 +368,18 @@
     bool
     select CC_GCC_4_6_or_later
 
+config CC_GCC_latest
+    bool
+    select CC_GCC_4_7_or_later
+    select CC_GCC_USE_GMP_MPFR
+    select CC_GCC_USE_MPC
+    select CC_GCC_HAS_GRAPHITE
+    select CC_GCC_HAS_LTO
+    select CC_GCC_HAS_PKGVERSION_BUGURL
+    select CC_GCC_HAS_BUILD_ID
+    select CC_GCC_HAS_LNK_HASH_STYLE
+    select CC_GCC_HAS_LIBQUADMATH
+
 config CC_GCC_HAS_GRAPHITE
     bool
 
@@ -362,6 +441,7 @@
 
 config CC_VERSION
     string
+    default "SVN" if CC_V_SVN
 # Don't remove next line
 # CT_INSERT_VERSION_STRING_BELOW
     default "linaro-4.7-2012.08" if CC_V_linaro_4_7_2012_08
diff -r d3cc9bc005c8 -r cc6aefabb711 scripts/build/cc/gcc.sh
--- a/scripts/build/cc/gcc.sh	Mon Aug 20 20:29:48 2012 +0200
+++ b/scripts/build/cc/gcc.sh	Wed Aug 22 08:39:19 2012 -0700
@@ -4,31 +4,50 @@
 
 # Download gcc
 do_cc_get() {
-    local linaro_version
-    local linaro_series
-    local linaro_base_url="http://launchpad.net/gcc-linaro"
+    if [ -n ${CC_V_SVN} ]; then
+        # Get gcc from SVN!
+        local svn_base
+        if [ "${CT_GCC_HTTP}" = "y" ]; then
+            svn_base="http://gcc.gnu.org/svn/gcc"
+        else
+            svn_base="svn://gcc.gnu.org/svn/gcc"
+        fi
 
+        CT_GCC_BRANCH="${CT_GCC_BRANCH:-trunk}"
+        
+        CT_CC_VERSION="${CT_GCC_BRANCH//\//_}"
 
-    # Account for the Linaro versioning
-    linaro_version="$( echo "${CT_CC_VERSION}"      \
-                       |sed -r -e 's/^linaro-//;'   \
-                     )"
-    linaro_series="$( echo "${linaro_version}"      \
-                      |sed -r -e 's/-.*//;'         \
-                    )"
+        CT_GetSVN "gcc-${CT_GCC_BRANCH}" \
+            "${svn_base}/" \
+            "${CT_GCC_REVISION:-HEAD}"
+    else
+        # Get gcc from a released tarball!
+        local linaro_version
+        local linaro_series
+        local linaro_base_url="http://launchpad.net/gcc-linaro"
 
-    # Ah! gcc folks are kind of 'different': they store the tarballs in
-    # subdirectories of the same name! That's because gcc is such /crap/ that
-    # it is such /big/ that it needs being splitted for distribution! Sad. :-(
-    # Arrgghh! Some of those versions does not follow this convention:
-    # gcc-3.3.3 lives in releases/gcc-3.3.3, while gcc-2.95.* isn't in a
-    # subdirectory! You bastard!
-    CT_GetFile "gcc-${CT_CC_VERSION}"                                                       \
-               {ftp,http}://ftp.gnu.org/gnu/gcc{,{,/releases}/gcc-${CT_CC_VERSION}}         \
-               ftp://ftp.irisa.fr/pub/mirrors/gcc.gnu.org/gcc/releases/gcc-${CT_CC_VERSION} \
-               ftp://ftp.uvsq.fr/pub/gcc/snapshots/${CT_CC_VERSION}                         \
-               "${linaro_base_url}/${linaro_series}/${linaro_version}/+download"
 
+        # Account for the Linaro versioning
+        linaro_version="$( echo "${CT_CC_VERSION}"      \
+                           |sed -r -e 's/^linaro-//;'   \
+                         )"
+        linaro_series="$( echo "${linaro_version}"      \
+                          |sed -r -e 's/-.*//;'         \
+                        )"
+
+        # Ah! gcc folks are kind of 'different': they store the tarballs in
+        # subdirectories of the same name! That's because gcc is such /crap/ that
+        # it is such /big/ that it needs being splitted for distribution! Sad. :-(
+        # Arrgghh! Some of those versions does not follow this convention:
+        # gcc-3.3.3 lives in releases/gcc-3.3.3, while gcc-2.95.* isn't in a
+        # subdirectory! You bastard!
+        CT_GetFile "gcc-${CT_CC_VERSION}"                                                       \
+                   {ftp,http}://ftp.gnu.org/gnu/gcc{,{,/releases}/gcc-${CT_CC_VERSION}}         \
+                   ftp://ftp.irisa.fr/pub/mirrors/gcc.gnu.org/gcc/releases/gcc-${CT_CC_VERSION} \
+                   ftp://ftp.uvsq.fr/pub/gcc/snapshots/${CT_CC_VERSION}                         \
+                   "${linaro_base_url}/${linaro_series}/${linaro_version}/+download"
+
+    fi # -n CC_V_SVN
     # Starting with GCC 4.3, ecj is used for Java, and will only be
     # built if the configure script finds ecj.jar at the top of the
     # GCC source tree, which will not be there unless we get it and
@@ -41,14 +60,16 @@
 
 # Extract gcc
 do_cc_extract() {
-    CT_Extract "gcc-${CT_CC_VERSION}"
-    CT_Patch "gcc" "${CT_CC_VERSION}"
+    if [ -z "${CC_V_SVN}" ]; then
+        CT_Extract "gcc-${CT_CC_VERSION}"
+        CT_Patch "gcc" "${CT_CC_VERSION}"
 
-    # Copy ecj-latest.jar to ecj.jar at the top of the GCC source tree
-    if [ "${CT_CC_LANG_JAVA_USE_ECJ}" = "y"                     \
-         -a ! -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/ecj.jar"   \
-       ]; then
-        CT_DoExecLog ALL cp -v "${CT_TARBALLS_DIR}/ecj-latest.jar" "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/ecj.jar"
+        # Copy ecj-latest.jar to ecj.jar at the top of the GCC source tree
+        if [ "${CT_CC_LANG_JAVA_USE_ECJ}" = "y"                     \
+             -a ! -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/ecj.jar"   \
+           ]; then
+            CT_DoExecLog ALL cp -v "${CT_TARBALLS_DIR}/ecj-latest.jar" "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/ecj.jar"
+        fi
     fi
 }
 

--
For unsubscribe information see http://sourceware.org/lists.html#faq



More information about the crossgcc mailing list