Using Smitna’s Build tool

Issues found while using it on XDA server:

No autoconf2.13 found:

Compile and install autoconf2.13 to a different folder, now create a symlink:

ln -s autoconf autoconf2.13

Add both versions of Autoconf (the latest, and 2.13 version)’s bin path to $PATH

Now it should work

Other package I needed to install was scons


You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.

Compiling Cyanogenmod for Desire on Sourceforge shell

Initial instructions tell us to

mkdir -p ~/bin
mkdir -p ~/android/system
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo

Confirm that repo downloads properly and that it’s actually the repo script and not an html page!

repo init -u git://github.com/CyanogenMod/android.git -b gingerbread

I initially had syntax errors with it. I think compiling and installing a new version of Python locally fixed. Disadvantage of Sourceforge is that you cant do an apt install. Anything that you need should be downloaded from tarball and painstakingly (in some cases) compiled. But I think I’m beginning to get the hang of it.

At this point, for SF, one has to change git:// to http://. https also doesnt work.

So

repo init -u git://github.com/CyanogenMod/android.git -b gingerbread

becomes

repo init -u http://github.com/CyanogenMod/android.git -b gingerbread

You will asked name and email. So far so good.
However the version that downloads may contain git:// addresses. So one has to edit the repo manifest.

cd .repo
grep for git:

You will note that it is in the file manifest.xml

manifest.xml-2-
manifest.xml-3-  
manifest.xml-6-
manifest.xml-7-  
manifest.xml-10-

Change to

manifest.xml:4:           fetch="http://android.git.kernel.org/"
manifest.xml:8:           fetch="http://github.com/"

Now you can proceed normally:

repo sync -j16

You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.

Building a toolchain for Android (Compiling an Android kernel) – crosstool-ng

Summary:

sudo apt-get install gawk bison flex texinfo automake libtool cvs curl aria2 patch lzma libncurses5-dev g++ openjdk-7-jre-headless build-essential libcloog-ppl-dev gettext help2man
cd ~/
git clone https://github.com/crosstool-ng/crosstool-ng.git
cd crosstool-ng/
./bootstrap
mkdir ../crosstoolactual
./configure --prefix=$HOME/crosstoolactual
make
make install
export PATH="${PATH}:$HOME/crosstoolactual/bin"
mkdir ~/work-dir
cd ~/work-dir
ct-ng help
ct-ng menuconfig
ct-ng build

Listing my .config here:

#
# Automatically generated file; DO NOT EDIT.
# Crosstool-NG Configuration
#
CT_CONFIGURE_has_static_link=y
CT_CONFIGURE_has_wget=y
CT_CONFIGURE_has_curl=y
CT_CONFIGURE_has_stat_flavor_GNU=y
CT_CONFIGURE_has_make_3_81_or_newer=y
CT_CONFIGURE_has_libtoolize_2_4_or_newer=y
CT_CONFIGURE_has_autoconf_2_63_or_newer=y
CT_CONFIGURE_has_autoreconf_2_63_or_newer=y
CT_CONFIGURE_has_gnu_m4_1_4_12_or_newer=y
CT_CONFIGURE_has_cvs=y
CT_CONFIGURE_has_svn=y
CT_CONFIGURE_has_git=y
CT_MODULES=y

#
# Paths and misc options
#

#
# crosstool-NG behavior
#
# CT_OBSOLETE is not set
CT_EXPERIMENTAL=y
# CT_ALLOW_BUILD_AS_ROOT is not set
# CT_DEBUG_CT is not set

#
# Paths
#
CT_LOCAL_TARBALLS_DIR="${HOME}/src"
CT_SAVE_TARBALLS=y
CT_WORK_DIR="${CT_TOP_DIR}/.build"
CT_BUILD_TOP_DIR="${CT_WORK_DIR}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}"
CT_PREFIX_DIR="${CT_PREFIX:-${HOME}/x-tools}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}"
CT_RM_RF_PREFIX_DIR=y
CT_REMOVE_DOCS=y
CT_PREFIX_DIR_RO=y
CT_STRIP_HOST_TOOLCHAIN_EXECUTABLES=y
# CT_STRIP_TARGET_TOOLCHAIN_EXECUTABLES is not set

#
# Downloading
#
CT_DOWNLOAD_AGENT_WGET=y
# CT_DOWNLOAD_AGENT_CURL is not set
# CT_DOWNLOAD_AGENT_NONE is not set
# CT_FORBID_DOWNLOAD is not set
# CT_FORCE_DOWNLOAD is not set
CT_CONNECT_TIMEOUT=10
CT_DOWNLOAD_WGET_OPTIONS="--passive-ftp --tries=3 -nc --progress=dot:binary"
# CT_ONLY_DOWNLOAD is not set
# CT_USE_MIRROR is not set

#
# Extracting
#
# CT_FORCE_EXTRACT is not set
CT_OVERRIDE_CONFIG_GUESS_SUB=y
# CT_ONLY_EXTRACT is not set
CT_PATCH_BUNDLED=y
# CT_PATCH_LOCAL is not set
# CT_PATCH_BUNDLED_LOCAL is not set
# CT_PATCH_LOCAL_BUNDLED is not set
# CT_PATCH_BUNDLED_FALLBACK_LOCAL is not set
# CT_PATCH_LOCAL_FALLBACK_BUNDLED is not set
# CT_PATCH_NONE is not set
CT_PATCH_ORDER="bundled"

#
# Build behavior
#
CT_PARALLEL_JOBS=0
CT_LOAD=""
CT_USE_PIPES=y
CT_EXTRA_CFLAGS_FOR_BUILD=""
CT_EXTRA_LDFLAGS_FOR_BUILD=""
CT_EXTRA_CFLAGS_FOR_HOST=""
CT_EXTRA_LDFLAGS_FOR_HOST=""
# CT_CONFIG_SHELL_SH is not set
# CT_CONFIG_SHELL_ASH is not set
CT_CONFIG_SHELL_BASH=y
# CT_CONFIG_SHELL_CUSTOM is not set
CT_CONFIG_SHELL="${bash}"

#
# Logging
#
# CT_LOG_ERROR is not set
# CT_LOG_WARN is not set
# CT_LOG_INFO is not set
CT_LOG_EXTRA=y
# CT_LOG_ALL is not set
# CT_LOG_DEBUG is not set
CT_LOG_LEVEL_MAX="EXTRA"
# CT_LOG_SEE_TOOLS_WARN is not set
CT_LOG_PROGRESS_BAR=y
CT_LOG_TO_FILE=y
CT_LOG_FILE_COMPRESS=y

