Friday, January 11, 2013

Compile OpenCore-amr for iOS Projects


I really had a hard time compiling OpenCore-amr for my iphone application meant for ios 6.0.

Special thanks to all those people / websites who guided me and i was able to finish up the task.

Follow the steps and may be it could help you :

Step - 1 : I downloaded from http://kakola.googlecode.com/files/opencore-amr-0.1.2.tar.gz

Step - 2 : Place this folder on your macbook
               (i placed in a folder named Compile-Opencore)

Step - 3 : Open the Terminal

Step - 4 : Change the directory to move to the downloaded opencore-amr-0.1.2 directory
               $ cd /Users/Swati/Compile-Opencore/opencore-amr-0.1.2 


Step - 5 : Execute configure
              $ /Users/Swati/Compile-Opencore/opencore-amr
             -0.1.2/configure

This command will start Checking like : 
             checking for a BSD-compatible install... /usr/bin/install -c
             checking for gcc... gcc

             checking if libtool supports shared libraries... yes
             checking if gcc supports -c -o file.o... yes
             checking if gcc supports -c -o file.o... (cached) yes
etc...

Step - 6 : Call make
               $ make

Step - 7 : Call make install
               $ sudo make install 
               Password:

Step - 8 : Remember to check path of xcode
               $ xcode-select -print-path
               /Applications/Xcode.app/Contents/Developer

Step - 9 : Execute shell script
               $ /Users/Swati/Compile-Opencore/opencore-amr
              -0.1.2/build_osx.sh 

Step - 10 : configure library for armv7s
                $ <path_idz_configure.sh> <architecture> <ios_version>
                   <path_configure_opencore-amr-0.1.2>
                $ /Users/swatisrivastava/Documents/Swati/Compile
                  -Opencore/opencore-amr-0.1.2/idz_configure.sh armv7s 
                  6.0 /Users/Swati/Compile-Opencore/opencore-amr
                 -0.1.2/configure

Above step may result in errors like : 
configure: error: source directory already configured; run "make distclean" there first
make: *** No rule to make target `clean'.  Stop.
make: *** No targets specified and no makefile found.  Stop.
make: *** No rule to make target `install'.  Stop.

Step - 11 : Do cleaning if error occurs in Step - 9
                 $ make distclean

Step - 12 : Again configure for armv7s
                 $ /Users/Swati/Compile-Opencore/opencore-amr
                    -0.1.2/idz_configure.sh  armv7s 6.0 /Users/Swati/
                    Compile-Opencore/opencore-amr-0.1.2/configure

Step - 13 : Configure for armv7 also
                 $ /Users/Swati/Compile-Opencore/opencore-amr-0.1.2/
                     idz_configure.sh  armv7 6.0 /Users/Swati/Compile-Opencore
                     /opencore-amr-0.1.2/configure

Step - 14 : Configure for i386 also
                 $ /Users/Swati/Compile-Opencore/opencore-amr-0.1.2/
                     idz_configure.sh i386  6.0 /Users/Swati/Compile-Opencore/
                     opencore-amr-0.1.2/configure

Step - 15 : You can view the libraries here:

Inside your opencore-amr-0.1.2 folder : you can see 6 new folders :
build-iPhoneOS-armv7 and install-iPhoneOS-armv7
build-iPhoneOS-armv7s and install-iPhoneOS-armv7s
build-iPhoneSimulator-i386 and install-iPhoneSimulator-i386

goto install-iPhoneOs-armv7 folder >> lib folder >> here u can see library files specific to armv7 architecture namely : 
   a) libopencore-amrnb.a 
   b) libopencore-amrwb.a






Similarly u can get libraries of each architecture.

Step - 16 :  Command to create a single "Universal" .a library that contains the features of all 3 libraries
                  $ lipo -create 
                  <path_of_armv7_libopencore-amrnb.a>
                  <path_of_armv7s_libopencore-amrnb.a> 
                  <path_of_i386_libopencore-amrnb.a>
                  -output <path_universal_libopencore-amrnb.a>

                                                   &

                  $ lipo -create 
                  <path_of_armv7_libopencore-amrwb.a>
                  <path_of_armv7s_libopencore-amrwb.a> 
                  <path_of_i386_libopencore-amrwb.a>
                  -output <path_universal_libopencore-amrwb.a>

Hope it helps.
Enjoy compiling...
:)