mirror of
				https://github.com/Wind4/vlmcsd.git
				synced 2025-11-04 06:42:16 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Compilation and pre-built binaries FAQ
 | 
						|
======================================
 | 
						|
 | 
						|
What is the best pre-built binary for my system or device?
 | 
						|
----------------------------------------------------------
 | 
						|
 | 
						|
None. The best binary is compiled by yourself using a toolchain that is
 | 
						|
optimized for your system or device in every respect.
 | 
						|
 | 
						|
 | 
						|
How do I compile my own binary?
 | 
						|
-------------------------------
 | 
						|
 | 
						|
On a full blown desktop system this is relativly easy. If not already done so,
 | 
						|
install a C compiler (e.g. gcc or clang) through your packet manager, e.g.
 | 
						|
"sudo apt-get install gcc" (Debian/Ubuntu) or "sudo yum install gcc"
 | 
						|
(RedHat/Fedora).
 | 
						|
 | 
						|
Then cd to your vlmcsd directory and type "make". vlmcs and vlmcsd will
 | 
						|
be built right away for your local system.
 | 
						|
 | 
						|
If you installed gcc and it is not the default compiler for your OS or
 | 
						|
distribution, you may need to type "make CC=gcc" to explicitly select a
 | 
						|
specific C compiller.
 | 
						|
 | 
						|
 | 
						|
How do I compile a binary for my embedded device?
 | 
						|
-------------------------------------------------
 | 
						|
 | 
						|
What you need is cross-compiling toolchain for your device. It consists of a
 | 
						|
C compiler, libraries, header files and some tools (called binutils). The
 | 
						|
toolchain must match the device in processor architecture, endianess, ABI,
 | 
						|
library and header files version, library configuration, ...
 | 
						|
 | 
						|
If the endianess or ABI differs or the version of some library between
 | 
						|
toolchain and device differs too much, the resulting binary does not run
 | 
						|
on your device.
 | 
						|
 | 
						|
Once you have a proper toolchain (probably found on the Internet for download),
 | 
						|
unpack it to any directory and type
 | 
						|
 | 
						|
     "make CC=/path/to/toolchain/bindir/c-compiler-binary"
 | 
						|
 | 
						|
Building vlmcsd for using a cross-compiling toolchain is as easy as building
 | 
						|
vlmcsd for your local machine. The only question is, whether this you have
 | 
						|
a toolchain that actually matches your device.
 | 
						|
 | 
						|
Whenever you change any parameter of the make command line, you must "clean"
 | 
						|
the source directory from intermediate files and output from previous runs
 | 
						|
of make. You can do so by typeing "make clean" or force make to behave as if
 | 
						|
the directory were clean by adding -B to the command line, e.g.
 | 
						|
 | 
						|
     "make -B CC=/path/to/toolchain/bindir/c-compiler-binary"
 | 
						|
 | 
						|
 | 
						|
I have downloaded several promising toolchains for my device but they all
 | 
						|
don't work. Can I create my own toolchain?
 | 
						|
-------------------------------------------------------------------------
 | 
						|
 | 
						|
You can use tools like buildroot or OpenWRT. Both are able to create toolchains
 | 
						|
for many embedded devices. But this is out of the scope of this document.
 | 
						|
If you are unable to walk through thousands of configuration options and make
 | 
						|
the right choice, you may probably want to try the pre-built binaries.
 | 
						|
 | 
						|
 | 
						|
How to choose a pre-built binary?
 | 
						|
---------------------------------
 | 
						|
 | 
						|
The directory structure for the binaries is
 | 
						|
 | 
						|
binaries
 | 
						|
+
 | 
						|
+--<operating system>
 | 
						|
   +
 | 
						|
   +--<cpu arch>
 | 
						|
      +
 | 
						|
      +--<endianess> (omitted if CPU or OS does not allow multi-endianess)
 | 
						|
         +
 | 
						|
         +--<C-library>
 | 
						|
 | 
						|
<C-library> can also be "static". That means no special library is required.
 | 
						|
Static binaries are much bigger and need more RAM than dynamic binaries but
 | 
						|
are more likely to run on your system. Use a static binary only, if none of
 | 
						|
the dynmic binaries run.
 | 
						|
 | 
						|
Don't get confused when a binary is named after an OS or a specific device,
 | 
						|
e.g. the name contains "openwrt", "tomato" or "Fritzbox". This does not mean
 | 
						|
that the binary will run only on that OS or on that device. It is a hint only
 | 
						|
where I got or built the toolchain from.
 | 
						|
 | 
						|
 | 
						|
How to determine the endianess of my system?
 | 
						|
--------------------------------------------
 | 
						|
 | 
						|
- All Intel CPUs (x86, x32, x64) are little-endian only
 | 
						|
- Windows is little-endian only even if the CPU support big-endian
 | 
						|
- big-endian ARM is extremely uncommon. You can safely assume little-endian
 | 
						|
- little-endian PowerPC virtually does not exist since only newer POWER7
 | 
						|
  and POWER8 CPUs support it. Always assume big-endian.
 | 
						|
- For MIPS both little-endian and big-endian are common. Most Broadcomm and
 | 
						|
  TI chips run little-endian. Most Atheros and Ikanos CPUs run big-endian.
 | 
						|
 | 
						|
Try typing
 | 
						|
     echo -n I | od -o | awk 'FNR==1{ print substr($2,6,1)}'
 | 
						|
 | 
						|
This returns 1 for little-endian systems and 0 for big-endian systems. However
 | 
						|
some devices do not have the od command and thus this method won't work.
 | 
						|
 | 
						|
 | 
						|
 |