#
# Target options
#
CT_ARCH="arm"
# CT_ARCH_alpha is not set
CT_ARCH_arm=y
# CT_ARCH_avr is not set
# CT_ARCH_m68k is not set
# CT_ARCH_microblaze is not set
# CT_ARCH_mips is not set
# CT_ARCH_nios2 is not set
# CT_ARCH_powerpc is not set
# CT_ARCH_s390 is not set
# CT_ARCH_sh is not set
# CT_ARCH_sparc is not set
# CT_ARCH_x86 is not set
# CT_ARCH_xtensa is not set
CT_ARCH_alpha_AVAILABLE=y
CT_ARCH_arm_AVAILABLE=y
CT_ARCH_avr_AVAILABLE=y
CT_ARCH_m68k_AVAILABLE=y
CT_ARCH_microblaze_AVAILABLE=y
CT_ARCH_mips_AVAILABLE=y
CT_ARCH_nios2_AVAILABLE=y
CT_ARCH_powerpc_AVAILABLE=y
CT_ARCH_s390_AVAILABLE=y
CT_ARCH_sh_AVAILABLE=y
CT_ARCH_sparc_AVAILABLE=y
CT_ARCH_x86_AVAILABLE=y
CT_ARCH_xtensa_AVAILABLE=y
CT_ARCH_SUFFIX=""

#
# Generic target options
#
# CT_MULTILIB is not set
CT_DEMULTILIB=y
CT_ARCH_SUPPORTS_BOTH_MMU=y
CT_ARCH_DEFAULT_HAS_MMU=y
CT_ARCH_USE_MMU=y
CT_ARCH_SUPPORTS_BOTH_ENDIAN=y
CT_ARCH_DEFAULT_LE=y
# CT_ARCH_BE is not set
CT_ARCH_LE=y
CT_ARCH_ENDIAN="little"
CT_ARCH_SUPPORTS_32=y
CT_ARCH_SUPPORTS_64=y
CT_ARCH_DEFAULT_32=y
CT_ARCH_BITNESS=64
# CT_ARCH_32 is not set
CT_ARCH_64=y

#
# Target optimisations
#
CT_ARCH_SUPPORTS_WITH_ARCH=y
CT_ARCH_SUPPORTS_WITH_CPU=y
CT_ARCH_SUPPORTS_WITH_TUNE=y
CT_ARCH_EXCLUSIVE_WITH_CPU=y
CT_ARCH_ARCH=""
CT_ARCH_CPU=""
CT_ARCH_TUNE=""
CT_TARGET_CFLAGS=""
CT_TARGET_LDFLAGS=""
CT_ARCH_FLOAT=""

#
# arm other options
#
CT_ARCH_ARM_MODE="arm"
CT_ARCH_ARM_MODE_ARM=y
# CT_ARCH_ARM_MODE_THUMB is not set
# CT_ARCH_ARM_INTERWORKING is not set
CT_ARCH_ARM_EABI_FORCE=y
CT_ARCH_ARM_EABI=y

#
# Toolchain options
#

#
# General toolchain options
#
CT_FORCE_SYSROOT=y
CT_USE_SYSROOT=y
CT_SYSROOT_NAME="sysroot"
CT_SYSROOT_DIR_PREFIX=""
CT_WANTS_STATIC_LINK=y
CT_WANTS_STATIC_LINK_CXX=y
# CT_STATIC_TOOLCHAIN is not set
CT_TOOLCHAIN_PKGVERSION=""
CT_TOOLCHAIN_BUGURL=""

#
# Tuple completion and aliasing
#
CT_TARGET_VENDOR=""
CT_TARGET_ALIAS_SED_EXPR=""
CT_TARGET_ALIAS="arm-one"

#
# Toolchain type
#
# CT_NATIVE is not set
CT_CROSS=y
# CT_CROSS_NATIVE is not set
# CT_CANADIAN is not set
CT_TOOLCHAIN_TYPE="cross"

#
# Build system
#
CT_BUILD=""
CT_BUILD_PREFIX=""
CT_BUILD_SUFFIX=""

#
# Misc options
#
# CT_TOOLCHAIN_ENABLE_NLS is not set

#
# Operating System
#
CT_KERNEL_SUPPORTS_SHARED_LIBS=y
CT_KERNEL="linux"
CT_KERNEL_VERSION="4.10.8"
# CT_KERNEL_bare_metal is not set
CT_KERNEL_linux=y
CT_KERNEL_bare_metal_AVAILABLE=y
CT_KERNEL_linux_AVAILABLE=y
# CT_KERNEL_LINUX_CUSTOM is not set
CT_KERNEL_V_4_10=y
# CT_KERNEL_V_4_9 is not set
# CT_KERNEL_V_4_4 is not set
# CT_KERNEL_V_4_1 is not set
# CT_KERNEL_V_3_16 is not set
# CT_KERNEL_V_3_12 is not set
# CT_KERNEL_V_3_10 is not set
# CT_KERNEL_V_3_4 is not set
# CT_KERNEL_V_3_2 is not set
CT_KERNEL_windows_AVAILABLE=y

#
# Common kernel options
#
CT_SHARED_LIBS=y

#
# linux other options
#
CT_KERNEL_LINUX_VERBOSITY_0=y
# CT_KERNEL_LINUX_VERBOSITY_1 is not set
# CT_KERNEL_LINUX_VERBOSITY_2 is not set
CT_KERNEL_LINUX_VERBOSE_LEVEL=0
# CT_KERNEL_LINUX_INSTALL_CHECK is not set

#
# Binary utilities
#
CT_ARCH_BINFMT_ELF=y
CT_BINUTILS="binutils"
CT_BINUTILS_binutils=y

#
# GNU binutils
#
# CT_BINUTILS_CUSTOM is not set
CT_BINUTILS_VERSION="2.28"
# CT_BINUTILS_SHOW_LINARO is not set
CT_BINUTILS_V_2_28=y
# CT_BINUTILS_V_2_27 is not set
# CT_BINUTILS_V_2_26 is not set
CT_BINUTILS_2_27_or_later=y
CT_BINUTILS_2_26_or_later=y
CT_BINUTILS_2_25_1_or_later=y
CT_BINUTILS_2_25_or_later=y
CT_BINUTILS_2_24_or_later=y
CT_BINUTILS_2_23_2_or_later=y
CT_BINUTILS_HAS_HASH_STYLE=y
CT_BINUTILS_HAS_GOLD=y
CT_BINUTILS_GOLD_SUPPORTS_ARCH=y
CT_BINUTILS_GOLD_SUPPORT=y
CT_BINUTILS_HAS_PLUGINS=y
CT_BINUTILS_HAS_PKGVERSION_BUGURL=y
CT_BINUTILS_FORCE_LD_BFD_DEFAULT=y
CT_BINUTILS_LINKER_LD=y
# CT_BINUTILS_LINKER_LD_GOLD is not set
# CT_BINUTILS_LINKER_GOLD_LD is not set
CT_BINUTILS_LINKERS_LIST="ld"
CT_BINUTILS_LINKER_DEFAULT="bfd"
# CT_BINUTILS_PLUGINS is not set
CT_BINUTILS_EXTRA_CONFIG_ARRAY=""
# CT_BINUTILS_FOR_TARGET is not set

#
# binutils other options
#

