]> git.sesse.net Git - vlc/commitdiff
* first draft of the draft
authorMarc Ariberti <marcari@videolan.org>
Tue, 18 Mar 2003 19:37:23 +0000 (19:37 +0000)
committerMarc Ariberti <marcari@videolan.org>
Tue, 18 Mar 2003 19:37:23 +0000 (19:37 +0000)
doc/arm-crosscompile-howto.sgml

index e1dd6480a71b228f046f963a9668244d8642b362..8c2b8f89b00fd912e4c37612d1a593b266339fdf 100644 (file)
@@ -1,7 +1,7 @@
 <!doctype linuxdoc system>
 <linuxdoc><article>
 <titlepag>
-  <title>Cross compiling VLC for ARM based platforms</title>
+  <title>Cross compiling VLC for ARM-Linux based platforms</title>
   <author>Marc Ariberti <tt><htmlurl url="mailto:marcari@videolan.org" name="<marcari@videolan.org>"></tt></author>
   <date>v0.0.1, 13 march 2003</date>
   <abstract>
 <sect>
   <heading>Introduction</heading>
   <sect1>
-    <heading>Which platforms ar targeted ?</heading>
+    <heading>Which platforms are targeted ?</heading>
+    <p>
+      I will describe here how to compile vlc for an ARM based
+      PDA running linux. It includes for example :
+      <itemize>
+      <item>Compaq - iPaq (H36xx, H38xx,...), using
+        <itemize>
+          <item>Familiar linux
+          <item>Opie
+        </itemize>
+      </item>
+      <item>YOPY/Linupy</item>
+      <item>Zaurus</item>
+      </itemize>
+    </p>
   </sect1> 
   <sect1>
     <heading>Requirements for cross-compilation</heading>
   </sect1>
   <sect1>
-    <heading>Why not compiling directly on the target platform ?</heading>
+    <heading>Why cross-compiling ?</heading>
+    <p>
+      It is of course possible to compile directly on the targeted platform.
+      But there are a lot of great advantages to cross-compile :
+      <itemize>
+      <item>The most important one is probably the speed, because a
+        desktop computer is most of the time faster than a PDA for
+        compilation.</item>
+      <item>Another big problem is that a complete compilation toolchain
+        does take a great amount of disk space. And this space is usually
+        very limited on embedded systems.</item>
+      <item>And there also may not be enough memory to compile big files.</item>
+      </itemize>
+    </p>
   </sect1>
 </sect>
 
 <sect>
   <heading>Building the toolchain</heading>
   <sect1>
-    <heading>The cross compiler (gcc)</heading>
+    <heading>Prerequisite</heading>
+    <sect2>
+      <heading></heading>
+      <p>
+        During this section, we will use the following variables :
+        <itemize>
+          <item><bf>${PREFIX}</bf> will designate where you want to install 
+            your toolchain (eg: <tt>/usr/local/arm/2.95.3</tt>).</item>
+          <item><bf>${SRCDIR}</bf> will designate the directory where 
+            sources will be uncompressed 
+            (eg: <tt>/usr/src</tt> or <tt>/home/foobar/cross-arm</tt>).</item>
+        </itemize>
+      </p>
+    </sect2>
+    <sect2>
+      <heading>Files needed</heading>
+      <p>Download the following files and put them in the <bf>${SRCDIR}</bf> :
+        <itemize>
+          <item><tt>binutils-2.11.2.tar.gz</tt></item>
+          <item><tt>linux-2.4.19.tar.bz2</tt></item>
+          <item><tt>patch-2.4.19-rmk4.bz2</tt></item>
+        </itemize>
+      </p>
+    </sect2>
   </sect1>
   <sect1>
     <heading>Binutils</heading>
