Release Note:	Marvell GCC C/C++ Compiler Toolchain
Release:	2013Q2 (gcc version 4.6.4)
Date:		2013/06
Directory:

	0. Marvell GCC Toolchain
	1. Marvell GCC Release Website
	2. Binary Packages
	3. Source Code Packages
	4. Support
	5. Feature Listing





--------------------------------------------------------------------------------
0. Marvell GCC Toolchain
--------------------------------------------------------------------------------

    The Marvell GCC C/C++ Compiler Toolchain (Marvell GCC, or MGCC) is a
collection of open source tools include gcc C/C++ compilers, binutils, C/C++
libraries, gdb debugger, etc.  Marvell makes some bug-fixes and tuned features
especially for the Marvell CPUs that are ARMv5te/ARMv7-a compatible.

    Release 2013Q2 of MGCC is the alpha release with the major tool GCC 4.6.4.

    Note that Marvell only collects and tunes these packages, and all products
or services mentioned herin may be trademarks of their respective owners.





--------------------------------------------------------------------------------
1. Marvell GCC Release Website
--------------------------------------------------------------------------------

    MGCC source code and pre-built executables for some platforms can be
download from the website:

	http://10.19.133.165/release/gcc/

    The details will be mentioned in the following context.





--------------------------------------------------------------------------------
2. Binary Packages
--------------------------------------------------------------------------------

    Download the binary toolchains from the MGCC Release Website according to
the following rules/subdirectories:

(1) The MGCC Major Version

    For example:

	mgcc-4.2/
	mgcc-4.4/
	mgcc-4.6/

    These are according to the GCC, the most important tool, version number.

(2) Tool Building Version

    They are always named by 'YYYYMM-NNN-VERSION'.  For example:

	201208-1593-4.6.4/

    The newer version has fixed more bugs and add more Marvell-tuned features.

(3) The Default Target Endian

	big-endian/
	little-endian/

    'big-endian' includes ARMv5's BE32 and ARMv7's BE8 versions.  The MGCC
    runtime libraries and C/C++ libraries comes from big-endian subdirectory
    are compiled with the default 'gcc -mbig-endian' option, while from
    little-endian with the default 'gcc -mlittle-endian' option.

    There may be extra MGCC toolchains for other target.  For example, the
    Android target is at:

	android/
    
    Note that users can also get the MGCC source code and extra documents
    from the subdirectories:

	src/
	doc/

(4) The Default Target ARM Instruction Set

    For example:

	v5/
	v7/

    MGCC from v5 subdirectory generates ARMv5 instruction set, while v7
    generates ARMv7 instructions set by default.

(5) The Host Execution Environment

    For example:

	host-arm-linux/
	host-i686-linux/
	host-windows-mingw32/
	host-x86_64-linux/
	...

    Select suitable hardware and O.S platform on which MGCC would be executed.

    For not mentioned host environment, users may download the MGCC source
    code and build MGCC on that host.  If fails to build, please ask Marvell
    Compiler Team for help.

(6) The Binary Package

    They are always named by

	arm<ARCH>-marvell-<ABI>-<VFP>_<VERSION>_<HOST>_<YYYYMM>.tar.bz2

    with different target features.  For example: 

	...
	armebv5-marvell-native-softfp-4.6.4_201403.tar.bz2
	armv5-marvell-linux-gnueabi-soft-4.6.4_i686_201403.tar.bz2
	armebv7-marvell-eabi-hard-4.6.4_x86_64_201403.tar.bz2
	armv7-marvell-linux-gnueabi-soft-mingw32-4.6.4_201413.zip
	...

    <ARCH> : v5, v7, ebv5, ebv7.

	'v5' means ARMv5 instruction set, and while 'v7' means ARMv7.

	The prefix 'armv5' or 'armv7' is the little-endian target, 'armebv5'
	is BE32, and 'armebv7' is BE8.

    <ABI> : native, linux-gnueabi, eabi

	'native' is the native-compilers running on ARM Linux hosts and
	generating the target ARM code.  The 'gcc -mabi=aapcs-linux' is
	used by default.  The accompanying C library is glibc.  The compiled
	programes would be executed on the Linux environment with the
	compatible glibc shared library.

	'linux-gnueabi' with the default 'gcc -mabi=aapcs-linux' is always for
	the target of ARM Linux platform.  The accompanying C library is glibc.
	The compiled programes would be executed on the ARM Linux environment
	with the compatible glibc shared library.

	'eabi' with the default 'gcc -mabi=aapcs' is always for the target of
	ARM bare board or semihosting environment.  The accompanying C library
	is Newlib.  If you are developing embedded system without any O.S.
	support, you should select this package to develop your programs.

    <VFP> : hard, soft, softfp

	The 'hard', 'soft' and 'softfp' mean the default 'gcc -mfloat-abi='
	option, and the libraries, e.g. glibc and newlib, are compiled with
	that default option.

	'soft' tool generates non-VFP code, and the others may generate
	VFP/Neon code.  Objects compiled by 'soft' and 'softfp' are
	compatible, but not 'hard'.

    <VERSION> : 4.6.4, 4.8.3, ...

	This specifies the GCC VERSION on which the MGCC toolchain executes.

    <HOST> : i686, x86_64, mingw32

	This specifies the host on which the MGCC toolchain executes.


    After downloading the suitable package, use 'tar' or other unpacking tools
to unpack it.  E.g.

	$ tar jxvf armv7-marvell-linux-gnueabi-softfp-4.6.4_x86_64_201403.tar.bz2
	$ cd armv7-marvell-linux-gnueabi-softfp-4.6.4_x86_64_201403
	$ ls bin/				# executable files
	$ ls arm-marvell-linux-gnueabi/libc	# sysroot

    For 'linux-gnueabi' version, users may need to update the shared libraries