#
# C-library
#
CT_LIBC="glibc"
CT_LIBC_VERSION="2.25"
CT_LIBC_glibc=y
# CT_LIBC_musl is not set
# CT_LIBC_uClibc is not set
CT_LIBC_avr_libc_AVAILABLE=y
CT_LIBC_glibc_AVAILABLE=y
CT_THREADS="nptl"
# CT_LIBC_GLIBC_CUSTOM is not set
# CT_CC_GLIBC_SHOW_LINARO is not set
CT_LIBC_GLIBC_V_2_25=y
# CT_LIBC_GLIBC_V_2_24 is not set
# CT_LIBC_GLIBC_V_2_23 is not set
CT_LIBC_GLIBC_2_23_or_later=y
CT_LIBC_GLIBC_2_20_or_later=y
CT_LIBC_GLIBC_2_17_or_later=y
CT_LIBC_mingw_AVAILABLE=y
CT_LIBC_musl_AVAILABLE=y
CT_LIBC_newlib_AVAILABLE=y
CT_LIBC_none_AVAILABLE=y
CT_LIBC_uClibc_AVAILABLE=y
CT_LIBC_SUPPORT_THREADS_ANY=y
CT_LIBC_SUPPORT_THREADS_NATIVE=y

#
# Common C library options
#
CT_THREADS_NATIVE=y
# CT_CREATE_LDSO_CONF is not set
CT_LIBC_XLDD=y

#
# glibc other options
#
CT_LIBC_GLIBC_NEEDS_PORTS=y
CT_LIBC_glibc_family=y
CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY=""
CT_LIBC_GLIBC_CONFIGPARMS=""
CT_LIBC_GLIBC_EXTRA_CFLAGS=""
# CT_LIBC_ENABLE_FORTIFIED_BUILD is not set
# CT_LIBC_DISABLE_VERSIONING is not set
CT_LIBC_OLDEST_ABI=""
CT_LIBC_GLIBC_FORCE_UNWIND=y
CT_LIBC_ADDONS_LIST=""
# CT_LIBC_LOCALES is not set
# CT_LIBC_GLIBC_KERNEL_VERSION_NONE is not set
CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS=y
# CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN is not set
CT_LIBC_GLIBC_MIN_KERNEL="4.10.8"

#
# C compiler
#
CT_CC="gcc"
CT_CC_CORE_PASSES_NEEDED=y
CT_CC_CORE_PASS_1_NEEDED=y
CT_CC_CORE_PASS_2_NEEDED=y
CT_CC_gcc=y
# CT_CC_GCC_CUSTOM is not set
CT_CC_GCC_VERSION="6.3.0"
# CT_CC_GCC_SHOW_LINARO is not set
CT_CC_GCC_V_6_3_0=y
# CT_CC_GCC_V_5_4_0 is not set
# CT_CC_GCC_V_4_9_4 is not set
CT_CC_GCC_4_8_or_later=y
CT_CC_GCC_4_9_or_later=y
CT_CC_GCC_5_or_later=y
CT_CC_GCC_6=y
CT_CC_GCC_6_or_later=y
CT_CC_GCC_HAS_LIBMPX=y
CT_CC_GCC_ENABLE_CXX_FLAGS=""
CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY=""
CT_CC_GCC_EXTRA_CONFIG_ARRAY=""
CT_CC_GCC_STATIC_LIBSTDCXX=y
# CT_CC_GCC_SYSTEM_ZLIB is not set
CT_CC_GCC_CONFIG_TLS=m

#
# Optimisation features
#
CT_CC_GCC_USE_GRAPHITE=y
CT_CC_GCC_USE_LTO=y

#
# Settings for libraries running on target
#
CT_CC_GCC_ENABLE_TARGET_OPTSPACE=y
# CT_CC_GCC_LIBMUDFLAP is not set
# CT_CC_GCC_LIBGOMP is not set
# CT_CC_GCC_LIBSSP is not set
# CT_CC_GCC_LIBQUADMATH is not set
# CT_CC_GCC_LIBSANITIZER is not set

#
# Misc. obscure options.
#
CT_CC_CXA_ATEXIT=y
# CT_CC_GCC_DISABLE_PCH is not set
CT_CC_GCC_SJLJ_EXCEPTIONS=m
CT_CC_GCC_LDBL_128=m
# CT_CC_GCC_BUILD_ID is not set
CT_CC_GCC_LNK_HASH_STYLE_DEFAULT=y
# CT_CC_GCC_LNK_HASH_STYLE_SYSV is not set
# CT_CC_GCC_LNK_HASH_STYLE_GNU is not set
# CT_CC_GCC_LNK_HASH_STYLE_BOTH is not set
CT_CC_GCC_LNK_HASH_STYLE=""
CT_CC_GCC_DEC_FLOAT_AUTO=y
# CT_CC_GCC_DEC_FLOAT_BID is not set
# CT_CC_GCC_DEC_FLOAT_DPD is not set
# CT_CC_GCC_DEC_FLOATS_NO is not set
CT_CC_SUPPORT_CXX=y
CT_CC_SUPPORT_FORTRAN=y
CT_CC_SUPPORT_JAVA=y
CT_CC_SUPPORT_ADA=y
CT_CC_SUPPORT_OBJC=y
CT_CC_SUPPORT_OBJCXX=y
CT_CC_SUPPORT_GOLANG=y

#
# Additional supported languages:
#
CT_CC_LANG_CXX=y
# CT_CC_LANG_FORTRAN is not set
# CT_CC_LANG_JAVA is not set
# CT_CC_LANG_ADA is not set
# CT_CC_LANG_OBJC is not set
# CT_CC_LANG_OBJCXX is not set
# CT_CC_LANG_GOLANG is not set
CT_CC_LANG_OTHERS=""

#
# Debug facilities
#
# CT_DEBUG_duma is not set
# CT_DEBUG_gdb is not set
# CT_DEBUG_ltrace is not set
# CT_DEBUG_strace is not set

#
# Companion libraries
#
CT_COMPLIBS_NEEDED=y
CT_LIBICONV_NEEDED=y
CT_GETTEXT_NEEDED=y
CT_GMP_NEEDED=y
CT_MPFR_NEEDED=y
CT_ISL_NEEDED=y
CT_MPC_NEEDED=y
CT_NCURSES_NEEDED=y
CT_COMPLIBS=y
CT_LIBICONV=y
CT_GETTEXT=y
CT_GMP=y
CT_MPFR=y
CT_ISL=y
CT_MPC=y
CT_NCURSES=y
# CT_ZLIB is not set
CT_LIBICONV_V_1_15=y
# CT_LIBICONV_V_1_14 is not set
CT_LIBICONV_VERSION="1.15"
CT_GETTEXT_V_0_19_8_1=y
CT_GETTEXT_VERSION="0.19.8.1"
CT_GMP_V_6_1_2=y
CT_GMP_5_0_2_or_later=y
CT_GMP_VERSION="6.1.2"
CT_MPFR_V_3_1_5=y
CT_MPFR_VERSION="3.1.5"
CT_ISL_V_0_18=y
# CT_ISL_V_0_17_1 is not set
# CT_ISL_V_0_16_1 is not set
# CT_ISL_V_0_15 is not set
CT_ISL_V_0_16_or_later=y
CT_ISL_V_0_15_or_later=y
CT_ISL_V_0_14_or_later=y
CT_ISL_V_0_12_or_later=y
CT_ISL_VERSION="0.18"
CT_MPC_V_1_0_3=y
CT_MPC_VERSION="1.0.3"
CT_NCURSES_V_6_0=y
CT_NCURSES_VERSION="6.0"
# CT_NCURSES_NEW_ABI is not set
CT_NCURSES_HOST_CONFIG_ARGS=""
CT_NCURSES_HOST_DISABLE_DB=y
CT_NCURSES_HOST_FALLBACKS="linux,xterm,xterm-color,xterm-256color,vt100"
CT_NCURSES_TARGET_CONFIG_ARGS=""
# CT_NCURSES_TARGET_DISABLE_DB is not set
CT_NCURSES_TARGET_FALLBACKS=""

