aboutsummaryrefslogtreecommitdiffstats
path: root/source/unix-toolchain.rst
diff options
context:
space:
mode:
Diffstat (limited to 'source/unix-toolchain.rst')
-rw-r--r--source/unix-toolchain.rst375
1 files changed, 0 insertions, 375 deletions
diff --git a/source/unix-toolchain.rst b/source/unix-toolchain.rst
deleted file mode 100644
index 769b8ec..0000000
--- a/source/unix-toolchain.rst
+++ /dev/null
@@ -1,375 +0,0 @@
-.. highlight:: sh
-
-.. _unix-toolchain:
-
-===========================
- Unix Toolchain Quickstart
-===========================
-
-This is a tutorial for using a standard Unix toolchain (``make``,
-``gcc``, etc.) with Maple. It's intended for C and C++ programmers
-who want to use :ref:`libmaple` directly. If you're just beginning, we
-recommend installing :ref:`Maple IDE <maple-ide-install>` instead.
-
-.. contents:: Contents
- :local:
-
-Requirements
-------------
-
-We assume you've had success with the :ref:`Maple IDE <ide>` (this is
-important on Windows, as this document doesn't cover :ref:`driver
-installation <maple-ide-install-windows-drivers>`).
-
-At a minimum, you need:
-
-* Maple board
-* Mini-B USB cable
-* root (or Administrator) access to your computer.
-
-On Linux and OS X, you need to know how to use `bash
-<http://www.gnu.org/software/bash/>`_, and how to edit your .bashrc.
-Some experience using `GCC <http://gcc.gnu.org/>`_ and `make
-<http://www.gnu.org/software/make/>`_ is recommended, but is not
-required.
-
-.. _toolchain-linux-setup:
-.. _toolchain-osx-setup:
-.. _toolchain-win-setup:
-.. _toolchain-setup:
-
-Setup
------
-
-You first need to set up your computer by installing and configuring
-various things. Don't fret! We've got detailed instructions, just for
-you.
-
-* :ref:`Linux <unix-toolchain-linux-setup>`
-* :ref:`OS X <unix-toolchain-osx-setup>`
-* :ref:`Windows <unix-toolchain-win-setup>`
-
-Come back when you're ready. We'll wait.
-
-.. _toolchain-test:
-
-Test compilation
-----------------
-
-Test that you've installed all the compilation tools correctly by
-running the following commands in your shell.
-
-Windows users:
-
- - Don't type the ``$``'s, just the parts that come after.
- - First get to libmaple by opening a Git Shell, then running ``cd libmaple``.
- - **Always type** ``cs-make`` **instead of** ``make``.
-
-Linux and OS X users:
-
- - Run these from the top-level libmaple directory.
-
-::
-
- $ cp main.cpp.example main.cpp
- $ make clean
- $ make
-
-If all goes well, you should see a bunch of output, then something
-like this::
-
- Final Size:
- text data bss dec hex filename
- 13164 1704 552 15420 3c3c build/maple.elf
-
-Hurray! You've just compiled your first program for Maple.
-
-**Important: if you're not using Maple (Maple Mini, etc.), make sure
-to read the following note before moving on**.
-
-You can now move on to :ref:`uploading a program <toolchain-upload>`,
-or take a quick detour to learn :ref:`more about the build output
-<toolchain-build-info>`.
-
-.. _toolchain-setting-board:
-
-.. note:: This tutorial assumes you're using a Maple. If you're
- compiling for another board, you'll need to set a ``BOARD``
- environment variable appropriately.
-
- To get a list of values for ``BOARD``, run ::
-
- $ make list-boards
-
- For example, to compile for Maple Mini:
-
- * On OS X or Linux, run::
-
- $ export BOARD=maple_mini
- $ make
-
- * On Windows, set a new environment variable named ``BOARD`` to
- value ``maple_mini``, then open a new Git Shell, and run ``cd
- libmaple`` followed by ``cs-make`` as explained above.
-
- You can check that this worked by making sure that the final
- program file is named ``build/maple_mini.elf`` instead of
- ``maple.elf``::
-
- Final Size:
- text data bss dec hex filename
- 16848 2696 704 20248 4f18 build/maple_mini.elf
-
- Other notes for OS X and Linux:
-
- - You can also use the following, but you'll need to write the
- ``BOARD=maple_mini`` part every time you call ``make`` (for
- ``make install``, etc.)::
-
- $ BOARD=maple_mini make
-
- - To make the board setting permanent, add this line to your
- .bashrc::
-
- export BOARD=maple_mini
-
-.. warning:: You must start from a clean build after each time you
- change ``BOARD`` (advanced users: or ``MEMORY_TARGET``). For
- example, if you compile a program for Maple, then you want to
- compile another program for Maple Mini, you must run ``$ make
- clean`` **before** you compile the second program. If you do not,
- you will experience strange errors.
-
-.. _toolchain-build-info:
-
-Notes about the ``libmaple`` build
-----------------------------------
-
-These are just some miscellaneous notes that are good to know. Feel
-free to skip reading this section.
-
-- The ``dec`` field at the end of the build output under ``Final
- Size:`` gives the total program size in bytes. The ``text``,
- ``data``, and ``bss`` fields respectively break down the size of the
- program into `code <http://en.wikipedia.org/wiki/Code_segment>`_,
- `initialized data <http://en.wikipedia.org/wiki/Data_segment>`_, and
- `zero-valued data <http://en.wikipedia.org/wiki/.bss>`_.
-
-- The long list of object files above the ``Final Size`` shows similar
- information on a per-file basis. You can use it to help slim down
- programs that use too much space.
-
-- ``build/$BOARD.elf`` is the final build result (where ``BOARD`` is
- ``maple``, ``maple_mini``, etc. :ref:`depending on your build
- <toolchain-setting-board>`).
-
-- There are other files under ``build`` you may be interested in, like
- disassembly and map files.
-
-- If you want quicker build times, you should check out our blog post,
- `Making libmaple compile faster
- <http://leaflabs.com/2012/08/2549/>`_.
-
-.. _toolchain-upload:
-
-Upload a program
-----------------
-
-Let's blow away the little example program and upload the interactive
-test session to your Maple. This will let you interact with the Maple
-over a :ref:`USB serial port <usb>`.
-
-* Linux: you need udev rules set up :ref:`as described in the setup
- doc <toolchain-udev>`.
-
-* Windows: you need to :ref:`install the Maple's device drivers
- <maple-ide-install-windows-drivers>`.
-
-* OS X: everything Just Works for you. Aren't you special?
-
-Plug in your Maple using a Mini-B USB cable, then run ::
-
- # Window users: as usual, use cs-make instead of make.
-
- $ cp examples/test-session.cpp main.cpp
- $ make clean
- $ make
- $ make install
-
-A number of things can go wrong at this stage. Simple debugging steps
-include using :ref:`perpetual bootloader mode
-<troubleshooting-perpetual-bootloader>`, restarting the Maple a couple
-times, ``make clean``, etc. If nothing works, the `forum`_ is your
-friend.
-
-.. _toolchain-serialusb:
-
-Communicate over USB-Serial
----------------------------
-
-Now let's try out the interactive test session. You need to connect
-to the board's serial port device file.
-
-* Linux: this looks like :file:`/dev/ttyACM*`.
-* OS X: it looks like :file:`/dev/tty.usbmodem*`.
-* Windows: it will be :file:`COMx`, where ``x`` is some number.
-
-Try using one of these to find out which it is::
-
- # Linux
- $ ls /dev/ttyACM*
-
- # OS X
- $ ls /dev/tty.usbmodem*
-
- # Windows, works from libmaple directory
- $ python support/scripts/win-list-com-ports.py
-
-To open up a session on Linux or OS X, run ::
-
- $ screen /dev/ttyXXX
-
-(On Windows, you will need to use a separate program, such as Maple
-IDE's serial console or `PuTTY
-<http://www.chiark.greenend.org.uk/~sgtatham/putty/>`_.)
-
-``screen`` will present you an empty terminal. Your board is waiting
-for you to send it a command. Type ``h`` to print a list of commands;
-type any command's letter to run it.
-
-.. highlight:: none
-
-Example output (for Maple)::
-
- > u
- Hello World!
- > b
- Board information
- =================
- * Clock speed (MHz): 72
- * BOARD_LED_PIN: 13
- * BOARD_BUTTON_PIN: 38
- * GPIO information (BOARD_NR_GPIO_PINS = 44):
- ADC pins (15): 0, 1, 2, 3, 10, 11, 12, 15, 16, 17, 18, 19, 20, 27, 28
- PWM pins (15): 0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 14, 24, 27, 28
- Used pins (7): 13, 38, 39, 40, 41, 42, 43``
-
-.. highlight:: sh
-
-To exit the screen session, type :kbd:`C-a k` (control-a k) on Linux,
-or :kbd:`C-a C-\\` (Control-a, followed by Control-backslash) on OS X,
-and type ``y`` when prompted if you're sure.
-
-.. note::
-
- Using ``screen`` sometimes messes up your terminal session on OS X.
- If your shell starts acting funny after you exit ``screen``, you
- should be able to fix it with ::
-
- $ reset && clear
-
- If that doesn't work, just close the Terminal window and open up a
- new one.
-
-.. _toolchain-projects:
-
-Start your own project
-----------------------
-
-So everything worked, and you want to start your own project? Great!
-There are two ways to go about it.
-
-If your project is small, all you have to do is replace
-:file:`~/libmaple/main.cpp` with your own code, and you're free to use
-``make`` and ``make install`` in the same way you did when you first
-:ref:`uploaded a program <toolchain-upload>`.
-
-If you have a more complicated project, with its own Makefile and
-multiple source files, or if you're using an IDE that creates its own
-Makefile, you'll probably want to load libmaple from an archive (a
-build-time library, not a DLL).
-
-To create an archive, use the ``library`` Makefile target::
-
- $ cd ~/libmaple
- $ make library
-
-This will produce a build-time library in the file
-:file:`~/libmaple/build/libmaple.a`. To use it, make sure that you
-link against that library, and that the libmaple sources are in your
-include path.
-
-There is also a page on `starting a project with the Unix toolchain
-<http://wiki.leaflabs.com/index.php?title=Starting_A_Project_%28No_IDE%29>`_
-on the `LeafLabs wiki <http://wiki.leaflabs.com>`_ that you may find
-useful.
-
-Get updates
------------
-
-We update libmaple fairly frequently with bugfixes and other
-improvements. In order get access to these in your local copy of the
-repository, you should periodically update it with::
-
- $ cd ~/libmaple
- $ git pull
-
-We do our best to keep the master libmaple branch on GitHub free from
-broken or half-finished code, so don't be too scared running the
-latest and greatest. If you do, please report any bugs or regressions!
-
-We keep releases of libmaple and the Maple IDE in lockstep, so any IDE
-updates will have corresponding library updates. Our `blog
-<http://leaflabs.com/blog/>`_ is the place to watch for major
-releases; an `RSS feed <http://leaflabs.com/blog/feed/>`_ is
-available.
-
-You can sign up for a free `GitHub <https://github.com/plans>`_
-account and `watch libmaple
-<https://github.com/leaflabs/libmaple/watchers>`_ to receive
-notifications about bleeding-edge development.
-
-.. _toolchain-openocd:
-
-(Optional) Upload/Debug with JTAG/SWD
--------------------------------------
-
-Advanced users will wish to use a JTAG (or SWD) dongle for uploading
-and debugging their programs. A big advantage to this approach is that
-it lets you use `GDB <http://www.gnu.org/software/gdb/>`_ to
-single-step through your code, inspect variables, etc.
-
-You can build your projects for JTAG or SWD upload with the ``jtag``
-Makefile target. That is, instead of compiling with ``make``, compile
-with ::
-
- # (This is equivalent to $ MEMORY_TARGET=jtag make)
- $ make jtag
-
-Then use your favorite JTAG/SWD dongle and driver software to upload
-the resulting program. An `ELF
-<http://en.wikipedia.org/wiki/Executable_and_Linkable_Format>`_
-suitable for upload is in :file:`build/$BOARD.elf`; the raw binary you
-can copy directly to address 0x0 is :file:`build/$BOARD.bin`.
-
-.. warning:: Uploading code built with the ``jtag`` target will
- overwrite the :ref:`bootloader <bootloader>`. This is a good thing
- -- since you're using another upload method, this lets you use the
- Flash and RAM the bootloader ordinarily reserves for itself. You
- can always :ref:`reflash the bootloader <bootloader-reflashing>`
- later.
-
-While LeafLabs doesn't officially support any particular way of using
-JTAG with Maple, there is a `JTAG How-To
-<http://wiki.leaflabs.com/index.php?title=Maple_JTAG_How_To>`_ on the
-`LeafLabs wiki <http://wiki.leaflabs.com>`_ that you may find useful.
-
-.. _toolchain-exuberantly:
-
-Go forth exuberantly!
----------------------
-
-Let us know what you come up with! Mention `@leaflabs on Twitter
-<http://twitter.com/#!/leaflabs>`_, post in the `forum`_, join the the
-#leafblowers IRC channel on `freenode
-<http://freenode.net/irc_servers.shtml>`_, whatever. We love projects!