(*.so) from the MGCC sysroot on the target ARM Linux environment if the
compiled program fails to run because of wrong *.so version.





--------------------------------------------------------------------------------
3. Source Code Packages
--------------------------------------------------------------------------------

    Download the toolchain source code from the Marvell GCC Release Website,
and untar them.

    The below listing is the source code packages and where they come from:

    marvell-gcc			Marvell-tuned GCC C/C++ Compiler Source Code
    |
    +-- script			Building scripts and documents
    |   |
    |   +-- doc
    |
    +-- src
        |
        +-- binutils-src	Marvell-tuned Binutils originally from FSF.
        |                       http://www.gnu.org/software/binutils/ 
        |
        +-- cloog-src		CLooG from FSF for building GCC.
        |			http://www.cloog.org/
        |			ftp://gcc.gnu.org/pub/gcc/infrastructure/
        |
        +-- expat-src		The Expat XML Parser.
        |			http://www.libexpat.org/
        |
        +-- extra-src		Extra packages as addends to the MGCC
        |			toolchains for different purposes.
        |
        +-- gcc-src		Marvell-tuned GCC originally from FSF and
        |			Linaro.
        |			http://gcc.gnu.org/
        |			http://www.linaro.org/
        |
        +-- gdb-src		GDB from FSF and Linaro.
        |			http://www.gnu.org/software/gdb/
        |			http://www.linaro.org/
        |
        +-- glibc-ports-src	GNU glibc 2.15 from CodeSourcery for ARM
	|			porting.
        |
        +-- glibc-src		GNU glibc 2.15 from CodeSourcery for
	|			arm-marvell-linux-gnueabi.
        |
        +-- gmp-src		The GNU Multiple Precision Arithmetic Library
        |			for building GCC.
        |			http://gmplib.org/
        |			http://ftp.gnu.org/gnu/gmp/
        |
        +-- linux-src		Header files for arm-marvell-linux-gnueabi.
        |			https://www.kernel.org/
        |
        +-- mpc-src		GNU MPC Library from FSF for building GCC.
        |			http://www.multiprecision.org/
        |			http://ftp.gnu.org/gnu/mpc/
        |
        +-- mpfr-src		GNU MPFR Library for building GCC.
        |			http://www.mpfr.org/
        |			http://ftp.gnu.org/gnu/mpfr/
        |
        +-- ncurses-src		Ncurses (new curses) library from FSF.
        |			http://www.gnu.org/software/ncurses/
        |			http://ftp.gnu.org/pub/gnu/ncurses/
	|
        +-- newlib-src		Newlib for arm-marvell-eabi.
        |			http://www.sourceware.org/newlib/
        |
        +-- ppl-src		Parma Polyhedra Library (PPL) for building GCC.
	|			http://bugseng.com/products/ppl/
        |
	+-- uclibc-src		A C library for embedded Linux.
	|			http://www.uclibc.org/
	|
	+-- zlib-src		zlib data compression library.
				http://www.zlib.net/
				http://www.gzip.org/

    Extra packages (src/extra-src) is as addends to the MGCC toolchains.  Refer
to the documents "MARVELL_GCC_Extra_Libraries_for_Various_Platforms.txt" and
"MARVELL_GCC_Dump_Optimization_Options_Plugin.txt" for details.

    Refer to 'marvell-gcc/script/INSTALL' for building toolchains.  The
following commands show the supported targets and simple building commands:

	$ cd marvell-gcc
	$ make -f script/Makefile.marvell

    For any qeuestions and special request, please ask FAE or Marvell Compiler
Team for help.





--------------------------------------------------------------------------------
4. Support
--------------------------------------------------------------------------------

. Internal Bug Report Email:

	marvell-gcc-bugs@lists.marvell.com


. Internal Bug Report Mailing List:

	http://lists.marvell.com/mailman/listinfo/marvell-gcc-bugs

. External Bug Report Email:

	mrvlgccbug@gmail.com



--------------------------------------------------------------------------------
5. Feature Listing
--------------------------------------------------------------------------------


. MGCC toolchains building process for different hosts and configured with
  multiple target features.


. Support Marvell's extension instructions.


. Support Marvell's WMMX intrinsics and auto-vectorization.  For details,
  refer to the following document in the ${MGCC_TOOCHAINS}/script/doc/
  directory:

	MARVELL_Using_GCC_IWMMXT_Autovect.txt
	MARVELL_Using_GCC_IWMMXT.doc
	MARVELL_Using_GCC_IWMMXT_Intrinsic.pdf
	MARVELL_Using_GCC_IWMMXT.pdf
	MARVELL_Using_GCC_IWMMXT_Vector_Class_Header_File.pdf
	MARVELL_Using_GCC_Neon_Auto_Vectorization.pdf


. Optimized instruction scheduling for Marvell CPUs including PJ1 and PJ4
  series.


. Marvell-specified options.  For details, refer to:

	${MGCC_TOOCHAINS}/script/doc/MARVELL_GCC_Options.txt


. Refer to the file named 'ChangeLog.Marvell' in the source code directories
  for the modification. E.g.

	${MGCC_TOOCHAINS}/src/binutils-src/ChangeLog.Marvell
	${MGCC_TOOCHAINS}/src/gcc-src/ChangeLog.Marvell

  These ChangeLogs are only simple log from our git repertory.


. For the changes, new features, and fixes of official gcc from 4.4 to 4.6,
  please refer to:

	http://gcc.gnu.org/gcc-4.5/changes.html
	http://gcc.gnu.org/gcc-4.6/changes.html