#
# Companion libraries common options
#
# CT_COMPLIBS_CHECK is not set

#
# Companion tools
#
# CT_COMP_TOOLS_FOR_HOST is not set
# CT_COMP_TOOLS_autoconf is not set
CT_COMP_TOOLS_automake=y
CT_AUTOMAKE_V_1_15=y
CT_AUTOMAKE_VERSION="1.15"
CT_COMP_TOOLS_libtool=y
CT_LIBTOOL_V_2_4_6=y
CT_LIBTOOL_VERSION="2.4.6"
# CT_COMP_TOOLS_m4 is not set
# CT_COMP_TOOLS_make is not set

#
# Test suite
#
# CT_TEST_SUITE_GCC is not set

For compiling anything on Android, you need a good toolchain to cross compile files. To just compile a kernel, you may try using the precompiled toolchain that comes with Android NDK (easy way out). However that one is not optimized for your machine. Neither does it have many prerequisites required if you want to compile other Linux binaries like dosfstools, Over the course of your Android development life, you’ll find yourself missing many linux utilities on Android and will not even find precompiled versions online. So you need to be able to build Linux utilites which can work on your phone too (cross compiling).

Thanks to Ahmet Ipkin (TheGanymedes on XDA), you now have a good guide to making a toolchain for Android. My post is based entirely on his original post, and I urge you to read his opening post completely to understand the details. If it helped you, please consider a paypal donation to him. I will be quoting his post on the actual guide to compile a toolchain, after I add some notes that I felt needed to be inserted to help newbies. 🙂

Prerequisites:

sudo apt-get install gawk bison flex texinfo automake libtool cvs curl aria2 patch lzma libncurses5-dev g++ openjdk-7-jre-headless build-essential libcloog-ppl-dev gettext

To debug issues, it is good to watch the build.log

 

tail -f /home/droidzone/x-tools/arm-msm-linux-gnueabi/build.log

 

Some Notes:

List of Toolchain Options: (Also includes Compatibility Table for different tool versions)

https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0Amlyrhh3vKt7dF9COXVCdTc4VzJ1eGtWSWZueFB4MWc&output=html

Sources for tarballs:

I found that ct-ng allowed you to select only very old versions of included requirements like gcc. So I downloaded them from:

http://ftp.gnu.org/gnu/gcc/  for gcc

http://ftp.gnu.org/gnu/binutils/

http://ftp.gnu.org/gnu/gmp/

http://ftp.gnu.org/gnu/glibc/

http://ftp.gnu.org/gnu/gmp/

http://ftp.gnu.org/gnu/mpfr/

Libelf from http://www.mr511.de/software/

 

Note that once you add them, you have to go to the actual source dir of ct-ng from where you execute ./configure, and execute the following cmd lines:

Adding Latest Versions of Included software

./scripts/addToolVersion.sh --binutils -s -c 2.20.1a
./scripts/addToolVersion.sh --gcc -s -c 4.6.1
./scripts/addToolVersion.sh --glibc -s -c 2.1.3

Note that after you do this, you have to run

./configure --prefix="path to dir where you will be building ct-ng"
make install
cd [to dir where you will make ct-ng"
./ct-ng menuconfig
./ct-ng build

Then, moving to the tarballs dir, wget the latest packages…

wget http://ftp.gnu.org/gnu/glibc/glibc-2.1.3.tar.gz
wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.1/gcc-4.6.1.tar.bz2
wget http://ftp.gnu.org/gnu/binutils/binutils-2.20.1a.tar.bz2
wget http://ftp.gnu.org/gnu/glibc/glibc-2.1.3.tar.gz
wget http://www.mr511.de/software/libelf-0.8.13.tar.gz

Errors I got while building:

Tip: The first time you build, it is good to check the following options:

Menuconfig>Paths and Misc options:

[x]Debug crosstool-ng
[x]Save intermediary steps

This will allow you to continue without redoing the steps which succeeded!

 

  • Error: Installing C library headers, Linux version is unavailable in installed headers files
Installing C library headers
[ERROR] Linux version is unavailable in installed headers files
[ERROR] Build failed in step 'Installing C library headers'
[ERROR] Error happened in '/home/droidzone/ct-ng/lib/ct-ng-1.9.3/scripts/build/libc/glibc.sh' in function 'do_libc_headers' (line unknown, sorry)
[ERROR] called from '/home/droidzone/ct-ng/lib/ct-ng-1.9.3/scripts/crosstool-NG.sh' at line # 597 in function 'main'

According to TheGanymedes, the solution is:

It shows that it couldn’t validate version of the linux kernel. Just open a terminal, go to the kernel directory and write “make ARCH=arm menuconfig”. After writing this, look through all options – you shall find one that allows you to pick your board model, cpu model etc. Pick board model as Qualcomm/msm and as cpu model pick qsd8x50. Sorry that I don’t know the exact names of the options.

After this, quit from that menu with esc-esc keys, and save config. The other options are unnecessary, just board and cpu type is all we need.

Now, write make ARCH=arm CROSS_COMPILE=arm-linux- . It’s going to fail, but will create the necessary version files and this was all we need. Now you can use crosstool-ng.

This is the location to find those options:

System type>ARM System type> Qualcomm MSM/QSD
Qualcomm MSM Soc tyoe: QSD8x50
  • Error: Errors with PPL/CLOOG. This was a tough one, since TheGanymedes forgot to mention that this would happen. ;). This is apparently (according to him) because ct-ng for some reason cannot build PPL/CLOOG. For this, you have to disable Graphite loop optimizations. Only then will ct-ng build
