Difference between revisions of "C and assembly development introduction"

From Hackspire
Jump to navigation Jump to search
(Setting up a development environment)
(Add Mac and Win stubs, clean up a bit)
Line 2: Line 2:
  
 
==Setting up a development environment==
 
==Setting up a development environment==
===Option 1 : Building and installing the toolchain and the SDK===
+
===On Linux distros===
*'''Get the latest [http://www.unsads.com/projects/nsptools/downloader/download/release/5 Ndless SDK build]''' for C, C++ and assembly development on TI-Nspire.
+
====Option 1: Build and install the SDK yourself====
:You may also prefer to use the freshest in-development version of the Ndless SDK from [https://github.com/ndless-nspire/Ndless GitHub]. Just git-clone it:
+
* '''Make sure your system has the following dependencies''': git, GCC (with c++ support), binutils, GMP (libgmp-dev), MPFR (libmpfr-dev), MPC (libmpc-dev), boost-program-options, wget. Install them with your system's package manager if not.
 +
 
 +
====Option 2: Get the Ndless SDK Docker image====
 +
'''Warning: This option is very outdated and it is strongly recommended to use Option 1 and build the SDK yourself!'''
 +
 
 +
[https://www.docker.com/ Docker] is a platform to build and share applications through lightweight containers. The Ndless SDK Docker image packs the Ndless SDK and all its dependencies. This is the easiest and quickest method to get a fully functional development environment.
 +
 
 +
To install the Ndless SDK Docker image [https://registry.hub.docker.com/u/ndless/ndless-sdk/ follow the instructions on hub.docker.com]. You can skip the "Building and installing" part.
 +
 
 +
===On Mac OS X===
 +
* TODO
 +
* '''Make sure your system has the following dependencies''': git, GCC (with c++ support), binutils, GMP, MPFR, MPC, boost-program-options, wget. Install them with your system's package manager if not.
 +
 
 +
===On Windows===
 +
* Install Cygwin and the following dependencies''': git, GCC (with c++ support), binutils, GMP (libgmp-dev), MPFR (libmpfr-dev), MPC (libmpc-dev), boost-program-options, wget. Install them with your system's package manager if not.
 +
* Pray that nothing is broken again.
 +
 
 +
==Building and installing the toolchain and the SDK==
 +
*'''Get the latest code from [https://github.com/ndless-nspire/Ndless GitHub]'''
 
  git clone git://github.com/ndless-nspire/Ndless.git
 
  git clone git://github.com/ndless-nspire/Ndless.git
* '''Make sure your system has the following dependencies''': GCC (with c++ support), binutils, GMP (libgmp-dev), MPFR (libmpfr-dev), MPC (libmpc-dev), boost-program-options, wget. Install them with your system's package manager if not.
+
 
 
* '''Run the SDK's ''build_toolchain.sh'' '''script that will download and build a complete ARM toolchain compatible with Ndless, and install it <(edit the <tt>PREFIX</tt> variable at the beginning of the script to change the install location). You don't need to be root for this.
 
* '''Run the SDK's ''build_toolchain.sh'' '''script that will download and build a complete ARM toolchain compatible with Ndless, and install it <(edit the <tt>PREFIX</tt> variable at the beginning of the script to change the install location). You don't need to be root for this.
 
  cd ndless-sdk/toolchain/
 
  cd ndless-sdk/toolchain/
Line 12: Line 30:
  
 
Running the script again will continue from the last successful step (not redownloading everything for instance). At the end of a successful build you should see <tt>Done!</tt>. Alternatively you can verify the build using <tt>echo $?</tt>. <tt>0</tt> indicates success.
 
Running the script again will continue from the last successful step (not redownloading everything for instance). At the end of a successful build you should see <tt>Done!</tt>. Alternatively you can verify the build using <tt>echo $?</tt>. <tt>0</tt> indicates success.
* Now '''add the following folders to your PATH environment variable'''. <tt>~/.bash_profile</tt> should be a good place for this, just add something like this to it:
+
* Now '''add the following folders to your PATH environment variable'''. On linux, <tt>~/.bash_profile</tt> should be a good place for this, just add something like this to it:
 
  export PATH="[path_to_ndless]/ndless-sdk/toolchain/install/bin:[path_to_ndless]/ndless-sdk/bin:${PATH}"
 
  export PATH="[path_to_ndless]/ndless-sdk/toolchain/install/bin:[path_to_ndless]/ndless-sdk/bin:${PATH}"
* '''Build the SDK''', only if you are using the GitHub's clone version of the SDK:
+
* '''Build Ndless and the SDK''', in the top level of the repository, run:
 
  make
 
  make
 
===Option 2 : Get the Ndless SDK Docker image===
 
'''Warning: This option is very outdated and it is strongly recommended to use Option 1 and build the SDK yourself!'''
 
 
[https://www.docker.com/ Docker] is a platform to build and share applications through lightweight containers. The Ndless SDK Docker image packs the Ndless SDK and all its dependencies. This is the easiest and quickest method to get a fully functional development environment.
 
 
To install the Ndless SDK Docker image [https://registry.hub.docker.com/u/ndless/ndless-sdk/ follow the instructions on hub.docker.com].
 
  
 
===Verifying the installation===
 
===Verifying the installation===
Line 31: Line 42:
 
  compilation terminated.
 
  compilation terminated.
  
==5-minute tutorial==
+
==2-minute tutorial==
 
As a convention for the next chapters, lines starting with <tt>$</tt> are commands you should type in a console. Other lines are the command's output.
 
As a convention for the next chapters, lines starting with <tt>$</tt> are commands you should type in a console. Other lines are the command's output.
 
===Your first build===
 
===Your first build===
Line 57: Line 68:
 
*Type in a console:
 
*Type in a console:
 
  cd "<your directory path>"
 
  cd "<your directory path>"
  nspire-tools new <program>
+
  nspire-tools new <name>
:where <program> is your program name. This will create a Makefile to build ''<program>.tns''
+
:where <name> is your program name. This will create a Makefile to build ''<program>.tns''
 
*Create a new .c file and edit your program
 
*Create a new .c file and edit your program
*Run the <tt>make</tt> command to build it
+
*Run <tt>make</tt> to build it

Revision as of 18:21, 2 August 2015

This tutorial describes how to set up an environment and use the Ndless SDK to write native Ndless-compatible programs for the TI-Nspire.

Setting up a development environment

On Linux distros

Option 1: Build and install the SDK yourself

  • Make sure your system has the following dependencies: git, GCC (with c++ support), binutils, GMP (libgmp-dev), MPFR (libmpfr-dev), MPC (libmpc-dev), boost-program-options, wget. Install them with your system's package manager if not.

Option 2: Get the Ndless SDK Docker image

Warning: This option is very outdated and it is strongly recommended to use Option 1 and build the SDK yourself!

Docker is a platform to build and share applications through lightweight containers. The Ndless SDK Docker image packs the Ndless SDK and all its dependencies. This is the easiest and quickest method to get a fully functional development environment.

To install the Ndless SDK Docker image follow the instructions on hub.docker.com. You can skip the "Building and installing" part.

On Mac OS X

  • TODO
  • Make sure your system has the following dependencies: git, GCC (with c++ support), binutils, GMP, MPFR, MPC, boost-program-options, wget. Install them with your system's package manager if not.

On Windows

  • Install Cygwin and the following dependencies: git, GCC (with c++ support), binutils, GMP (libgmp-dev), MPFR (libmpfr-dev), MPC (libmpc-dev), boost-program-options, wget. Install them with your system's package manager if not.
  • Pray that nothing is broken again.

Building and installing the toolchain and the SDK

  • Get the latest code from GitHub
git clone git://github.com/ndless-nspire/Ndless.git
  • Run the SDK's build_toolchain.sh script that will download and build a complete ARM toolchain compatible with Ndless, and install it <(edit the PREFIX variable at the beginning of the script to change the install location). You don't need to be root for this.
cd ndless-sdk/toolchain/
./build_toolchain.sh

Running the script again will continue from the last successful step (not redownloading everything for instance). At the end of a successful build you should see Done!. Alternatively you can verify the build using echo $?. 0 indicates success.

  • Now add the following folders to your PATH environment variable. On linux, ~/.bash_profile should be a good place for this, just add something like this to it:
export PATH="[path_to_ndless]/ndless-sdk/toolchain/install/bin:[path_to_ndless]/ndless-sdk/bin:${PATH}"
  • Build Ndless and the SDK, in the top level of the repository, run:
make

Verifying the installation

  • Open a console, and run:
$ nspire-gcc

If everything has been set up correctly you should see something similar to:

arm-none-eabi-gcc: fatal error: no input files
compilation terminated.

2-minute tutorial

As a convention for the next chapters, lines starting with $ are commands you should type in a console. Other lines are the command's output.

Your first build

Ndless comes with sample programs in the samples/ directory of the Ndless SDK. We will try to build the C Hello World. Change the current directory of the console:

$ cd "<my_ndless_sdk_copy>/ndless-sdk/samples/helloworld-sdl"

Ndless programs are built with GNU Make, which is run with the command make. So let's make the program:

$ make
nspire-gcc -Wall -W -marm -Os -c hello-sdl.c
mkdir -p .
nspire-ld hello-sdl.o -o ./helloworld-sdl.elf 
genzehn --input ./helloworld-sdl.elf --output ./helloworld-sdl.tns --name "helloworld-sdl"
make-prg ./helloworld-sdl.tns ./helloworld-sdl.prg.tns

nspire-gcc is Ndless's wrapper for the GNU C Compiler GCC, which compiles C and assembly source files to object files (here hello.o).

nspire-ld is the wrapper for GCC, which redirects gcc with the option "-fuse-ld=gold" to use another wrapper "arm-none-eabi-ld.gold" as linker. "arm-none-eabi-ld.gold" adds some necessary libraries to the final program.

genzehn converts the executable created by "nspire-ld" to a format, which ndless supports.

make-prg adds a simple loader on top so the executable works on older versions of ndless.

Your first program

If you want to create a program from scratch:

  • Create a new directory for the program
  • Type in a console:
cd "<your directory path>"
nspire-tools new <name>
where <name> is your program name. This will create a Makefile to build <program>.tns
  • Create a new .c file and edit your program
  • Run make to build it