+    <p>Compiling binutils is pretty simple :
+    <tscreen><verb>
+% tar xzf binutils-2.11.2.tar.gz
+% cd binutils-2.11.2
+% ./configure --target=arm-linux --prefix=/usr/local/arm/2.95.3
+% make
+% su 
+# make install
+    </verb></tscreen>
+    </p>
+  </sect1>
+  <sect1>
+    <heading>Preparing linux kernel</heading>
+    <p>
+    <tscreen><verb>
+        % tar xzf linux-2.4.19.tar.bz2
+        % bunzip2 patch-2.4.19-rmk4.bz2
+        % cd linux-2.4.19
+        % patch -p1 &lt; ../patch-2.4.19-rmk4.bz2
+        % make clean ARCH=arm CROSS_COMPILE=arm-linux-
+        % make ARCH=arm h3600_config
+        !!! don't forget to save the configuration even if no changes are made
+        % make ARCH=arm menuconfig
+        % make symlinks ARCH=arm CROSS_COMPILE=arm-linux-
+        % mkdir -p /usr/local/arm/2.95.3/arm-linux/include
+        % cp -Rf include/asm include/asm-arm include/linux /usr/local/arm/2.95.3/arm-linux/include
+        % cd /usr/local/arm/2.95.3/arm-linux
+        % ln -s include sys-linux
+
+    </verb></tscreen>
+    </p>
+  </sect1>
+  <sect1>
+    <heading>Basic cross compiler (gcc)</heading>
+    <p>
+    tar xvzf gcc-2.95.3.tar.gz
+    bunzip2 gcc-2.95.3.diff.bz2
+    bunzip2 gcc-2.95.3.diffbis.bz2
+    patch -p1 -d gcc-2.95.3 &lt; gcc-2.95.3.diff
+    patch -p1 -d gcc-2.95.3 &lt; gcc-2.95.3.diffbis
+    cd gcc-2.95.3
+    ./configure --target=arm-linux --disable-threads --enable-languages=c --prefix=/usr/local/arm/2.95.3 --with-headers=linux-2.4.19/include
+    make
+    make install
+    </p>
+
   </sect1>
   <sect1>
     <heading>Compiling glibc</heading>
+    <p>
+    Depending on your target, you may choose another glibc version (eg: 2.1.3 for linupy 1.4)
+    tar xvzf glibc-2.2.5.tar.gz
+    cd glibc-2.2.5
+    tar xvzf ../glibc-linuxthreads-2.2.5.tar.gz
+    CC=arm-linux-gcc ./configure arm-linux --target=arm-linux --prefix=/usr/local/arm/2.95.3/arm-linux --enable-add-ons
+    
+    The following step is quite long !
+    
+    CC=arm-linux-gcc make
+
+    If you have problems compiling glibc due to pread/pwrite, edit sysdeps/unix/sysv/linux/kernel-features.h
+    and turn  __ASSUME_PREAD_SYSCALL and __ASSUME_PWRITE_SYSCALL from 1 to 0.
+    
+    CC=arm-linux-gcc make install
+    </p>
+  </sect1>
+  <sect1>
+    <heading>Full cross compiler (gcc)</heading>
+    rm -Rf gcc-2.95.3
+    tar xvzf gcc-2.95.3.tar.gz
+    patch -p1 -d gcc-2.95.3 &lt; gcc-2.95.3.diff
+    patch -p1 -d gcc-2.95.3 &lt; gcc-2.95.3.diff2
+    cd gcc-2.95.3
+    ./configure --target=arm-linux --prefix=/usr/local/arm/2.95.3
+    make
+    make install
   </sect1>
   <sect1>
     <heading>Misc</heading>
+    Add  /usr/local/arm/2.95.3/bin to your PATH. Add the following line (depends on your shell)
+    to your shell's configuration file :
+    export PATH=/usr/local/arm/2.95.3/bin:$PATH
+
+    cp libgcc_s.so.1 /usr/local/arm/2.95.3-new/arm-linux/lib                         
+    
+    Install theses packages on your compiler box in /usr/local/arm/2.95.3/arm-linux
+     xlibs_4.1-5_arm.ipk
+     xlibs-dev_4.1.0-16_arm.ipk
+     zlib1g_1.1.4-3_arm.ipk
+     zlib1g-dev_1.1.3-fam1_arm.ipk
   </sect1>
 </sect>
 
+
+
+
+
 <sect>
   <heading>Cross compiling libraries needed by vlc</heading>
+  Download <tt>ipaq-config.site</tt> to ${SOURCES}.
+  When downloading source tarballs copy them to your ${SOURCES} directory.
+  Each section is supposed to begin with <tt>cd ${SOURCES}</tt>.
   <sect1>
     <heading>SDL</heading>
+    !!!! beurk but did not found a better working method ¡¡¡¡
+    tar xvzf SDL-1.2.5.tar.gz
+    cd SDL-1.2.5
+./configure --enable-release --target=arm-linux --host=arm-linux \
+    --disable-esd \
+    --prefix=/usr/local/arm/2.95.3/arm-linux/usr \
+    --x-includes=/usr/local/arm/2.95.3/arm-linux/usr/X11R6/include \
+    --x-libraries=/usr/local/arm/2.95.3/arm-linux/usr/X11R6/lib \
+    --disable-video-opengl
+export PATH=/usr/local/arm/2.95.3/arm-linux/bin:$PATH
+
+  
+make && make install
+    
   </sect1>
   <sect1>
     <heading>Glib/GTK+</heading>