C compiler> Untick “Enable Graphite loop optimizations”
  • Error: Other errors with specific components. This may occur if your net connection is crappy and downloads files. In these cases, though the error message may be rather obscure, you can usually find out what step it failed at, by examining the file ~/x-tools/crosscompilername/.build/build.log. Note that .build is a hidden folder.
  • Error: [ERROR]  Build failed in step ‘Retrieving needed toolchain components’ tarballs’ called in step ‘(top-level)’
    • Now, this is a rather obscure issue which happened both on my local system and on the ssh at sourceforge. The reason was the compiler trying to create a symbolic link that already existed.
    • Solution: Go to ct-ng dir where you execute ./ct-ng build. Within it, do an rm -rf ./build/* ; rmdir ./build
  • Workarounds for getting crosstool itself to build under an ssh environment. The issue was that many dependencies of ct-ng, like autoconf, automake, lzma, texinfo (makeinfo) are not installed on the target system and we have no way of using aptitude. So the solution is to build all these utilities from source. A nice hint to do this to:
    • mkdir -p ~/bin
    • Add a path to your ~/.bashrc, and add the line: PATH=$PATH:~/bin:~/bin/bin
    • Now, configure each dependency while building with: ./configure –prefix=/absolutepath_to_$HOME/bin. Note that instead of building binaries in ~/bin, this builds them in ~/bin/bin. This is a good substitution when you dont have Write rights to /usr/bin (cant do a ‘sudo make install’).
    • Then, make
    • make install. Make install will install to $HOME/bin/bin 🙂

 

The following is a quote of TheGanymedes’s post at XDA. All credits to him.

NOTE
Before you start anything, don’t forget to install build-essentials package. Under ubuntu, the command necessary for it is:sudo apt-get install build-essential – I don’t know about other distros..

 

————————-

Well, as promised, now we should write the steps; right?… Now, before we begin, I should really warn that the process is really head spinning if you’re to do all by yourself; so take heed to the warnings I give you (I learned the hard way) 

Well, first thing is first, we need a Cross Compiler Toolchain, properly built that allows us to build applications, libraries etc. There is one toolchain that’s already given to you with Android Native Development Kit (called NDK) but that one is quite restricted because it’s built with support for Bionic (trimmed C library that is presented in Android), not Glibc or uGlibC. If you want to develop more native-like applications (especially linux programs) you need GlibC or uGlibC. You can try to build these libraries with that toolchain too, but don’t do that, because it’s going to fail as well. The reason is that some sort of Chicken-Egg problem is eminent in GlibC-GCC compilation 

Let’s put the steps to be followed first to build a nice toolchain. I assume you’re using Linux – because the tools are developed for this platform only. If you’re going to use them in Windows, you need Cygwin or such tools but I can’t supply help about that, for since I didn’t use them before at all. Google is your friend about this 

(Note, the packages I wrote at this list are available at GNU’s website www.gnu.org freely, open source)
1- We’re going to build “binutils” first. This package includes some important stuff like assembler, linker, archiver (for libraries) etc..
2- We’re going to build GCC’s prerequisites. These are GMP, MPRF and MPC packages.
3- We’re going to build a “bootstap” gcc (God, I hate that name. I like to call it “naked gcc” more  ). This GCC just converts source codes to pure assemblies: thus cannot generate linkages or such. We’re going to use it to build “actual” tools we’re going to use.
4- We’re going to extract Kernel source/headers – use Desire Kernel’s here. There is some copying, and such to be done tho.
5- We’re going to make GlibC headers installed, which will allow us to build more “complex” gcc, which can link applications with those libraries when the library binaries are given (so such thing is there yet, but we fool it  )
6- We’re going to build a very limited GlibC which will give us support for building more “complex” gcc.
7- We’re going to build GCC again. This is called “Pass 1 GCC” or “GCC Stage 1”. This GCC can link applications to libraries, with the information in Kernel headers and library headers (it’s why we give it the headers, so it can create applications suitable with the Kernel architecture).
8- We’re to build actual GlibC now. This glibC will be used for our compiled applications, statically or dynamically. You can, at the end of this step, copy the files to your devices and they would work, but picking files here is harder, so I’d recommend you to leave this alone for now 
9- We’re going to build “Pass 2 GCC” or “GCC Step 2” This is a full fledged GCC that can do anything we want 

Complex isn’t it? This is precisely why I recommend you to use Crostool-NG. The other tools (like Buildtools or Crosstool) (sadly) don’t create GlibC based toolchains, or use old versions of them, so using this one is recommended. This package automatically will download, setup and link your all toolchain without you worrying about something (believe me, this is what you need. I gave 8 days without this to create a working GCC and Crosstool-NG made another one to me in 50 minutes.  )

Well, however, Crosstool-NG won’t create “nice” applications (they’ll run allright, but they won’t be optimized) without some settings done, so, let’s go there. First, we need to install Crosstool-NG itself. To do that; go to http://crosstool-ng.org/website, download and extract it to some place. Even though the steps are written in Crosstool website, you don’t need all commands there (like setting PATH is unnecessary). The commands you should use is, after CD’ing to the Crosstool dir;

./configure –prefix=”</some/place>”
make
make install
cd “</some/place/bin>”
./ct-ng menuconfig

I used prefix as /home/ahmet/crosstool for instance. Note that this is not going to be where your toolchain is, this is where your “toolchain creator” is .
—- NECESSARY KERNEL HEADER CHANGES —-

OK now, before we start compiling; we need to make some folder moving, copying etc. in Kernel directory. This is needed, because tree structure changed a tad in 2.6 kernels and unless you compiled this kernel before, some directories won’t be in their correct place for our cross compiler. Switch to the directory which you extracted the kernel image. Now, from now on, I’m going to assume you’re an Qualcomm/MSM board (like Desire, Nexus One etc.) user; but if you’re not, change my descriptions accordingly:

1- Go to <kernel dir>/arch/arm/include folder. Copy “asm” directory and paste it into <kernel dir>/include directory.
2- Go to <kernel dir>/arch/arm/mach-msm/include folder. Copy “mach” directory and paste it to <kernel dir>/include/asm directory. It’s going to complain that there is another mach folder there and will ask if you want to merge/overwrite. Say yes to all questions.

Now our kernel headers folder is showing a Desire device. Note that if you’re not a Desire user, you should use your cpu folder instead of ARM and your board manufacturer in mach-xxxxx instead of mach-msm.

Note this kernel directory, we’re going to use it to configure crosstool..

— CONFIGURING CROSSTOOL —

After issuing the commands, the crosstool-ng will give you a configuration menu. Most of the setting here are unchanged, but the ones you should change are given below.

1- Paths and misc options
a) Try features marked as EXPERIMENTAL (this is needed to build a toolchain with the latest GlibC support) -> Enabled
b) Local Tarballs directory -> The folder address that you want downloaded stuff to be kept. You might use them again (like for compiling GlibC again for device, you will use them 
c) Save New Tarballs -> Enabled ( so that new downloaded files aren’t erased  )
d) Working Directory and Prefix directory -> Normally you don’t have to change them, but you can if you want to install your toolchain to some other location. CT_TARGET signifies your target name (like arm-msm-linux-gnueabi – arm is cpu model, msm is vendor (can be anything), linux is showing the binaries are for linux system (you can use android, but then you’ll get not GlibC but Bionic) and gnueabi shows you’re going to use open-source EABI structure for your executables. The other option is ELF but EABI is more flexible (because also supports ELF).
e) Strip all toolchain executables -> do it if you don’t want to debug GCC itself. this makes toolchain smaller of size, and a tad faster.

The other options can stay the way they are, or you can change them accordingly here. You can get help with ? key, and if you don’t understand anything, just leave them default – there are very complex things there that you don’t need to know if you’re not planning to be a expert on subject 

2- Target options
a) Target Architecture -> arm should be selected, cos Desire uses ARM. If you plan to make toolchain for, say, powerpc, pick that.
b) Endianness -> Should be little. ARM processors in Desire uses little endian system.
c) Architecture level -> “armv7-a” this is should be written. Desire uses ARMv7 based instructions and if you leave here empty, the applications will be built with armv5 support – they’re still going to run but not use advanced v7 features.
d) Use Specific FPU -> “neon” . Desire uses NEON structure for floating point arithmetic, and if you leave here empty, the applications will not use Desire’s FPU abilities (everything will be software based, which is slower)
e) Default instruction set mode -> arm . You can use thumb here for allegedly faster code but not every build system supports it. Leave it ARM.
f) Use EABI -> enabled. EABI is necessary for most flexible desing of binaries.

The other settings be as they were.

3- Toolchain options
a) Tuple’s vendor string -> You can leave here empty if you don’t want to; it’s not necessary to use a string here. I used “msm” but you can write anything. This string here is used in toolchain name as arm-xxxxx-linux-gnueabi, so make it short, I recommend 
b) Tuple’s alias -> make it something short like “arm-linux” This alias string is used to make calls to your toolchain easier. Instead of writing arm-msm-linux-gnueabi-gcc everytime, you can use arm-linux-gcc to compile your applications. Can write anything here (like toolchain if you want to use toolchain-gcc to compile your applications)

The other settings can stay as they are, for since default values are the best in our case. You can tweak them only if you know Desire cpu like the back of your hand 

4- Operating system
a) Target OS -> Use “linux” if you want the applications to run in Android and Linux; use “bare metal” if you’re to compile low level applications which won’t use linux headers. Default is linux.
b) Get Kernel headers from -> say “pre installed” because otherwise it’s going to download standard Linux headers from internet. We needed some changes, so this option is compulsory to be “pre installed”
c) Path to custom headers directory/tarball -> Path to your kernel source folder – which you made changes above.WARNING: I say specifically extracted, because standart tarball won’t work for us. We’re going to make some changes in kernel directories, which is non-standart (Instructions were above).
d) This is a tarball -> No . We’re going to use extracted folder.
e) Build shared libraries -> say “yes”; because we want dynamic linkage, not static one 
f) Check kernel headers -> say “no” otherwise some unnecessary check causes compilation to stop.

5- Binary utilities
a) Binutils version – pick the latest one, 2.20.1a. If you use older versions with newer GCC/GlibC, it’s not going to succeed.

Leave others as they are, they are not big deal..

6- C Compiler
a) GCC Version -> pick 4.6.1 for since it’s the latest and most bug free. Just stay away from 4.5 
b) Pick the languages you want support for. I’ve read online that Java is a tad troublesome in Android platform, for since Java in Android uses Dalvik, not Sun systems. You can try it at your second toolchain if you want  Definitely pick C++ tho
c) Link libstdc++ statically -> say yes; it really saves you from big configure scripts later  – apparently needed to avoid PPL problems as well 
d) Compile lidmudflap/libgomp/libssp -> say no. These libraries are not the most suitable libraries for ARM platform (at least at cross-compiler level. You can compile them later, if you want, with your cross-toolchain.)

You can leave others as default

7- C library
a) C library -> gLibC (recommended). You can use other libraries which are eGlibC (embedded Glibc, like Bionic) and uGlibC (micro-glibc) too, but GlibC is the most spanning solution above those. The libraries are bigger, but they support more.
b) glibC version -> Use 2.13 (experimental) it compiles just fine, and you get a new version of GlibC. Not the newest, but that’s ok 
c) Threading implementation -> nptl (recommended) . You can use linuxthreads too, but nptl is more advanced ( like giving support to Thread-Local-Storage and such)
d) Force Unwind Support -> Enabled . If you don’t use this option, for since we’re making this toolchain from scratch, it’s going to give you error during compiling that it couldn’t find necessary headers (we’re building them now, dumbass!)

Leave others default if you don’t know what they’re about

8- Companion Libraries
Well, go and pick the latest versions, even though when it says “Experimental”, otherwise your GCC compilation will give you error about these libraries being old.

After setting these settings, press ESC key twice till it goes way back and ask if you want to save configuration; say yes.

— STARTING COMPILATION —
Now to start compilation write
./ct-ng build.

This is going to take approx. 45 minutes, so go watch some episodes of Big Bang Theory or something. Normally, there should be no errors but if there is; most probably either you made a wrong configuration, or didn’t set your kernel folders well. Try again with other settings, google your problem etc.. 

After this process, you’re going to have a cross-compiler at your use at /home/<username>/x-tool/arm-<vendor>-linux-gnueabi/bin folder. Note that Crosstool-NG automatically makes this folder read only to make you prevent screwing your toolchain  You must edit your path variable to show “/home/<username>/x-tool/arm-<vendor>-linux-gnueabi/bin” folder as well for less headaches during compiling later 

Whilst compiling other application, most used configure options you’re going to use is “–host=arm-<vendor>-linux-gnueabi” and “–prefix=/some/folder/you/want/this/application/copied”. After compilation, you can send binaries to your phone from prefix folder.

More options about GCC and Configure is available at GCC and Autoconf man pages; check them as well 

Happy cross-compiling people 


You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.

Install qt3 for make xconfig

sudo apt-get install qt3-dev-tools[/code]


You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.

Compiling Cyanogenmod for the Desire (bravo)

These instructions have been copied from the Cyanogenmod Wiki, titled “How to compile CyanogenMod for Bravo (HTC Desire)”

This how-to was written for Ubuntu 10.04 & Ubuntu 10.10BravoCyanogenMod 7.x (Gingerbread), on 2 February 2010.

Contents

[hide]

Prepare the Build Environment

NOTE: You only need to do these steps the first time you build. If you previously prepared your build environment, skip to Copy proprietary files.

Install the ADB

Install the Android SDK.

Install the Build Packages

Install using the package manager of your choice:

For 32-bit & 64-bit systems:

git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool[/code]

For 64-bit only systems:

g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev gcc-4.3-multilib g++-4.3-multilib[/code]

NOTE:

gcc-4.3-multilib g++-4.3-multilib[/code]
is no longer available for Ubuntu 11.04 64-bit, but should still build without issue.

NOTE:
On Ubuntu 10.10, and variants, you need to enable the parter repository to install sun-java6-jdk:

add-apt-repository "deb http://archive.canonical.com/ maverick partner"[/code]

Of course in an ssh environment without root access you'd have to compile required packages by yourself!

Create the Directories

You will need to set up some directories in your build environment.

To create them:

mkdir -p ~/bin[/code]

mkdir -p ~/android/system[/code]

Install the Repository

Enter the following to download make executable the "repo" binary:

curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo[/code]

chmod a+x ~/bin/repo[/code]

NOTE:

You may need to reboot for these changes to take effect.

Now enter the following to initialize the repository:

cd ~/android/system/[/code]

repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
repo sync -j16[/code]

Copy proprietary files

NOTE:

This only needs done the first time you build. If you have already done these steps, you may skip to Download RomManager.

You will need to have a Bravo with a working copy of CyanogenMod install and ADB working on the computer. This script will copy the proprietary files from the device.

Connect the device to the computer and ensure that ADB is working properly.

cd ~/android/system/device/htc/bravo/[/code]

./extract-files.sh[/code]

NOTE: If some hardware isn't working, like camcorder or FM radio, you will need to find the updated prop blobs.

Download RomManager

NOTE:

This only needs to be done when an update to RomManager is released. If you are-up-to date, you may skip to Building CyanogenMod.

Download RomManager which is needed by the build:

~/android/system/vendor/cyanogen/get-rommanager[/code]

Building CyanogenMod

Check for updates

First, check for updates in the source:

cd ~/android/system/[/code]

repo sync[/code]

Configure Build & Compile

Now, the environment must be configured to build and the ROM compiled, from code, for the Bravo.

. build/envsetup.sh
brunch bravo[/code]

Install

  1. Copy your .zip file from ~/android/system/out/target/product/bravo/update.cm-XXXXX-signed.zip to the root of the SD card.
    Optional: Download Google Apps for CyanogenMod 7 and place it on the root of the SD card.
  2. Flash both of these .zip files from recovery.

 


You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.

Getting a patch for a commit-Github

The easiest way is to click on the url and navigate to the page showing the diff. Then, add “.diff” to end of the url. Then wget the url.

Eg:

URL of commit

https://github.com/bananacakes/bravo_2.6.35_gb-mr/commit/600a07aa5f728e81640456c7f7020fa0c888ab9b[/code]

Add .diff and use wget from shell:

wget https://github.com/bananacakes/bravo_2.6.35_gb-mr/commit/600a07aa5f728e81640456c7f7020fa0c888ab9b.diff[/code]


You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.

Compiling ICS- Official Android instructions – Part 2 – Building the System

Building the System

The basic sequence of build commands is as follows:

Initialize

Initialize the environment with the 

envsetup.sh[/code] script. Note that replacing "source" with a single dot saves a few characters, and the short form is more commonly used in documentation.

$ source build/envsetup.sh [/code][/code]
or

$ . build/envsetup.sh [/code][/code]

Choose a Target

Choose which target to build with 

lunch[/code]. The exact configuration can be passed as an argument, e.g.

$ lunch full-eng [/code][/code]
The example above refers to a complete build for the emulator, with all debugging enabled.

If run with no arguments 

lunch[/code] will prompt you to choose a target from the menu.

All build targets take the form BUILD-BUILDTYPE, where the BUILD is a codename referring to the particular feature combination:

Build name Device Notes
full emulator fully configured with all languages, apps, input methods
full_maguro maguro
full[/code] build running on Galaxy Nexus GSM/HSPA+ ("maguro")
full_panda panda
full[/code] build running on PandaBoard ("panda")

and the BUILDTYPE is one of the following:

Buildtype Use
user limited access; suited for production
userdebug like "user" but with root access and debuggability; preferred for debugging
eng development configuration with additional debugging tools

For more information about building for and running on actual hardware, see Building for devices

Build the Code

Build everything with 

make[/code]. GNU make can handle parallel tasks with a 

-jN[/code] argument, and it's common to use a number of tasks N that's between 1 and 2 times the number of hardware threads on the computer being used for the build. E.g. on a dual-E5520 machine (2 CPUs, 4 cores per CPU, 2 threads per core), the fastest builds are made with commands between 

make -j16[/code] and 

make -j32[/code].

$ make -j4 [/code][/code]

Run It!

You can either run your build on an emulator or flash it on a device. Please note that you have already selected your build target with 

lunch[/code], and it is unlikely at best to run on a different target than it was built for.

Flash a Device

To flash a device, you will need to use 

fastboot[/code], which should be included in your path after a successful build. Place the device in fastboot mode either manually by holding the appropriate key combination at boot, or from the shell with

$ adb reboot bootloader [/code][/code]
Once the device is in fastboot mode, run

$ fastboot flashall -w [/code][/code]
The 

-w[/code] option wipes the 

/data[/code] partition on the device; this is useful for your first time flashing a particular device, but is otherwise unnecessary.

For more information about building for and running on actual hardware, see Building for devices

Emulate an Android Device

The emulator is added to your path automatically by the build process. To run the emulator, type

$ emulator [/code][/code]

Using ccache

ccache is a compiler cache for C and C++ that can help make builds faster. In the root of the source tree, do the following:

$ export USE_CCACHE=1 $ export CCACHE_DIR=/<path_of_your_choice>/.ccache $ prebuilt/linux-x86/ccache/ccache -M 20G [/code][/code]
You can watch ccache being used by doing the following:

$ watch -n1 -d prebuilt/linux-x86/ccache/ccache -s [/code][/code]
On OSX, you should replace 

linux-x86[/code] with 

darwin-x86[/code].

Troubleshooting Common Build Errors

Wrong Java Version

If you are attempting to build froyo or earlier with Java 1.6, or gingerbread or later with Java 1.5, 

make[/code] will abort with a message such as

************************************************************ You are attempting to build with the incorrect version of java. Your version is: WRONG_VERSION. The correct version is: RIGHT_VERSION. Please follow the machine setup instructions at http://source.android.com/download ************************************************************ [/code][/code]
This may be caused by

  • failing to install the correct JDK as specified on the Initializing page. Building Android requires Sun JDK 5 or 6 depending on which release you are building.
  • another JDK that you previously installed appearing in your path. You can remove the offending JDK from your path with:
    $ export PATH=${PATH//path/to/jdk/dir:/} [/code][/code]
    

Python Version 3

Repo is built on particular functionality from Python 2.x and is unfortunately incompatible with Python 3. In order to use repo, please install Python 2.x:

$ apt-get install python [/code][/code]

Gmake Version 3.82

There is a bug in 

make[/code] version 3.82 on Mac OS that prevents building Android.

TODO: what the error looks like with GNU make 3.82 on older builds that don't explicitly detect it.

Follow the instructions on the Initializing page for reverting GNU make from 3.82 to 3.81.

Case Insensitive Filesystem

If you are building on an HFS filesystem on Mac OS X, you may encounter an error such as

************************************************************ You are building on a case-insensitive filesystem. Please move your source tree to a case-sensitive filesystem. ************************************************************ [/code][/code]
Please follow the instructions on the Initializing page for creating a case-sensitive disk image.

No USB Permission

On most Linux systems, unprivileged users cannot access USB ports by default. If you see a permission denied error, follow the instructions on the Initializingpage for configuring USB access.

If adb was already running and cannot connect to the device after getting those rules set up, it can be killed with 

adb kill-server[/code]. That will cause adb to restart with the new configuration.


You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.

Compiling ICS- Official Android instructions – Part 1 – Downloading source

Steps:

  1. Downloading the Source Tree

 

Downloading the Source Tree

Installing Repo

Repo is a tool that makes it easier to work with Git in the context of Android. For more information about Repo, see Version Control.

To install, initialize, and configure Repo, follow these steps:

  • Make sure you have a bin/ directory in your home directory, and that it is included in your path:
    $ mkdir ~/bin $ PATH=~/bin:$PATH [/code][/code]
    
  • Download the Repo script and ensure it is executable:
    $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo [/code][/code]
    
  • The SHA-1 checksum for repo is e1fd3bef059d152edf4d0522590725d317bc637f

Initializing a Repo client

After installing Repo, set up your client to access the android source repository:

  • Create an empty directory to hold your working files. If you're using MacOS, this has to be on a case-sensitive filesystem. Give it any name you like:
    $ mkdir WORKING_DIRECTORY $ cd WORKING_DIRECTORY [/code][/code]
    
  • Run 
    repo init[/code] to bring down the latest version of Repo with all its most recent bug fixes. You must specify a URL for the manifest, which specifies where the various repositories included in the Android source will be placed within your working directory.

    $ repo init -u https://android.googlesource.com/platform/manifest [/code][/code]
    To check out a branch other than "master", specify it with -b:

    $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 [/code][/code]
    
  • When prompted, please configure Repo with your real name and email address. To use the Gerrit code-review tool, you will need an email address that is connected with a registered Google account. Make sure this is a live address at which you can receive messages. The name that you provide here will show up in attributions for your code submissions.

A successful initialization will end with a message stating that Repo is initialized in your working directory. Your client directory should now contain a 

.repo[/code]directory where files such as the manifest will be kept.

Getting the files

To pull down files to your working directory from the repositories as specified in the default manifest, run

$ repo sync [/code][/code]
The Android source files will be located in your working directory under their project names. The initial sync operation will take an hour or more to complete. For more about 

repo sync[/code] and other Repo commands, see Version Control.

Verifying Git Tags

Load the following public key into your GnuPG key database. The key is used to sign annotated tags that represent releases.

$ gpg --import [/code][/code]
Copy and paste the key(s) below, then enter EOF (Ctrl-D) to end the input and process the keys.

-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.2.2 (GNU/Linux) mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7 8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq /HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5 jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4 MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9 b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI 2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+ OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM= =Wi5D -----END PGP PUBLIC KEY BLOCK----- [/code][/code]
After importing the keys, you can verify any tag with

$ git tag -v TAG_NAME [/code][/code]

Next: Build the code

You now have a complete local copy of the Android codebase. Continue on to building....


You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.

Compiling AOSP Cyanogenmod for the Desire, from ssh-sourceforge

After setting up ssh client access,

follow the instructions for bravo:

Ref: http://wiki.cyanogenmod.com/wiki/HTC_Desire_(GSM):_Compile_CyanogenMod_(Linux)

Prepare the Build Environment

NOTE: You only need to do these steps the first time you build. If you previously prepared your build environment, skip to Copy proprietary files.

Install the ADB

Install the Android SDK.

Install the Build Packages

Install using the package manager of your choice:

For 32-bit & 64-bit systems:

git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool[/code]

For 64-bit only systems:

g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev gcc-4.3-multilib g++-4.3-multilib[/code]

NOTE: 

gcc-4.3-multilib g++-4.3-multilib[/code] is no longer available for Ubuntu 11.04 64-bit, but should still build without issue.
NOTE: On Ubuntu 10.10, and variants, you need to enable the parter repository to install sun-java6-jdk:

add-apt-repository "deb http://archive.canonical.com/ maverick partner"[/code]

Create the Directories

You will need to set up some directories in your build environment.

To create them:

mkdir -p ~/bin[/code]
mkdir -p ~/android/system[/code]

Install the Repository

Enter the following to download make executable the "repo" binary:

curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo[/code]
chmod a+x ~/bin/repo[/code]

NOTE: You may need to reboot for these changes to take effect.

Now enter the following to initialize the repository:

cd ~/android/system/[/code]
repo init -u git://github.com/CyanogenMod/android.git -b gingerbread[/code]
repo sync -j16[/code]

I'm modifying this code. git:// is not supported on most proxies and ssh via sourceforge, so if you do a default repo init, it will fail. Instead, you have to replace the git:// with http://

Repo actually makes a hidden folder names .repo under ~/android/system/ the first time you run it. Thereafter it runs those scripts. You can do a grep/sed to replace all instances of git:// with http://

Copy proprietary files

NOTE: This only needs done the first time you build. If you have already done these steps, you may skip to Download RomManager.

You will need to have a Bravo with a working copy of CyanogenMod install and ADB working on the computer. This script will copy the proprietary files from the device.

Connect the device to the computer and ensure that ADB is working properly.

cd ~/android/system/device/htc/bravo/[/code]
./extract-files.sh[/code]

NOTE: If some hardware isn't working, like camcorder or FM radio, you will need to find the updated prop blobs.

Download RomManager

NOTE: This only needs to be done when an update to RomManager is released. If you are-up-to date, you may skip to Building CyanogenMod.

Download RomManager which is needed by the build:

~/android/system/vendor/cyanogen/get-rommanager[/code]

Building CyanogenMod

Check for updates

First, check for updates in the source:

cd ~/android/system/[/code]
repo sync[/code]

Configure Build & Compile

Now, the environment must be configured to build and the ROM compiled, from code, for the Bravo.

. build/envsetup.sh && brunch bravo[/code]
Here, I hit a snag. It started giving errors saying java wasnt installed. So I got a self installing .bin, and installed it.

Install

  1. Copy your .zip file from ~/android/system/out/target/product/bravo/update.cm-XXXXX-signed.zip to the root of the SD card.
    Optional: Download Google Apps for CyanogenMod 7 and place it on the root of the SD card.
  2. Flash both of these .zip files from recovery.

You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.

Sourceforge – Cloning a local git to the remote git (Multiple git)

My local git had origin as github

I wanted to clone the github git to sf. Apparently it didnt allow me to. So I had to get my local repo up. The remote origin was reserved for github.

So I setup a remote first:

On Local machine

mkdir sourceforge/bashscripts

git init[/code]

git config user.name "sourceforgeusername"[/code]

git config user.email "sourceforgeusername@users.sourceforge.net"[/code]

git remote add origin http:[email protected]/p/supernovarom/bashscripts
[/code]

cp /dzbin/* ./[/code]

Since this is brand new, there needs to be a first commit of everything.[/code]

To list everything being tracked:[/code]

git status[/code]

Add everything in working dir:[/code]

git add .[/code]

Now, first commit:[/code]

git commit -m "Initial commit."[/code]

[/code]

git push origin master
[/code]


[/code]


[/code]

Now, for directly working on three different gits at different locations (github was already active. I just had to add sourceforge git)[/code]

Create a git from sourceforge admin menu, keep the name for ref.[/code]

First nav to path where existing git is found, on local machine[/code]

cd ~/android/kitchen/Android-Kitchen/
[/code]

git status
[/code]

Try:[/code]

[/code]

remote add origin ssh:[email protected]/p/projectunixname/kitchen[/code]

fatal: remote origin already exists.[/code]

Yup, we need a different handle. Let it be sf.[/code]

git remote add sf ssh:[email protected]/p/projectunixname/kitchen[/code]

Try:[/code]

git push origin sf[/code]

[/code]

Error:[/code]

You just tried to push to origin (on github), the remote you just added on sf![/code]

git push where_to_push source_to_push[/code]

That's because I need to merge both streams and push all my changes[/code]

git config branch.master.merge refs/heads/master[/code]

git push sf master[/code]

Done! And it immediately appears in the git![/code]

[/code]

git config branch.master.remote sf[/code]


[/code]


You are reading this post on Joel G Mathew’s tech blog. Joel's personal blog is the Eyrie, hosted here.