+    tar xvzf glib-1.2.10.tar.gz
+    cd glib-1.2.10
+    CONFIG_SITE=../ipaq-config.site ./configure --prefix=/usr/local/arm/2.95.3/arm-linux/usr
+    make
+    make install
+    cd ..
+    tar xvzf gtk+-1.2.10.tar.gz
+    cd gtk+-1.2.10
+    CONFIG_SITE=../ipaq-config.site ./configure --prefix=/usr/local/arm/2.95.3/arm-linux/usr --with-glib=../glib-1.2.10
+    make 
+    make install
   </sect1>
   <sect1>
     <heading>ffmpeg</heading>
+    tar xvzf ffmpeg.tar.gz
+    cd ffmpeg
+    ./configure --cpu=armv4l --cc=arm-linux-gcc --disable-mmx --prefix=/usr/local/arm/2.95.3/arm-linux/usr --enable-shared
+    cd libavcodec
+    make
+
+    Vlc does not require that you install ffmpeg.
   </sect1>
   <sect1>
     <heading>mad</heading>
+    tar xvzf mad-0.14.2b.tar.gz
+    cd mad-0.14.2b
+./configure --enable-release --target=arm-linux --host=arm-linux \
+    --disable-esd \
+    --prefix=/usr/local/arm/2.95.3/arm-linux/usr \
+    --x-includes=/usr/local/arm/2.95.3/arm-linux/usr/X11R6/include \
+    --x-libraries=/usr/local/arm/2.95.3/arm-linux/usr/X11R6/lib \
+    --disable-video-opengl
+export PATH=/usr/local/arm/2.95.3/arm-linux/bin:$PATH
+    make
+    
+  </sect1>
+  <sect1>
+    <heading>gpe</heading>
   </sect1>
+  %%%%%%%%%%%%%%%%%%%%%%%
+  First get Tremor and ogg sources from xiph.org (through CVS for example).       
+Then for each them, do :                                                        
+% ./configure  --enable-release --prefix=/usr/local/arm/2.95.3/arm-linux        
+% export PATH=/usr/local/arm/2.95.3/arm-linux/bin:$PATH                         
+% make                                                                          
+% su                                                                            
+# make install                                                                  
+                                                                                
+I know it is not clean, but --host or --target switches does not work.          
+The PATH I include, contains all the gcc utils for cross compilation            
+without the arm-linux- prefix.                                                  
+                                                                                
+If you want to link them statically : edit the libvorbisidec.a and remove       
+from the archive bitwise.o and framing.o (conflict with libogg.a)               
+                                                                                
+For flac, get the source tarball (from the videolan website for example)        
+% ./configure --enable-release --host=arm-linux --target=arm-linux              
+--prefix=/usr/local/arm/2.95.3/arm-linux                                        
+% make                                                                          
+-> will fail (xmms plugin), but not a problem, continue installation by hand    
+% su                                                                            
+# cp -Rf include/FLAC /usr/local/arm/2.95.3/arm-linux/include                   
+# cd src/libFLAC                                                                
+# make install                                                                  
+                                                                                
+When compiling vlc, add to the ./configure :                                    
+        --enable-ogg                                                            
+        --enable-tremor                                                         
+        --enable-flac                                                           
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   <sect1>
     <heading>tremor</heading>
   </sect1>
   </sect1>
   <sect1>
     <heading>libdvbpsi</heading>
+    tar xvzf libdvbpsi-0.1.2.tar.gz
+    cd libdvbpsi-0.1.2
+    ./bootstrap
+    ./configure --target=arm-linux --host=arm-linux
+    make
+    
   </sect1>
   <sect1>
     <heading>a52</heading>
+    tar xvzf a52dec-0.7.4.tar.gz
+    cd a52dec-0.7.4
+    ./configure --enable-release --host=arm-linux --target=arm-linux --prefix=/usr/local/arm/2.95.3/arm-linux
+    make && make install
+
   </sect1>
 </sect>
 
 <sect>
   <heading>Cross compiling vlc itself</heading>
+  have a look à rules.* in the ipkg directory.
 </sect>
 
 </article></linuxdoc>