You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ad...@apache.org on 2016/06/15 22:04:32 UTC

[49/51] [partial] incubator-mynewt-site git commit: Fixed broken Quick Start link and added OpenOCD option for Arduino Primo debugging

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/README.Windows
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/README.Windows b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/README.Windows
new file mode 100755
index 0000000..6c616f3
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/README.Windows
@@ -0,0 +1,60 @@
+Building OpenOCD for Windows
+----------------------------
+
+You can build OpenOCD for Windows natively with either MinGW-w64/MSYS
+or Cygwin (plain MinGW might work with --disable-werror but is not
+recommended as it doesn't provide enough C99 compatibility).
+Alternatively, one can cross-compile it using MinGW-w64 on a *nix
+host. See README for the generic instructions.
+
+Also, the MSYS2 project provides both ready-made binaries and an easy
+way to self-compile from their software repository out of the box.
+
+Native MinGW-w64/MSYS compilation
+-----------------------------
+
+As MSYS doesn't come with pkg-config pre-installed, you need to add it
+manually. The easiest way to do that is to download pkg-config-lite
+from:
+
+  http://sourceforge.net/projects/pkgconfiglite/
+
+Then simply unzip the archive to the root directory of your MinGW-w64
+installation.
+
+USB adapters
+------------
+
+For the adapters that use a HID-based protocol, e.g. CMSIS-DAP, you do
+not need to perform any additional configuration.
+
+For all the others you usually need to have WinUSB.sys (or
+libusbK.sys) driver installed. Some vendor software (e.g. for
+ST-LINKv2) does it on its own. For the other cases the easiest way to
+assign WinUSB to a device is to use the latest Zadig installer:
+
+  http://zadig.akeo.ie
+
+When using a composite USB device, it's often necessary to assign
+WinUSB.sys to the composite parent instead of the specific
+interface. To do that one needs to activate an advanced option in the
+Zadig installer.
+
+For the old drivers that use libusb-0.1 API you might need to link
+against libusb-win32 headers and install the corresponding driver with
+Zadig.
+
+If you need to use the same adapter with other applications that may
+require another driver, a solution for Windows Vista and above is to
+activate the IgnoreHWSerNum registry setting for the USB device.
+
+That setting forces Windows to associate the driver per port instead of
+per serial number, the same behaviour as when the device does not contain
+a serial number. So different drivers can be installed for the adapter on
+different ports and you just need to plug the adapter into the correct
+port depending on which application to use.
+
+For more information, see:
+
+  http://msdn.microsoft.com/en-us/library/windows/hardware/jj649944(v=vs.85).aspx
+  http://www.ftdichip.com/Support/Knowledgebase/index.html?ignorehardwareserialnumber.htm

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/TODO
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/TODO b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/TODO
new file mode 100755
index 0000000..8aac157
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/TODO
@@ -0,0 +1,380 @@
+// This file is part of the Doxygen Developer Manual
+/** @page tasks Pending and Open Tasks
+
+This page lists pending and open tasks being considered or worked upon
+by the OpenOCD community.
+
+@section thelist The List
+
+Most items are open for the taking, but please post to the mailing list
+before spending much time working on anything lists here.  The community
+may have evolved an idea since it was added here.
+
+Feel free to send patches to add or clarify items on this list, too.
+
+@section thelisttcl TCL
+
+This section provides possible things to improve with OpenOCD's TCL support.
+
+- Fix problem with incorrect line numbers reported for a syntax
+  error in a reset init event.
+
+- organize the TCL configurations:
+  - provide more directory structure for boards/targets?
+  - factor configurations into layers (encapsulation and re-use)
+
+- Fix handling of variables between multiple command line "-c" and "-f"
+  parameters.  Currently variables assigned through one such parameter
+  command/script are unset before the next one is invoked.
+
+- Isolate all TCL command support:
+  - Pure C CLI implementations using --disable-builtin-tcl.
+    - Allow developers to build new dongles using OpenOCD's JTAG core.
+    - At first, provide only low-level JTAG support; target layer and
+      above rely heavily on scripting event mechanisms.
+  - Allow full TCL support? add --with-tcl=/path/to/installed/tcl
+  - Move TCL support out of foo.[ch] and into foo_tcl.[ch] (other ideas?)
+    - See src/jtag/core.c and src/jtag/tcl.c for an example.
+    - allow some of these TCL command modules to be dynamically loadable?
+
+@section thelistjtag JTAG
+
+This section list issues that need to be resolved in the JTAG layer.
+
+@subsection thelistjtagcore JTAG Core
+
+The following tasks have been suggested for cleaning up the JTAG layer:
+
+- use tap_set_state everywhere to allow logging TAP state transitions
+- Encapsulate cmd_queue_cur_state and related variable handling.
+- add slick 32 bit versions of jtag_add_xxx_scan() that avoids
+buf_set_u32() calls and other evidence of poor impedance match between
+API and calling code. New API should cut down # of lines in calling
+code by 100's and make things clearer. Also potentially be supported
+directly in minidriver API for better embedded host performance.
+
+The following tasks have been suggested for adding new core JTAG support:
+
+- Improve autodetection of TAPs by supporting tcl escape procedures that
+  can configure discovered TAPs based on IDCODE value ... they could:
+    - Remove guessing for irlen
+    - Allow non-default irmask/ircapture values
+- SPI/UART emulation:
+  - (ab)use bit-banging JTAG interfaces to emulate SPI/UART
+  - allow SPI to program flash, MCUs, etc.
+
+@subsection thelistjtaginterfaces JTAG Interfaces
+
+There are some known bugs to fix in JTAG adapter drivers:
+
+- For JTAG_STATEMOVE to TAP_RESET, all drivers must ignore the current
+  recorded state.  The tap_get_state() call won't necessarily return
+  the correct value, especially at server startup.  Fix is easy:  in
+  that case, always issue five clocks with TMS high.
+  - amt_jtagaccel.c
+  - arm-jtag-ew.c
+  - bitbang.c
+  - bitq.c
+  - gw16012.c
+  - jlink.c
+  - usbprog.c
+  - vsllink.c
+  - rlink/rlink.c
+- bug: USBprog is broken with new tms sequence; it needs 7-clock cycles.
+  Fix promised from  Peter Denison openwrt at marshadder.org
+  Workaround: use "tms_sequence long" @par
+  https://lists.berlios.de/pipermail/openocd-development/2009-July/009426.html
+
+The following tasks have been suggested for improving OpenOCD's JTAG
+interface support:
+
+- rework USB communication to be more robust.  Two possible options are:
+  -# use libusb-1.0.1 with libusb-compat-0.1.1 (non-blocking I/O wrapper)
+  -# rewrite implementation to use non-blocking I/O
+- J-Link driver:
+  - fix to work with long scan chains, such as R.Doss's svf test.
+- FT2232 (libftdi):
+  - make performance comparable to alternatives (on Win32, D2XX is faster)
+  - make usability comparable to alternatives
+- Autodetect USB based adapters; this should be easy on Linux.  If there's
+  more than one, list the options; otherwise, just select that one.
+
+The following tasks have been suggested for adding new JTAG interfaces:
+
+- TCP driver: allow client/server for remote JTAG interface control.
+This requires a client and a server. The server is built into the
+normal OpenOCD and takes commands from the client and executes
+them on the interface returning the result of TCP/IP. The client
+is an OpenOCD which is built with a TCP/IP minidriver. The use
+of a minidriver is required to capture all the jtag_add_xxx()
+fn's at a high enough level and repackage these cmd's as
+TCP/IP packets handled by the server.
+
+@section thelistswd Serial Wire Debug
+
+- implement Serial Wire Debug interface
+
+@section thelistbs Boundary Scan Support
+
+- add STAPL support?
+- add BSDL support?
+
+A few possible options for the above:
+  -# Fake a TCL equivalent?
+  -# Integrate an existing library?
+  -# Write a new C implementation a la Jim?
+
+Once the above are completed:
+- add support for programming flash using boundary scan techniques
+- add integration with a modified gerber view program:
+  - provide means to view the PCB and select pins and traces
+  - allow use-cases such as the following:
+    - @b Stimulus
+      -# Double-click on a pin (or trace) with the mouse.
+    - @b Effects
+      -# The trace starts blinking, and
+      -# OpenOCD toggles the pin(s) 0/1.
+
+@section thelisttargets Target Support
+
+- Many common ARM cores could be autodetected using IDCODE
+- general layer cleanup: @par
+  https://lists.berlios.de/pipermail/openocd-development/2009-May/006590.html
+- regression: "reset halt" between 729(works) and 788(fails): @par
+https://lists.berlios.de/pipermail/openocd-development/2009-July/009206.html
+- registers
+  - add flush-value operation, call them all on resume/reset
+- mcr/mrc target->type support
+  - missing from ARM920t, ARM966e, XScale.
+  It's possible that the current syntax is unable to support read-modify-write
+  operations(see arm966e).
+  - mcr/mrc - retire cp15 commands when there the mrc/mrc commands have been
+  tested from: arm926ejs, arm720t, cortex_a8
+- ARM7/9:
+  - clean up "arm9tdmi vector_catch". Available for some arm7 cores? @par
+https://lists.berlios.de/pipermail/openocd-development/2009-October/011488.html
+https://lists.berlios.de/pipermail/openocd-development/2009-October/011506.html
+  - add reset option to allow programming embedded ice while srst is asserted.
+  Some CPUs will gate the JTAG clock when srst is asserted and in this case,
+  it is necessary to program embedded ice and then assert srst afterwards.
+- ARM926EJS:
+  - reset run/halt/step is not robust; needs testing to map out problems.
+- ARM11 improvements (MB?)
+  - add support for asserting srst to reset the core.
+  - Single stepping works, but should automatically
+  use hardware stepping if available.
+  - mdb can return garbage data if read byte operation fails for
+  a memory region(16 & 32 byte access modes may be supported). Is this
+  a bug in the .MX31 PDK init script? Try on i.MX31 PDK:
+  mdw 0xb80005f0 0x8, mdh 0xb80005f0 0x10, mdb 0xb80005f0 0x20. mdb returns
+  garabage.
+  - implement missing functionality (grep FNC_INFO_NOTIMPLEMENTED ...)
+- Thumb2 single stepping: ARM1156T2 needs simulator support
+- Cortex A8 support (ML)
+  - add target implementation (ML)
+- Cortex M3 support
+  - when stepping, only write dirtied registers (be faster)
+  - when connecting to halted core, fetch registers (startup is quirky)
+- Generic ARM run_algorithm() interface
+  - tagged struct wrapping ARM instructions and metadata
+  - not revision-specific (current: ARMv4+ARMv5 -or- ARMv6 -or- ARMv7)
+  - usable with at least arm_nandwrite() and generic CFI drivers
+- ETM
+  - don't show FIFOFULL registers if they're not supported
+  - use comparators to get more breakpoints and watchpoints
+  - add "etm drivers" command
+  - trace driver init() via examine() paths only, not setup()/reset
+- MC1322x support (JW/DE?)
+  - integrate and test support from JW (and DE?)
+  - get working with a known good interface (i.e. not today's jlink)
+- AT91SAM92xx:
+  - improvements for unknown-board-atmel-at91sam9260.cfg (RD)
+- STR9x: (ZW)
+  - improvements to str912.cfg to be more general purpose
+- AVR: (SQ)
+  - independently verify implementation
+  - incrementally improve working prototype in trunk. (SQ)
+  - work out how to debug this target
+  - AVR debugging protocol.
+- FPGA:
+  - Altera Nios Soft-CPU support
+- Coldfire (suggested by NC)
+  - can we draw from the BDM project?  @par
+    http://bdm.sourceforge.net/
+
+    or the OSBDM package @par
+    http://forums.freescale.com/freescale/board/message?board.id=OSBDM08&thread.id=422
+
+@section thelistsvf SVF/XSVF
+
+- develop SVF unit tests
+- develop XSVF unit tests
+
+@section thelistflash Flash Support
+
+- finish documentation for the following flash drivers:
+  - avr
+  - pic32mx
+  - ocl
+  - str9xpec
+
+- Don't expect writing all-ones to be a safe way to write without
+  changing bit values.  Minimally it loses on flash modules with
+  internal ECC, where it may change the ECC.
+  - NOR flash_write_unlock() does that between sectors
+  - there may be other cases too
+
+- Make sure all commands accept either a bank name or a bank number,
+  and be sure both identifiers show up in "flash banks" and "nand list".
+  Right now the user-friendly names are pretty much hidden...
+
+@subsection thelistflashcfi CFI
+
+- finish implementing bus width/chip width handling (suggested by NC)
+- factor vendor-specific code into separate source files
+  - add new callback interface for vendor-specific code
+- investigate/implement "thin wrapper" to use eCos CFI drivers (�H)
+
+@section thelistdebug Debugger Support
+
+- add support for masks in watchpoints? @par
+  https://lists.berlios.de/pipermail/openocd-development/2009-October/011507.html
+- breakpoints can get lost in some circumstances: @par
+  https://lists.berlios.de/pipermail/openocd-development/2009-June/008853.html
+- add support for masks in watchpoints. The trick is that GDB does not
+  support a breakpoint mask in the remote protocol. One way to work around
+  this is to add a separate command "watchpoint_mask add/rem <addr> <mask>", that
+  is run to register a list of masks that the gdb_server knows to use with
+  a particular watchpoint address.
+- integrate Keil AGDI interface to OpenOCD? (submitted by Dario Vecchio)
+
+@section thelisttesting Testing Suite
+
+This section includes several related groups of ideas:
+- @ref thelistunittests
+- @ref thelistsmoketests
+- @ref thelisttestreports
+- @ref thelisttestgenerichw
+
+@subsection thelistunittests Unit Tests
+
+- add testing skeleton to provide frameworks for adding tests
+- implement server unit tests
+- implement JTAG core unit tests
+- implement JTAG interface unit tests
+- implement flash unit tests
+- implement target unit tests
+
+@subsection thelistsmoketests Smoke Test Tools
+
+-# extend 'make check' with a smoketest app
+  - checks for OOCD_TEST_CONFIG, etc. in environment (or config file)
+  - if properly set, runs the smoke test with specified parameters
+    - openocd -f ${OOCD_TEST_CONFIG}
+    - implies a modular test suite (see below)
+  - should be able to run some minimal tests with dummy interface:
+    - compare results of baseline sanity checks with expected results
+
+-# builds a more complete test suite:
+  - existing testing/examples/ look like a great start
+  - all targets should be tested fully and for all capabilities
+    - we do NOT want a "lowest common denominator" test suite
+    - ... but can we start with one to get going?
+  - probably requires one test configuration file per board/target
+    - modularization can occur here, just like with targets/boards/chips
+    - coverage can increase over time, building up bundles of tests
+
+-# add new 'smoketest' Makefile target:
+  - calls 'make check' (and the smoketest app)
+  - gather inputs and output into a report file
+
+@subsection thelisttestreports Test Feedback Tools
+
+These ideas were first introduced here: @par
+  https://lists.berlios.de/pipermail/openocd-development/2009-May/006358.html
+
+- provide report submission scripts for e-mail and web forms
+- add new Makefile targets to post the report:
+  - 'checkreportsend' -- send to list via e-mail (via sendmail)
+  - 'checkreportpost' -- send web form (via curl or other script)
+
+@subsection thelisttestgenerichw Generic Hardware Tester
+
+- implement VHDL to use for FPGA-based JTAG TAP testing device
+- develop test suite that utilizes this testing device
+
+@section thelistautotools Autotools Build System
+
+- make entire configure process require less user consideration:
+  - automatically detect the features that are available, unless
+    options were specifically provided to configure
+  - provide a report of the drivers that will be build at the end of
+    running configure, so the users can verify which drivers will be
+    built during 'make' (and their options) .
+- eliminate sources of confusion in @c bootstrap script:
+  -# Make @c bootstrap call 'configure --enable-maintainer-mode \<opts\>'?
+  -# Add @c buildstrap script to assist with bootstrap and configure steps.
+- automatically build tool-chains required for cross-compiling
+  - produce mingw32, arm-elf, others using in-tree scripts
+  - build all required target code from sources
+- make JTAG and USB debug output a run-time configuration option
+
+@section thelistarchitecture Architectural Tasks
+
+The following architectural tasks need to be accomplished and should be
+fairly easy to complete:
+
+
+- use dynamic allocations for working memory. Scan & fix code
+for excessive stack allocations. take linux/scripts/checkstack.pl and
+see what the worst offenders are. Dynamic stack allocations are found
+at the bottom of the list below.  Example, on amd64:
+
+ $ objdump -d | checkstack.pl | head -10
+ 0x004311e3 image_open [openocd]:                      13464
+ 0x00431301 image_open [openocd]:                      13464
+ 0x004237a4 target_array2mem [openocd]:                        4376
+ 0x0042382b target_array2mem [openocd]:                        4376
+ 0x00423e74 target_mem2array [openocd]:                        4360
+ 0x00423ef9 target_mem2array [openocd]:                        4360
+ 0x00404aed handle_svf_command [openocd]:              2248
+ 0x00404b7e handle_svf_command [openocd]:              2248
+ 0x00413581 handle_flash_fill_command [openocd]:               2200
+ 0x004135fa handle_flash_fill_command [openocd]:               2200
+- clean-up code to match style guides
+- factor code to eliminate duplicated functionality
+- rewrite code that uses casts to access 16-bit and larger types
+  from unaligned memory addresses
+- libopenocd support: @par
+    https://lists.berlios.de/pipermail/openocd-development/2009-May/006405.html
+- review and clean up interface/target/flash APIs
+
+The following strategic tasks will require ambition, knowledge, and time
+to complete:
+
+- overhaul use of types to improve 32/64-bit portability
+  - types for both host and target word sizes?
+  - can we use GDB's CORE_TYPE support?
+- Allow N:M:P mapping of servers, targets, and interfaces
+- loadable module support for interface/target/flash drivers and commands
+  - support both static and dynamic modules.
+  - should probably use libltdl for dynamic library handing.
+
+@section thelistadmin Documentation Tasks
+
+- Develop milestone and release guidelines, processes, and scripts.
+- Develop "style" guidelines (and scripts) for maintainers:
+  - reviewing patches
+  - committing to git
+- Review Users' Guide for documentation errors or omissions
+  - "capture" and "ocd_find" commands
+  - "ocd_" prefix on various stuff
+- Update Developer's Manual (doxygen output)
+  - Add documentation describing the architecture of each module
+  - Provide more Technical Primers to bootstrap contributor knowledge
+
+*/
+/** @file
+This file contains the @ref thelist page.
+*/
+

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/bootstrap
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/bootstrap b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/bootstrap
new file mode 100755
index 0000000..3b60fc6
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/bootstrap
@@ -0,0 +1,43 @@
+#!/bin/sh
+# Run the autotools bootstrap sequence to create the configure script
+
+# Abort execution on error
+set -e
+
+if which libtoolize > /dev/null; then
+    libtoolize="libtoolize"
+elif which glibtoolize >/dev/null; then
+    libtoolize="glibtoolize"
+else
+    echo "$0: Error: libtool is required" >&2
+    exit 1
+fi
+
+if [ "$1" = "nosubmodule" ]; then
+    SKIP_SUBMODULE=1
+elif [ -n "$1" ]; then
+    echo "$0: Illegal argument $1"
+    echo "USAGE: $0 [nosubmodule]"
+    exit 1
+fi
+
+# bootstrap the autotools
+(
+set -x
+aclocal
+${libtoolize} --automake --copy
+autoconf
+autoheader
+automake --gnu --add-missing --copy
+)
+
+if [ -n "$SKIP_SUBMODULE" ]; then
+    echo "Skipping submodule setup"
+else
+    echo "Setting up submodules"
+    git submodule init
+    git submodule update
+fi
+
+echo "Bootstrap complete. Quick build instructions:"
+echo "./configure ...."

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/common.mk
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/common.mk b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/common.mk
new file mode 100755
index 0000000..f301c3a
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/common.mk
@@ -0,0 +1,12 @@
+
+# common flags used in openocd build
+AM_CPPFLAGS = -I$(top_srcdir)/src \
+			  -I$(top_builddir)/src \
+			  -I$(top_srcdir)/src/helper \
+			  -DPKGDATADIR=\"$(pkgdatadir)\" \
+			  -DBINDIR=\"$(bindir)\"
+
+if INTERNAL_JIMTCL
+AM_CPPFLAGS += -I$(top_srcdir)/jimtcl \
+			   -I$(top_builddir)/jimtcl
+endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/config_subdir.m4
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/config_subdir.m4 b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/config_subdir.m4
new file mode 100755
index 0000000..1c79098
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/config_subdir.m4
@@ -0,0 +1,26 @@
+dnl
+dnl If needed, define the m4_ifblank and m4_ifnblank macros from autoconf 2.64
+dnl This allows us to run with earlier Autoconfs as well.
+ifdef([m4_ifblank],[],[
+m4_define([m4_ifblank],
+[m4_if(m4_translit([[$1]],  [ ][	][
+]), [], [$2], [$3])])])
+dnl
+ifdef([m4_ifnblank],[],[
+m4_define([m4_ifnblank],
+[m4_if(m4_translit([[$1]],  [ ][	][
+]), [], [$3], [$2])])])
+dnl
+
+dnl AC_CONFIG_SUBDIRS does not allow configure options to be passed
+dnl to subdirs, this function allows that by creating a configure.gnu
+dnl script that prepends configure options and then calls the real
+dnl configure script
+AC_DEFUN([AX_CONFIG_SUBDIR_OPTION],
+[
+AC_CONFIG_SUBDIRS([$1])
+
+m4_ifblank([$2], [rm -f $srcdir/$1/configure.gnu],
+[echo -e '#!/bin/sh\nexec "`dirname "'\$'0"`/configure" $2 "'\$'@"' > "$srcdir/$1/configure.gnu"
+])
+])

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/configure.ac
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/configure.ac b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/configure.ac
new file mode 100755
index 0000000..aed8bce
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/configure.ac
@@ -0,0 +1,1343 @@
+AC_PREREQ(2.64)
+AC_INIT([openocd], [0.10.0-dev],
+  [OpenOCD Mailing List <op...@lists.sourceforge.net>])
+AC_CONFIG_SRCDIR([src/openocd.c])
+
+m4_include([config_subdir.m4])dnl
+
+# check for makeinfo before calling AM_INIT_AUTOMAKE
+AC_CHECK_PROG([MAKEINFO], [makeinfo], [makeinfo])
+if test "x$MAKEINFO" = "x"; then
+  MAKEINFO='echo makeinfo missing; true'
+  AC_MSG_WARN([Info documentation will not be built.])
+fi
+AC_SUBST([MAKEINFO])
+
+AM_INIT_AUTOMAKE([-Wall -Wno-portability dist-bzip2 dist-zip subdir-objects])
+
+AC_CONFIG_HEADERS([config.h])
+AH_BOTTOM([
+#include <helper/system.h>
+#include <helper/types.h>
+#include <helper/replacements.h>
+])
+
+AC_LANG_C
+AC_PROG_CC
+AC_PROG_CC_C99
+AM_PROG_CC_C_O
+AC_PROG_RANLIB
+PKG_PROG_PKG_CONFIG([0.23])
+
+dnl disable checks for C++, Fortran and GNU Java Compiler
+m4_defun([_LT_AC_LANG_CXX_CONFIG], [:])
+m4_defun([_LT_AC_LANG_F77_CONFIG], [:])
+m4_defun([_LT_AC_LANG_GCJ_CONFIG], [:])
+AC_DISABLE_SHARED
+AC_PROG_LIBTOOL
+AC_SUBST([LIBTOOL_DEPS])
+
+dnl configure checks required for Jim files (these are obsolete w/ C99)
+AC_C_CONST
+AC_TYPE_LONG_LONG_INT
+
+AC_SEARCH_LIBS([ioperm], [ioperm])
+AC_SEARCH_LIBS([dlopen], [dl])
+
+AC_CHECK_HEADERS([sys/socket.h])
+AC_CHECK_HEADERS([arpa/inet.h], [], [], [dnl
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+])
+AC_CHECK_HEADERS([elf.h])
+AC_CHECK_HEADERS([dirent.h])
+AC_CHECK_HEADERS([fcntl.h])
+AC_CHECK_HEADERS([ifaddrs.h], [], [], [dnl
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+])
+AC_CHECK_HEADERS([malloc.h])
+AC_CHECK_HEADERS([netdb.h])
+AC_CHECK_HEADERS([netinet/in.h], [], [], [dnl
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+])
+AC_CHECK_HEADERS([netinet/tcp.h], [], [], [dnl
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+])
+AC_CHECK_HEADERS([poll.h])
+AC_CHECK_HEADERS([pthread.h])
+AC_CHECK_HEADERS([strings.h])
+AC_CHECK_HEADERS([sys/ioctl.h])
+AC_CHECK_HEADERS([sys/param.h])
+AC_CHECK_HEADERS([sys/select.h])
+AC_CHECK_HEADERS([sys/stat.h])
+AC_CHECK_HEADERS([sys/time.h])
+AC_CHECK_HEADERS([sys/types.h])
+AC_CHECK_HEADERS([unistd.h])
+AC_CHECK_HEADERS([net/if.h], [], [], [dnl
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+])
+
+AC_HEADER_ASSERT
+AC_HEADER_STDBOOL
+AC_HEADER_TIME
+
+AC_C_BIGENDIAN
+
+AC_CHECK_FUNCS([strndup])
+AC_CHECK_FUNCS([strnlen])
+AC_CHECK_FUNCS([gettimeofday])
+AC_CHECK_FUNCS([usleep])
+AC_CHECK_FUNCS([vasprintf])
+
+build_bitbang=no
+build_bitq=no
+is_cygwin=no
+is_mingw=no
+is_win32=no
+is_darwin=no
+
+# guess-rev.sh only exists in the repository, not in the released archives
+AC_MSG_CHECKING([whether to build a release])
+if test -x $srcdir/guess-rev.sh ; then
+  build_release=no
+else
+  build_release=yes
+fi
+AC_MSG_RESULT([$build_release])
+
+AC_ARG_WITH(ftd2xx,
+   AS_HELP_STRING([--with-ftd2xx=<PATH>],[This option has been removed.]),
+  [
+# Option Given.
+cat << __EOF__
+
+The option: --with-ftd2xx=<PATH> has been removed.
+On Linux, the new option is:
+
+  --with-ftd2xx-linux-tardir=/path/to/files
+
+Where <path> is the path the the directory where the "tar.gz" file
+from FTDICHIP.COM was unpacked, for example:
+
+  --with-ftd2xx-linux-tardir=${HOME}/libftd2xx0.4.16
+
+On Cygwin/MingW32, the new option is:
+
+  --with-ftd2xx-win32-zipdir=/path/to/files
+
+Where <path> is the path to the directory where the "zip" file from
+FTDICHIP.COM was unpacked, for example:
+
+  --with-ftd2xx-win32-zipdir=${HOME}/ftd2xx.cdm.files
+
+__EOF__
+
+   AC_MSG_ERROR([Sorry Cannot continue])
+  ], [true])
+
+# Adapter drivers
+# 1st column -- configure option
+# 2nd column -- description
+# 3rd column -- symbol used for both config.h and automake
+m4_define([ADAPTER_ARG], [m4_argn([1], $1)])
+m4_define([ADAPTER_DESC], [m4_argn([2], $1)])
+m4_define([ADAPTER_SYM], [m4_argn([3], $1)])
+m4_define([ADAPTER_VAR], [enable_[]ADAPTER_ARG($1)])
+m4_define([ADAPTER_OPT], [m4_translit(ADAPTER_ARG($1), [_], [-])])
+
+m4_define([USB1_ADAPTERS],
+	[[[ftdi], [MPSSE mode of FTDI based devices], [FTDI]],
+	[[jlink], [Segger J-Link JTAG Programmer], [JLINK]],
+	[[stlink], [ST-Link JTAG Programmer], [HLADAPTER_STLINK]],
+	[[ti_icdi], [TI ICDI JTAG Programmer], [HLADAPTER_ICDI]],
+	[[ulink], [Keil ULINK JTAG Programmer], [ULINK]],
+	[[usb_blaster_2], [Altera USB-Blaster II Compatible], [USB_BLASTER_2]],
+	[[vsllink], [Versaloon-Link JTAG Programmer], [VSLLINK]]])
+
+m4_define([USB_ADAPTERS],
+	[[[osbdm], [OSBDM (JTAG only) Programmer], [OSBDM]],
+	[[opendous], [eStick/opendous JTAG Programmer], [OPENDOUS]],
+	[[aice], [Andes JTAG Programmer], [AICE]]])
+
+m4_define([USB0_ADAPTERS],
+	[[[usbprog], [USBProg JTAG Programmer], [USBPROG]],
+	[[rlink], [Raisonance RLink JTAG Programmer], [RLINK]],
+	[[armjtagew], [Olimex ARM-JTAG-EW Programmer], [ARMJTAGEW]]])
+
+m4_define([HIDAPI_ADAPTERS],
+	[[[cmsis_dap], [CMSIS-DAP Compliant Debugger], [CMSIS_DAP]]])
+
+#========================================
+# FTD2XXX support comes in 4 forms.
+#    (1) win32 - via a zip file
+#    (2) linux - via a tar file
+#    (3) linux/cygwin/mingw - via libftdi
+#    (4) darwin - installed under /usr/local
+#
+# In case (1) and (2) we need to know where the package was unpacked.
+
+AC_ARG_WITH(ftd2xx-win32-zipdir,
+  AS_HELP_STRING([--with-ftd2xx-win32-zipdir],[Where (CYGWIN/MINGW) the zip file from ftdichip.com was unpacked (default=search)]),
+  [
+  # option present
+  if test -d $with_ftd2xx_win32_zipdir
+  then
+    with_ftd2xx_win32_zipdir=`cd $with_ftd2xx_win32_zipdir && pwd`
+    AC_MSG_NOTICE([Using: ftdichip.com library: $with_ftd2xx_win32_zipdir])
+  else
+    AC_MSG_ERROR([Parameter to --with-ftd2xx-win32-zipdir is not a dir: $with_ftd2xx_win32_zipdir])
+  fi
+  ], [true])
+
+AC_ARG_WITH(ftd2xx-linux-tardir,
+  AS_HELP_STRING([--with-ftd2xx-linux-tardir], [Where (Linux/Unix) the tar file from ftdichip.com was unpacked (default=search)]),
+  [
+  # Option present
+  if test $is_win32 = yes ; then
+     AC_MSG_ERROR([The option: --with-ftd2xx-linux-tardir is only usable on linux])
+  fi
+  if test -d $with_ftd2xx_linux_tardir
+  then
+    with_ftd2xx_linux_tardir=`cd $with_ftd2xx_linux_tardir && pwd`
+    AC_MSG_NOTICE([Using: ftdichip.com library: $with_ftd2xx_linux_tardir])
+  else
+    AC_MSG_ERROR([Parameter to --with-ftd2xx-linux-tardir is not a dir: $with_ftd2xx_linux_tardir])
+  fi
+  ], [true])
+
+AC_ARG_WITH(ftd2xx-lib,
+  AS_HELP_STRING([--with-ftd2xx-lib],
+    [Use static or shared ftd2xx libs (default=static)]),
+  [
+  case "$withval" in
+  static)
+    with_ftd2xx_lib=$withval
+    ;;
+  shared)
+    with_ftd2xx_lib=$withval
+    ;;
+  *)
+    AC_MSG_ERROR([Option: --with-ftd2xx-lib=static or --with-ftd2xx-lib=shared not, $withval])
+    ;;
+  esac
+  ], [
+  # Default is static - it is simpler :-(
+  with_ftd2xx_lib=static
+  ])
+
+AC_ARG_ENABLE([doxygen-html],
+  AS_HELP_STRING([--disable-doxygen-html],
+    [Disable building Doxygen manual as HTML.]),
+  [doxygen_as_html=$enableval], [doxygen_as_html=yes])
+AC_SUBST([doxygen_as_html])
+AC_MSG_CHECKING([whether to build Doxygen as HTML])
+AC_MSG_RESULT([$doxygen_as_html])
+
+AC_ARG_ENABLE([doxygen-pdf],
+  AS_HELP_STRING([--enable-doxygen-pdf],
+    [Enable building Doxygen manual as PDF.]),
+  [doxygen_as_pdf=$enableval], [doxygen_as_pdf=no])
+AC_SUBST([doxygen_as_pdf])
+AC_MSG_CHECKING([whether to build Doxygen as PDF])
+AC_MSG_RESULT([$doxygen_as_pdf])
+
+AC_ARG_ENABLE([gccwarnings],
+  AS_HELP_STRING([--disable-gccwarnings], [Disable compiler warnings]),
+  [gcc_warnings=$enableval], [gcc_warnings=yes])
+
+AC_ARG_ENABLE([wextra],
+  AS_HELP_STRING([--disable-wextra], [Disable extra compiler warnings]),
+  [gcc_wextra=$enableval], [gcc_wextra=$gcc_warnings])
+
+AC_ARG_ENABLE([werror],
+  AS_HELP_STRING([--disable-werror], [Do not treat warnings as errors]),
+  [gcc_werror=$enableval], [gcc_werror=$gcc_warnings])
+
+# set default verbose options, overridden by following options
+debug_jtag_io=no
+debug_usb_io=no
+debug_usb_comms=no
+
+AC_ARG_ENABLE([verbose],
+  AS_HELP_STRING([--enable-verbose],
+      [Enable verbose JTAG I/O messages (for debugging).]),
+  [
+  debug_jtag_io=$enableval
+  debug_usb_io=$enableval
+  debug_usb_comms=$enableval
+  ], [])
+
+AC_ARG_ENABLE([verbose_jtag_io],
+  AS_HELP_STRING([--enable-verbose-jtag-io],
+      [Enable verbose JTAG I/O messages (for debugging).]),
+  [debug_jtag_io=$enableval], [])
+
+AC_ARG_ENABLE([verbose_usb_io],
+  AS_HELP_STRING([--enable-verbose-usb-io],
+      [Enable verbose USB I/O messages (for debugging)]),
+  [debug_usb_io=$enableval], [])
+
+AC_ARG_ENABLE([verbose_usb_comms],
+  AS_HELP_STRING([--enable-verbose-usb-comms],
+      [Enable verbose USB communication messages (for debugging)]),
+  [debug_usb_comms=$enableval], [])
+
+AC_MSG_CHECKING([whether to enable verbose JTAG I/O messages]);
+AC_MSG_RESULT([$debug_jtag_io])
+if test $debug_jtag_io = yes; then
+  AC_DEFINE([_DEBUG_JTAG_IO_],[1], [Print verbose JTAG I/O messages])
+fi
+
+AC_MSG_CHECKING([whether to enable verbose USB I/O messages]);
+AC_MSG_RESULT([$debug_usb_io])
+if test $debug_usb_io = yes; then
+  AC_DEFINE([_DEBUG_USB_IO_],[1], [Print verbose USB I/O messages])
+fi
+
+AC_MSG_CHECKING([whether to enable verbose USB communication messages]);
+AC_MSG_RESULT([$debug_usb_comms])
+if test $debug_usb_comms = yes; then
+  AC_DEFINE([_DEBUG_USB_COMMS_],[1], [Print verbose USB communication messages])
+fi
+
+debug_malloc=no
+AC_ARG_ENABLE([malloc_logging],
+  AS_HELP_STRING([--enable-malloc-logging],
+      [Include free space in logging messages (requires malloc.h).]),
+  [debug_malloc=$enableval], [])
+
+AC_MSG_CHECKING([whether to enable malloc free space logging]);
+AC_MSG_RESULT([$debug_malloc])
+if test $debug_malloc = yes; then
+  AC_DEFINE([_DEBUG_FREE_SPACE_],[1], [Include malloc free space in logging])
+fi
+
+AC_ARG_ENABLE([dummy],
+  AS_HELP_STRING([--enable-dummy], [Enable building the dummy port driver]),
+  [build_dummy=$enableval], [build_dummy=no])
+
+m4_define([AC_ARG_ADAPTERS], [
+  m4_foreach([adapter], [$1],
+	[AC_ARG_ENABLE(ADAPTER_OPT([adapter]),
+		AS_HELP_STRING([--enable-ADAPTER_OPT([adapter])],
+			[Enable building support for the ]ADAPTER_DESC([adapter])[ (default is $2)]),
+		[], [ADAPTER_VAR([adapter])=$2])
+  ])
+])
+
+AC_ARG_ADAPTERS([USB1_ADAPTERS, USB_ADAPTERS, USB0_ADAPTERS, HIDAPI_ADAPTERS], [auto])
+
+AC_ARG_ENABLE([parport],
+  AS_HELP_STRING([--enable-parport], [Enable building the pc parallel port driver]),
+  [build_parport=$enableval], [build_parport=no])
+
+AC_ARG_ENABLE([parport_ppdev],
+  AS_HELP_STRING([--disable-parport-ppdev],
+      [Disable use of ppdev (/dev/parportN) for parport (for x86 only)]),
+    [parport_use_ppdev=$enableval], [parport_use_ppdev=yes])
+
+AC_ARG_ENABLE([parport_giveio],
+    AS_HELP_STRING([--enable-parport-giveio],
+      [Enable use of giveio for parport (for CygWin only)]),
+    [parport_use_giveio=$enableval], [parport_use_giveio=])
+
+AC_ARG_ENABLE([ft2232_libftdi], [], [
+if test $enableval = yes; then
+  AC_MSG_ERROR([The ft2232 driver is deprecated, use --enable-ftdi to build its replacement, or force the old driver with --enable-legacy-ft2232_libftdi])
+fi
+])
+
+AC_ARG_ENABLE([ft2232_ftd2xx], [], [
+if test $enableval = yes; then
+  AC_MSG_ERROR([The ft2232 driver is deprecated, use --enable-ftdi to build its replacement, or force the old driver with --enable-legacy-ft2232_ftd2xx])
+fi
+])
+
+AC_ARG_ENABLE([legacy-ft2232_libftdi],
+  AS_HELP_STRING([--enable-legacy-ft2232_libftdi], [(DEPRECATED) Enable building support for FT2232 based devices using the libftdi library]),
+  [build_ft2232_libftdi=$enableval], [build_ft2232_libftdi=no])
+
+AC_ARG_ENABLE([legacy-ft2232_ftd2xx],
+  AS_HELP_STRING([--enable-legacy-ft2232_ftd2xx], [(DEPRECATED) Enable building support for FT2232 based devices using the D2XX library from ftdichip.com]),
+  [build_ft2232_ftd2xx=$enableval], [build_ft2232_ftd2xx=no])
+
+AC_ARG_ENABLE([jtag_vpi],
+  AS_HELP_STRING([--enable-jtag_vpi], [Enable building support for JTAG VPI]),
+  [build_jtag_vpi=$enableval], [build_jtag_vpi=no])
+
+AC_ARG_ENABLE([usb_blaster_libftdi],
+  AS_HELP_STRING([--enable-usb_blaster_libftdi], [Enable building support for the Altera USB-Blaster using the libftdi driver, opensource alternate of FTD2XX]),
+  [build_usb_blaster_libftdi=$enableval], [build_usb_blaster_libftdi=no])
+
+AC_ARG_ENABLE([usb_blaster_ftd2xx],
+  AS_HELP_STRING([--enable-usb_blaster_ftd2xx], [Enable building support for the Altera USB-Blaster using the FTD2XX driver from ftdichip.com]),
+  [build_usb_blaster_ftd2xx=$enableval], [build_usb_blaster_ftd2xx=no])
+
+AC_ARG_ENABLE([amtjtagaccel],
+  AS_HELP_STRING([--enable-amtjtagaccel], [Enable building the Amontec JTAG-Accelerator driver]),
+  [build_amtjtagaccel=$enableval], [build_amtjtagaccel=no])
+
+AC_ARG_ENABLE([zy1000_master],
+  AS_HELP_STRING([--enable-zy1000-master], [Use ZY1000 JTAG master registers]),
+  [build_zy1000_master=$enableval], [build_zy1000_master=no])
+
+AC_ARG_ENABLE([zy1000],
+  AS_HELP_STRING([--enable-zy1000], [Enable ZY1000 interface]),
+  [build_zy1000=$enableval], [build_zy1000=no])
+
+AC_ARG_ENABLE([ioutil],
+  AS_HELP_STRING([--enable-ioutil], [Enable ioutil functions - useful for standalone OpenOCD implementations]),
+  [build_ioutil=$enableval], [build_ioutil=no])
+
+case "${host_cpu}" in
+  arm*)
+    AC_ARG_ENABLE([ep93xx],
+      AS_HELP_STRING([--enable-ep93xx], [Enable building support for EP93xx based SBCs]),
+      [build_ep93xx=$enableval], [build_ep93xx=no])
+
+    AC_ARG_ENABLE([at91rm9200],
+      AS_HELP_STRING([--enable-at91rm9200], [Enable building support for AT91RM9200 based SBCs]),
+      [build_at91rm9200=$enableval], [build_at91rm9200=no])
+
+    AC_ARG_ENABLE([bcm2835gpio],
+      AS_HELP_STRING([--enable-bcm2835gpio], [Enable building support for bitbanging on BCM2835 (as found in Raspberry Pi)]),
+      [build_bcm2835gpio=$enableval], [build_bcm2835gpio=no])
+    ;;
+
+  *)
+    build_ep93xx=no
+    build_at91rm9200=no
+    build_bcm2835gpio=no
+    ;;
+esac
+
+AC_ARG_ENABLE([gw16012],
+  AS_HELP_STRING([--enable-gw16012], [Enable building support for the Gateworks GW16012 JTAG Programmer]),
+  [build_gw16012=$enableval], [build_gw16012=no])
+
+AC_ARG_ENABLE([presto_libftdi],
+  AS_HELP_STRING([--enable-presto_libftdi], [Enable building support for ASIX Presto Programmer using the libftdi driver]),
+  [build_presto_libftdi=$enableval], [build_presto_libftdi=no])
+
+AC_ARG_ENABLE([presto_ftd2xx],
+  AS_HELP_STRING([--enable-presto_ftd2xx], [Enable building support for ASIX Presto Programmer using the FTD2XX driver]),
+  [build_presto_ftd2xx=$enableval], [build_presto_ftd2xx=no])
+
+AC_ARG_ENABLE([openjtag_ftd2xx],
+  AS_HELP_STRING([--enable-openjtag_ftd2xx], [Enable building support for the OpenJTAG Programmer with ftd2xx driver]),
+  [build_openjtag_ftd2xx=$enableval], [build_openjtag_ftd2xx=no])
+
+AC_ARG_ENABLE([openjtag_ftdi],
+  AS_HELP_STRING([--enable-openjtag_ftdi], [Enable building support for the OpenJTAG Programmer with ftdi driver]),
+  [build_openjtag_ftdi=$enableval], [build_openjtag_ftdi=no])
+
+AC_ARG_ENABLE([oocd_trace],
+  AS_HELP_STRING([--enable-oocd_trace],
+  [Enable building support for some prototype OpenOCD+trace ETM capture hardware]),
+  [build_oocd_trace=$enableval], [build_oocd_trace=no])
+
+AC_ARG_ENABLE([buspirate],
+  AS_HELP_STRING([--enable-buspirate], [Enable building support for the Buspirate]),
+  [build_buspirate=$enableval], [build_buspirate=no])
+
+AC_ARG_ENABLE([sysfsgpio],
+  AS_HELP_STRING([--enable-sysfsgpio], [Enable building support for programming driven via sysfs gpios.]),
+  [build_sysfsgpio=$enableval], [build_sysfsgpio=no])
+
+AC_ARG_ENABLE([minidriver_dummy],
+  AS_HELP_STRING([--enable-minidriver-dummy], [Enable the dummy minidriver.]),
+  [build_minidriver_dummy=$enableval], [build_minidriver_dummy=no])
+
+AC_ARG_ENABLE([internal-jimtcl],
+  AS_HELP_STRING([--disable-internal-jimtcl], [Disable building internal jimtcl]),
+  [use_internal_jimtcl=$enableval], [use_internal_jimtcl=yes])
+
+AC_ARG_ENABLE([internal-libjaylink],
+  AS_HELP_STRING([--disable-internal-libjaylink],
+  [Disable building internal libjaylink]),
+  [use_internal_libjaylink=$enableval], [use_internal_libjaylink=yes])
+
+build_minidriver=no
+AC_MSG_CHECKING([whether to enable ZY1000 minidriver])
+if test $build_zy1000 = yes; then
+  if test $build_minidriver = yes; then
+    AC_MSG_ERROR([Multiple minidriver options have been enabled.])
+  fi
+  AC_DEFINE([HAVE_JTAG_MINIDRIVER_H], [1],
+      [Define to 1 if you have the <jtag_minidriver.h> header file.])
+  build_minidriver=yes
+fi
+AC_MSG_RESULT([$build_zy1000])
+
+AC_ARG_ENABLE([remote-bitbang],
+  AS_HELP_STRING([--enable-remote-bitbang], [Enable building support for the Remote Bitbang jtag driver]),
+  [build_remote_bitbang=$enableval], [build_remote_bitbang=no])
+
+AC_MSG_CHECKING([whether to enable dummy minidriver])
+if test $build_minidriver_dummy = yes; then
+  if test $build_minidriver = yes; then
+    AC_MSG_ERROR([Multiple minidriver options have been enabled.])
+  fi
+  build_minidriver=yes
+  AC_DEFINE([BUILD_MINIDRIVER_DUMMY], [1], [Use the dummy minidriver.])
+  AC_DEFINE([HAVE_JTAG_MINIDRIVER_H], [1],
+      [Define to 1 if you have the <jtag_minidriver.h> header file.])
+fi
+AC_MSG_RESULT([$build_minidriver_dummy])
+
+AC_MSG_CHECKING([whether standard drivers can be built])
+if test "$build_minidriver" = yes; then
+  AC_MSG_RESULT([no])
+  AC_MSG_WARN([Using the minidriver disables all other drivers.])
+  sleep 2
+else
+  AC_MSG_RESULT([yes])
+fi
+
+case "${host_cpu}" in
+  i?86|x86*)
+    ;;
+  *)
+    if test x$parport_use_ppdev = xno; then
+      AC_MSG_WARN([--disable-parport-ppdev is not supported by the host CPU])
+    fi
+    parport_use_ppdev=yes
+    ;;
+esac
+
+case $host in
+  *-cygwin*)
+    is_win32=yes
+    parport_use_ppdev=no
+
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[return __MINGW32__;]])],
+      [is_mingw=yes],[is_mingw=no])
+    if test $is_mingw = yes; then
+      AC_DEFINE([IS_MINGW], [1], [1 if building for MinGW.])
+      if test x$parport_use_giveio = xno; then
+        AC_MSG_WARN([--disable-parport-giveio is not supported by MinGW32 hosts])
+      fi
+      parport_use_giveio=yes
+      is_cygwin=no
+    else
+      is_cygwin=yes
+      AC_DEFINE([IS_CYGWIN], [1], [1 if building for Cygwin.])
+      # sys/io.h needed under cygwin for parport access
+      if test $build_parport = yes; then
+        AC_CHECK_HEADERS([sys/io.h],[],AC_MSG_ERROR([Please install the cygwin ioperm package]))
+      fi
+    fi
+
+    AC_DEFINE([IS_WIN32], [1], [1 if building for Win32.])
+    AC_DEFINE([IS_DARWIN], [0], [0 if not building for Darwin.])
+    ;;
+  *-mingw*)
+    is_mingw=yes
+    is_win32=yes
+    parport_use_ppdev=no
+
+    if test x$parport_use_giveio = xno; then
+      AC_MSG_WARN([--disable-parport-giveio is not supported by MinGW32 hosts])
+    fi
+    parport_use_giveio=yes
+
+    if test x$build_buspirate = xyes; then
+      AC_MSG_ERROR([buspirate currently not supported by MinGW32 hosts])
+    fi
+
+    CFLAGS="$CFLAGS -D__USE_MINGW_ANSI_STDIO"
+
+    AC_DEFINE([IS_MINGW], [1], [1 if building for MinGW.])
+    AC_DEFINE([IS_WIN32], [1], [1 if building for Win32.])
+    AC_DEFINE([IS_DARWIN], [0], [0 if not building for Darwin.])
+    ;;
+  *darwin*)
+    is_darwin=yes
+
+    if test x$parport_use_giveio = xyes; then
+      AC_MSG_WARN([--enable-parport-giveio cannot be used by Darwin hosts])
+    fi
+    parport_use_giveio=no
+
+    AC_DEFINE([IS_CYGWIN], [0], [0 if not building for Cygwin.])
+    AC_DEFINE([IS_WIN32], [0], [0 if not building for Win32.])
+    AC_DEFINE([IS_DARWIN], [1], [1 if building for Darwin.])
+    ;;
+  *)
+    if test x$parport_use_giveio = xyes; then
+      AC_MSG_WARN([--enable-parport-giveio cannot be used by ]$host[ hosts])
+    fi
+    parport_use_giveio=no
+    AC_DEFINE([IS_CYGWIN], [0], [0 if not building for Cygwin.])
+    AC_DEFINE([IS_WIN32], [0], [0 if not building for Win32.])
+    AC_DEFINE([IS_DARWIN], [0], [0 if not building for Darwin.])
+    ;;
+esac
+
+if test $is_win32 = yes; then
+    AC_DEFINE([WIN32_LEAN_AND_MEAN], [1], [1 to exclude old conflicting definitions when building on Windows])
+fi
+
+if test $build_parport = yes; then
+  build_bitbang=yes
+  AC_DEFINE([BUILD_PARPORT], [1], [1 if you want parport.])
+else
+  AC_DEFINE([BUILD_PARPORT], [0], [0 if you don't want parport.])
+fi
+
+if test $build_dummy = yes; then
+  build_bitbang=yes
+  AC_DEFINE([BUILD_DUMMY], [1], [1 if you want dummy driver.])
+else
+  AC_DEFINE([BUILD_DUMMY], [0], [0 if you don't want dummy driver.])
+fi
+
+if test $build_ep93xx = yes; then
+  build_bitbang=yes
+  AC_DEFINE([BUILD_EP93XX], [1], [1 if you want ep93xx.])
+else
+  AC_DEFINE([BUILD_EP93XX], [0], [0 if you don't want ep93xx.])
+fi
+
+if test $build_zy1000 = yes; then
+  AC_DEFINE([BUILD_ZY1000], [1], [1 if you want ZY1000.])
+else
+  AC_DEFINE([BUILD_ZY1000], [0], [0 if you don't want ZY1000.])
+fi
+
+if test $build_zy1000_master = yes; then
+  AC_DEFINE([BUILD_ZY1000_MASTER], [1], [1 if you want ZY1000 JTAG master registers.])
+else
+  AC_DEFINE([BUILD_ZY1000_MASTER], [0], [0 if you don't want ZY1000 JTAG master registers.])
+fi
+
+if test $build_at91rm9200 = yes; then
+  build_bitbang=yes
+  AC_DEFINE([BUILD_AT91RM9200], [1], [1 if you want at91rm9200.])
+else
+  AC_DEFINE([BUILD_AT91RM9200], [0], [0 if you don't want at91rm9200.])
+fi
+
+if test $build_bcm2835gpio = yes; then
+  build_bitbang=yes
+  AC_DEFINE([BUILD_BCM2835GPIO], [1], [1 if you want bcm2835gpio.])
+else
+  AC_DEFINE([BUILD_BCM2835GPIO], [0], [0 if you don't want bcm2835gpio.])
+fi
+
+if test x$parport_use_ppdev = xyes; then
+  AC_DEFINE([PARPORT_USE_PPDEV], [1], [1 if you want parport to use ppdev.])
+else
+  AC_DEFINE([PARPORT_USE_PPDEV], [0], [0 if you don't want parport to use ppdev.])
+fi
+
+if test x$parport_use_giveio = xyes; then
+  AC_DEFINE([PARPORT_USE_GIVEIO], [1], [1 if you want parport to use giveio.])
+else
+  AC_DEFINE([PARPORT_USE_GIVEIO], [0], [0 if you don't want parport to use giveio.])
+fi
+
+if test $build_bitbang = yes; then
+  AC_DEFINE([BUILD_BITBANG], [1], [1 if you want a bitbang interface.])
+else
+  AC_DEFINE([BUILD_BITBANG], [0], [0 if you don't want a bitbang interface.])
+fi
+
+if test $build_ft2232_libftdi = yes; then
+  AC_DEFINE([BUILD_FT2232_LIBFTDI], [1], [1 if you want libftdi ft2232.])
+else
+  AC_DEFINE([BUILD_FT2232_LIBFTDI], [0], [0 if you don't want libftdi ft2232.])
+fi
+
+if test $build_ft2232_ftd2xx = yes; then
+  AC_DEFINE([BUILD_FT2232_FTD2XX], [1], [1 if you want ftd2xx ft2232.])
+else
+  AC_DEFINE([BUILD_FT2232_FTD2XX], [0], [0 if you don't want ftd2xx ft2232.])
+fi
+
+if test $build_usb_blaster_libftdi = yes; then
+  AC_DEFINE([BUILD_USB_BLASTER_LIBFTDI], [1], [1 if you want libftdi usb_blaster.])
+else
+  AC_DEFINE([BUILD_USB_BLASTER_LIBFTDI], [0], [0 if you don't want libftdi usb_blaster.])
+fi
+
+if test $build_jtag_vpi = yes; then
+  AC_DEFINE([BUILD_JTAG_VPI], [1], [1 if you want JTAG VPI.])
+else
+  AC_DEFINE([BUILD_JTAG_VPI], [0], [0 if you don't want JTAG VPI.])
+fi
+
+if test $build_usb_blaster_ftd2xx = yes; then
+  AC_DEFINE([BUILD_USB_BLASTER_FTD2XX], [1], [1 if you want ftd2xx usb_blaster.])
+else
+  AC_DEFINE([BUILD_USB_BLASTER_FTD2XX], [0], [0 if you don't want ftd2xx usb_blaster.])
+fi
+
+if test $build_amtjtagaccel = yes; then
+  AC_DEFINE([BUILD_AMTJTAGACCEL], [1], [1 if you want the Amontec JTAG-Accelerator driver.])
+else
+  AC_DEFINE([BUILD_AMTJTAGACCEL], [0], [0 if you don't want the Amontec JTAG-Accelerator driver.])
+fi
+
+if test $build_gw16012 = yes; then
+  AC_DEFINE([BUILD_GW16012], [1], [1 if you want the Gateworks GW16012 driver.])
+else
+  AC_DEFINE([BUILD_GW16012], [0], [0 if you don't want the Gateworks GW16012 driver.])
+fi
+
+if test $build_presto_libftdi = yes; then
+  build_bitq=yes
+  AC_DEFINE([BUILD_PRESTO_LIBFTDI], [1], [1 if you want the ASIX PRESTO driver using libftdi.])
+else
+  AC_DEFINE([BUILD_PRESTO_LIBFTDI], [0], [0 if you don't want the ASIX PRESTO driver using libftdi.])
+fi
+
+if test $build_presto_ftd2xx = yes; then
+  build_bitq=yes
+  AC_DEFINE([BUILD_PRESTO_FTD2XX], [1], [1 if you want the ASIX PRESTO driver using FTD2XX.])
+else
+  AC_DEFINE([BUILD_PRESTO_FTD2XX], [0], [0 if you don't want the ASIX PRESTO driver using FTD2XX.])
+fi
+
+if test $build_bitq = yes; then
+  AC_DEFINE([BUILD_BITQ], [1], [1 if you want a bitq interface.])
+else
+  AC_DEFINE([BUILD_BITQ], [0], [0 if you don't want a bitq interface.])
+fi
+
+AC_DEFINE([BUILD_OPENJTAG], [0], [0 if you don't want the OpenJTAG driver.])
+AC_DEFINE([BUILD_OPENJTAG_FTD2XX], [0], [0 if you don't want the OpenJTAG driver with FTD2XX driver.])
+AC_DEFINE([BUILD_OPENJTAG_LIBFTDI], [0], [0 if you don't want to build OpenJTAG driver with libftdi.])
+
+if test $build_openjtag_ftd2xx = yes; then
+  AC_DEFINE([BUILD_OPENJTAG], [1], [1 if you want the OpenJTAG driver.])
+  AC_DEFINE([BUILD_OPENJTAG_FTD2XX], [1], [1 if you want the OpenJTAG driver with FTD2XX driver.])
+fi
+if test $build_openjtag_ftdi = yes; then
+  AC_DEFINE([BUILD_OPENJTAG], [1], [1 if you want the OpenJTAG drvier.])
+  AC_DEFINE([BUILD_OPENJTAG_LIBFTDI], [1], [1 if you want to build OpenJTAG with FTDI driver.])
+fi
+
+if test $build_oocd_trace = yes; then
+  AC_DEFINE([BUILD_OOCD_TRACE], [1], [1 if you want the OpenOCD+trace ETM capture driver.])
+else
+  AC_DEFINE([BUILD_OOCD_TRACE], [0], [0 if you don't want the OpenOCD+trace ETM capture driver.])
+fi
+
+if test $build_buspirate = yes; then
+  AC_DEFINE([BUILD_BUSPIRATE], [1], [1 if you want the Buspirate JTAG driver.])
+else
+  AC_DEFINE([BUILD_BUSPIRATE], [0], [0 if you don't want the Buspirate JTAG driver.])
+fi
+
+if test $use_internal_jimtcl = yes; then
+  if test -f "$srcdir/jimtcl/configure.ac"; then
+    AX_CONFIG_SUBDIR_OPTION([jimtcl], [--disable-install-jim])
+  else
+    AC_MSG_ERROR([jimtcl not found, run git submodule init and git submodule update.])
+  fi
+fi
+
+if test $use_internal_libjaylink = yes; then
+  if test -f "$srcdir/src/jtag/drivers/libjaylink/configure.ac"; then
+    ( cd $srcdir/src/jtag/drivers/libjaylink/ && ./autogen.sh )
+    AX_CONFIG_SUBDIR_OPTION([src/jtag/drivers/libjaylink],
+		[--enable-subproject-build])
+  else
+    AC_MSG_ERROR([Internal libjaylink not found, run either 'git submodule init' and 'git submodule update' or disable internal libjaylink with --disable-internal-libjaylink.])
+  fi
+else
+  PKG_CHECK_MODULES([libjaylink], [libjaylink >= 0.1],
+	[CFLAGS="$CFLAGS $libjaylink_CFLAGS"; LIBS="$LIBS $libjaylink_LIBS"; HAVE_LIBJAYLINK=yes], [HAVE_LIBJAYLINK=no])
+fi
+
+if test $build_remote_bitbang = yes; then
+  build_bitbang=yes
+  AC_DEFINE([BUILD_REMOTE_BITBANG], [1], [1 if you want the Remote Bitbang JTAG driver.])
+else
+  AC_DEFINE([BUILD_REMOTE_BITBANG], [0], [0 if you don't want the Remote Bitbang JTAG driver.])
+fi
+
+if test $build_sysfsgpio = yes; then
+  build_bitbang=yes
+  AC_DEFINE([BUILD_SYSFSGPIO], [1], [1 if you want the SysfsGPIO driver.])
+else
+  AC_DEFINE([BUILD_SYSFSGPIO], [0], [0 if you don't want SysfsGPIO driver.])
+fi
+#-- Deal with MingW/Cygwin FTD2XX issues
+
+if test $is_win32 = yes; then
+if test "${with_ftd2xx_linux_tardir+set}" = set
+then
+  AC_MSG_ERROR([The option: with_ftd2xx_linux_tardir is for LINUX only.])
+fi
+
+if test $build_ft2232_ftd2xx = yes -o $build_presto_ftd2xx = yes -o $build_usb_blaster_ftd2xx = yes -o $build_openjtag_ftd2xx = yes; then
+  AC_MSG_CHECKING([for ftd2xx.lib exists (win32)])
+
+  # if we are given a zipdir...
+  if test "${with_ftd2xx_win32_zipdir+set}" = set
+  then
+    # Set the CFLAGS for "ftd2xx.h"
+    f=$with_ftd2xx_win32_zipdir/ftd2xx.h
+    if test ! -f $f ; then
+      AC_MSG_ERROR([File: $f cannot be found])
+    fi
+    CFLAGS="$CFLAGS -I$with_ftd2xx_win32_zipdir"
+
+    # And calculate the LDFLAGS for the machine
+    case "$host_cpu" in
+    i?86|x86_32)
+      LDFLAGS="$LDFLAGS -L$with_ftd2xx_win32_zipdir/i386"
+      LIBS="$LIBS -lftd2xx"
+      f=$with_ftd2xx_win32_zipdir/i386/ftd2xx.lib
+      ;;
+    amd64|x86_64)
+      LDFLAGS="$LDFLAGS -L$with_ftd2xx_win32_zipdir/amd64"
+      LIBS="$LIBS -lftd2xx"
+      f=$with_ftd2xx_win32_zipdir/amd64/ftd2xx.lib
+      ;;
+    *)
+      AC_MSG_ERROR([Unknown Win32 host cpu: $host_cpu])
+      ;;
+    esac
+    if test ! -f $f ; then
+         AC_MSG_ERROR([Library: $f not found])
+    fi
+  else
+    LIBS="$LIBS -lftd2xx"
+    AC_MSG_WARN([ASSUMPTION: The (win32) FTDICHIP.COM files: ftd2xx.h and ftd2xx.lib are in a proper place])
+  fi
+fi
+fi # win32
+
+if test $is_darwin = yes ; then
+if test "${with_ftd2xx_win32_zipdir+set}" = set
+then
+   AC_MSG_ERROR([The option: --with-ftd2xx-win32-zipdir is for win32 only])
+fi
+if test "${with_ftd2xx_linux_tardir+set}" = set
+then
+   AC_MSG_ERROR([The option: with_ftd2xx_linux_tardir is for LINUX only.])
+fi
+
+if test $build_ft2232_ftd2xx = yes -o $build_presto_ftd2xx = yes -o $build_usb_blaster_ftd2xx = yes ; then
+   AC_MSG_CHECKING([for libftd2xx.a (darwin)])
+
+   if test ! -f /usr/local/include/ftd2xx.h ; then
+      AC_MSG_ERROR([ftd2xx library from FTDICHIP.com seems to be missing, cannot find: /usr/local/include/ftd2xx.h])
+   fi
+
+   CFLAGS="$CFLAGS -I/usr/local/include"
+   LDFLAGS="$LDFLAGS -L/usr/local/lib"
+   LIBS="$LIBS -lftd2xx"
+   AC_MSG_RESULT([-L/usr/local/lib -lftd2xx])
+fi
+fi # darwin
+
+if test $is_win32 = no && test $is_darwin = no ; then
+
+if test "${with_ftd2xx_win32_zipdir+set}" = set
+then
+   AC_MSG_ERROR([The option: --with-ftd2xx-win32-zipdir is for win32 only])
+fi
+
+if test $build_ft2232_ftd2xx = yes -o $build_presto_ftd2xx = yes -o $build_usb_blaster_ftd2xx = yes -o $build_openjtag_ftd2xx = yes; then
+   # Must be linux
+   if test $host_os != linux-gnu && test $host_os != linux ; then
+      AC_MSG_ERROR([The (linux) ftd2xx library from FTDICHIP.com is linux only. Try --enable-ft2232-libftdi instead])
+  fi
+  # Are we given a TAR directory?
+  if test "${with_ftd2xx_linux_tardir+set}" = set
+  then
+    AC_MSG_CHECKING([uninstalled ftd2xx distribution])
+    # The .H file is simple..
+    FTD2XX_H=$with_ftd2xx_linux_tardir/ftd2xx.h
+    if test ! -f "${FTD2XX_H}"; then
+    AC_MSG_ERROR([Option: --with-ftd2xx-linux-tardir appears wrong, cannot find: ${FTD2XX_H}])
+    fi
+    CFLAGS="$CFLAGS -I$with_ftd2xx_linux_tardir"
+    if test $with_ftd2xx_lib = shared; then
+       FTD2XX_LDFLAGS="-L$with_ftd2xx_linux_tardir"
+       FTD2XX_LIB="-lftd2xx"
+    else
+      # Test #1 - v1.0.x
+      case "$host_cpu" in
+      i?86|x86_32)
+              dir=build/i386;;
+      amd64|x86_64)
+              dir=build/x86_64;;
+      *)
+              dir=none;;
+      esac
+      if test -f "$with_ftd2xx_linux_tardir/$dir/libftd2xx.a"; then
+          FTD2XX_LDFLAGS="-L$with_ftd2xx_linux_tardir/$dir"
+          # Also needs -lrt
+          FTD2XX_LIB="-lftd2xx -lrt"
+      else
+        # Test Number2.
+        # Grr.. perhaps it exists as a version number?
+        FTD2XX_LIB="$with_ftd2xx_linux_tardir/static_lib/libftd2xx.a.*.*.*"
+        count=`ls ${FTD2XX_LIB} | wc -l`
+        if test $count -gt 1 ; then
+          AC_MSG_ERROR([Multiple libftd2xx.a files found in: $with_ftd2xx_linux_tardir/static_lib sorry cannot handle this yet])
+        fi
+        if test $count -ne 1 ; then
+          AC_MSG_ERROR([Not found: $f, option: --with-ftd2xx-linux-tardir appears to be wrong])
+        fi
+        # Because the "-l" rules do not understand version numbers...
+        # we will just stuff the absolute path onto the LIBS variable
+        FTD2XX_LIB="`ls ${FTD2XX_LIB}` -lpthread"
+        FTD2XX_LDFLAGS=""
+      fi
+    fi
+    LDFLAGS="${LDFLAGS} ${FTD2XX_LDFLAGS}"
+    LIBS="${FTD2XX_LIB} ${LIBS}"
+    AC_MSG_RESULT([${FTD2XX_LDFLAGS} ${FTD2XX_LIB}])
+  else
+    AC_CHECK_HEADER([ftd2xx.h],[],[
+        AC_MSG_ERROR([You seem to be missing the FTD2xx driver header file.])
+      ])
+    AC_SEARCH_LIBS([FT_GetLibraryVersion],[ftd2xx],,[
+        AC_MSG_ERROR([You appear to be missing the FTD2xx driver library.])
+      ],[-lrt -lusb-1.0])
+  fi
+fi
+fi # linux
+
+if test $build_ft2232_ftd2xx = yes -o $build_presto_ftd2xx = yes -o $build_usb_blaster_ftd2xx = yes ; then
+
+# Before we go any further - make sure we can *BUILD* and *RUN*
+# a simple app with the "ftd2xx.lib" file - in what ever form we where given
+# We should be able to compile, link and run this test program now
+AC_MSG_CHECKING([whether ftd2xx library works])
+
+#
+# Save the LDFLAGS for later..
+LDFLAGS_SAVE=$LDFLAGS
+CFLAGS_SAVE=$CFLAGS
+_LDFLAGS=`eval echo $LDFLAGS`
+_CFLAGS=`eval echo $CFLAGS`
+LDFLAGS=$_LDFLAGS
+CFLAGS=$_CFLAGS
+
+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include "confdefs.h"
+#if IS_WIN32
+#include "windows.h"
+#endif
+#include <stdio.h>
+#include <ftd2xx.h>
+  ]], [[
+  DWORD x;
+  FT_GetLibraryVersion( &x );
+  ]])], [
+    AC_MSG_RESULT([Success!])
+  ], [
+    AC_MSG_ERROR([Cannot build & run test program using ftd2xx.lib])
+  ], [
+    AC_MSG_RESULT([Skipping as we are cross-compiling])
+  ])
+
+AC_MSG_CHECKING([for ftd2xx highspeed device support])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include "confdefs.h"
+#if IS_WIN32
+#include "windows.h"
+#endif
+#include <stdio.h>
+#include <ftd2xx.h>
+
+DWORD x = FT_DEVICE_4232H;
+    ]], [])], [
+      AC_DEFINE([BUILD_FT2232_HIGHSPEED], [1],
+        [Support FT2232H/FT4232HS with FTD2XX or libftdi.])
+      build_ft2232_highspeed=yes
+    ], [
+      build_ft2232_highspeed=no
+    ])
+  AC_MSG_RESULT([$build_ft2232_highspeed])
+
+  if test $build_ft2232_highspeed = no; then
+    AC_MSG_WARN([You need a newer FTD2XX driver (version 2.04.16 or later).])
+  fi
+
+AC_MSG_CHECKING([for ftd2xx FT232H device support])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include "confdefs.h"
+#if IS_WIN32
+#include "windows.h"
+#endif
+#include <stdio.h>
+#include <ftd2xx.h>
+
+DWORD x = FT_DEVICE_232H;
+    ]], [])], [
+      AC_DEFINE([HAS_ENUM_FT232H], [1],
+        [Support FT232H with FTD2XX or libftdi.])
+      has_enum_ft232h=yes
+    ], [
+      has_enum_ft232h=no
+    ])
+  AC_MSG_RESULT([$has_enum_ft232h])
+
+  if test $has_enum_ft232h = no; then
+    AC_MSG_WARN([You need a newer FTD2XX driver (version 2.08.12 or later).])
+  fi
+
+LDFLAGS=$LDFLAGS_SAVE
+CFLAGS=$CFLAGS_SAVE
+fi
+
+if test $build_ft2232_libftdi = yes -o $build_usb_blaster_libftdi = yes -o \
+  $build_openjtag_ftdi = yes -o $build_presto_libftdi = yes; then
+
+  # we can have libftdi or libftdi1, so check it and use the latest one
+  PKG_CHECK_MODULES([LIBFTDI], [libftdi1], [use_libftdi=yes], [use_libftdi=no])
+  if test $use_libftdi = no; then
+	PKG_CHECK_MODULES([LIBFTDI], [libftdi], [use_libftdi=yes], [use_libftdi=no])
+  fi
+  if test $use_libftdi = no; then
+	AC_MSG_ERROR([The libftdi driver is not present on your system.])
+  fi
+
+  #
+  # Try to build a small program.
+  AC_MSG_CHECKING([Build & Link with libftdi...])
+
+  LDFLAGS_SAVE=$LDFLAGS
+  CFLAGS_SAVE=$CFLAGS
+  LIBS_SAVE=$LIBS
+  _LDFLAGS=`eval echo $LDFLAGS`
+  _CFLAGS=`eval echo $CFLAGS`
+  _LIBS=`eval echo $LIBS`
+  LDFLAGS=$_LDFLAGS
+  CFLAGS="$_CFLAGS $LIBFTDI_CFLAGS"
+  LIBS="$_LIBS $LIBFTDI_LIBS"
+
+  AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <stdio.h>
+#include <ftdi.h>
+  ]], [[
+  struct ftdi_context *p;
+  p = ftdi_new();
+  if( p != NULL ){
+      return 0;
+  } else {
+      fprintf( stderr, "calling ftdi_new() failed\n");
+      return 1;
+        }
+    ]])], [
+      AC_MSG_RESULT([Success])
+    ], [
+      AC_MSG_ERROR([Cannot build & run test program using libftdi])
+    ], [
+      AC_MSG_RESULT([Skipping as we are cross-compiling, trying build only])
+      AC_SEARCH_LIBS([ftdi_new], [], [], [AC_MSG_ERROR([Cannot link with libftdi])])
+    ])
+
+AC_MSG_CHECKING([for libftdi highspeed device support])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <stdio.h>
+#include <ftdi.h>
+  ]], [[
+enum ftdi_chip_type x = TYPE_2232H;
+    ]])], [
+      AC_DEFINE([BUILD_FT2232_HIGHSPEED], [1],
+        [Support FT2232H/FT4232HS with FTD2XX or libftdi.])
+      build_ft2232_highspeed=yes
+    ], [
+      build_ft2232_highspeed=no
+    ])
+    AC_MSG_RESULT([$build_ft2232_highspeed])
+
+    if test $build_ft2232_highspeed = no; then
+      AC_MSG_WARN([You need a newer libftdi version (0.16 or later).])
+    fi
+
+AC_MSG_CHECKING([for libftdi FT232H device support])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <stdio.h>
+#include <ftdi.h>
+  ]], [[
+enum ftdi_chip_type x = TYPE_232H;
+    ]])], [
+      AC_DEFINE([HAS_ENUM_FT232H], [1],
+        [Support FT232H with FTD2XX or libftdi.])
+      has_enum_ft232h=yes
+    ], [
+      has_enum_ft232h=no
+    ])
+    AC_MSG_RESULT([$has_enum_ft232h])
+
+    if test $has_enum_ft232h = no; then
+      AC_MSG_WARN([You need a newer libftdi version (0.20 or later).])
+    fi
+
+  # Restore the 'unexpanded ldflags'
+  LDFLAGS=$LDFLAGS_SAVE
+  CFLAGS=$CFLAGS_SAVE
+  LIBS=$LIBS_SAVE
+fi
+
+PKG_CHECK_MODULES([LIBUSB1], [libusb-1.0], [
+	use_libusb1=yes
+	AC_DEFINE([HAVE_LIBUSB1], [1], [Define if you have libusb-1.x])
+	PKG_CHECK_EXISTS([libusb-1.0 >= 1.0.9],
+		[AC_DEFINE([HAVE_LIBUSB_ERROR_NAME], [1], [Define if your libusb has libusb_error_name()])],
+		[AC_MSG_WARN([libusb-1.x older than 1.0.9 detected, consider updating])])
+	LIBUSB1_CFLAGS=`echo $LIBUSB1_CFLAGS | sed 's/-I/-isystem /'`
+	AC_MSG_NOTICE([libusb-1.0 header bug workaround: LIBUSB1_CFLAGS changed to "$LIBUSB1_CFLAGS"])
+	PKG_CHECK_EXISTS([libusb-1.0 >= 1.0.16],
+		[AC_DEFINE([HAVE_LIBUSB_GET_PORT_NUMBERS], [1], [Define if your libusb has libusb_get_port_numbers()])])
+  ], [
+	use_libusb1=no
+	AC_MSG_WARN([libusb-1.x not found, trying legacy libusb-0.1 as a fallback; consider installing libusb-1.x instead])
+])
+
+PKG_CHECK_MODULES([LIBUSB0], [libusb], [use_libusb0=yes], [use_libusb0=no])
+
+for hidapi_lib in hidapi hidapi-hidraw hidapi-libusb; do
+	PKG_CHECK_MODULES([HIDAPI],[$hidapi_lib],[
+		use_hidapi=yes
+		break
+	],[
+		use_hidapi=no
+	])
+done
+
+m4_define([PROCESS_ADAPTERS], [
+  m4_foreach([adapter], [$1], [
+	if test $2; then
+		if test $ADAPTER_VAR([adapter]) != no; then
+			AC_DEFINE([BUILD_]ADAPTER_SYM([adapter]), [1], [1 if you want the ]ADAPTER_DESC([adapter]).)
+		else
+			AC_DEFINE([BUILD_]ADAPTER_SYM([adapter]), [0], [0 if you do not want the ]ADAPTER_DESC([adapter]).)
+		fi
+	else
+		if test $ADAPTER_VAR([adapter]) = yes; then
+			AC_MSG_ERROR([$3 is required for the ADAPTER_DESC([adapter])])
+		fi
+		ADAPTER_VAR([adapter])=no
+	fi
+	AM_CONDITIONAL(ADAPTER_SYM([adapter]), [test $ADAPTER_VAR([adapter]) != no])
+  ])
+])
+
+PROCESS_ADAPTERS([USB1_ADAPTERS], [$use_libusb1 = yes], [libusb-1.x])
+PROCESS_ADAPTERS([USB_ADAPTERS], [$use_libusb1 = yes -o $use_libusb0 = yes], [libusb-1.x or libusb-0.1])
+PROCESS_ADAPTERS([USB0_ADAPTERS], [$use_libusb0 = yes], [libusb-0.1])
+PROCESS_ADAPTERS([HIDAPI_ADAPTERS], [$use_hidapi = yes], [hidapi])
+
+if test $enable_stlink != no -o $enable_ti_icdi != no; then
+	AC_DEFINE([BUILD_HLADAPTER], [1], [1 if you want the High Level JTAG driver.])
+else
+	AC_DEFINE([BUILD_HLADAPTER], [0], [0 if you want the High Level JTAG driver.])
+fi
+AM_CONDITIONAL([HLADAPTER], [test $enable_stlink != no -o $enable_ti_icdi != no])
+
+# Disable J-Link driver if internal libjaylink is disabled and libjaylink was
+# not found by pkg-config.
+if test $enable_jlink != no; then
+  if test $use_internal_libjaylink$HAVE_LIBJAYLINK = nono; then
+      enable_jlink=no
+  fi
+fi
+
+AM_CONDITIONAL([RELEASE], [test $build_release = yes])
+AM_CONDITIONAL([PARPORT], [test $build_parport = yes])
+AM_CONDITIONAL([DUMMY], [test $build_dummy = yes])
+AM_CONDITIONAL([GIVEIO], [test x$parport_use_giveio = xyes])
+AM_CONDITIONAL([EP93XX], [test $build_ep93xx = yes])
+AM_CONDITIONAL([ZY1000], [test $build_zy1000 = yes])
+AM_CONDITIONAL([ZY1000_MASTER], [test $build_zy1000_master = yes])
+AM_CONDITIONAL([IOUTIL], [test $build_ioutil = yes])
+AM_CONDITIONAL([AT91RM9200], [test $build_at91rm9200 = yes])
+AM_CONDITIONAL([BCM2835GPIO], [test $build_bcm2835gpio = yes])
+AM_CONDITIONAL([BITBANG], [test $build_bitbang = yes])
+AM_CONDITIONAL([FT2232_LIBFTDI], [test $build_ft2232_libftdi = yes])
+AM_CONDITIONAL([FT2232_DRIVER], [test $build_ft2232_ftd2xx = yes -o $build_ft2232_libftdi = yes])
+AM_CONDITIONAL([USB_BLASTER_LIBFTDI], [test $build_usb_blaster_libftdi = yes])
+AM_CONDITIONAL([USB_BLASTER_FTD2XX], [test $build_usb_blaster_ftd2xx = yes])
+AM_CONDITIONAL([JTAG_VPI], [test $build_jtag_vpi = yes -o $build_jtag_vpi = yes])
+AM_CONDITIONAL([USB_BLASTER_DRIVER], [test $build_usb_blaster_ftd2xx = yes -o $build_usb_blaster_libftdi = yes -o $enable_usb_blaster_2 != no])
+AM_CONDITIONAL([AMTJTAGACCEL], [test $build_amtjtagaccel = yes])
+AM_CONDITIONAL([GW16012], [test $build_gw16012 = yes])
+AM_CONDITIONAL([PRESTO_LIBFTDI], [test $build_presto_libftdi = yes])
+AM_CONDITIONAL([PRESTO_DRIVER], [test $build_presto_ftd2xx = yes -o $build_presto_libftdi = yes])
+AM_CONDITIONAL([OPENJTAG], [test $build_openjtag_ftd2xx = yes -o $build_openjtag_ftdi = yes])
+AM_CONDITIONAL([OOCD_TRACE], [test $build_oocd_trace = yes])
+AM_CONDITIONAL([REMOTE_BITBANG], [test $build_remote_bitbang = yes])
+AM_CONDITIONAL([BUSPIRATE], [test $build_buspirate = yes])
+AM_CONDITIONAL([SYSFSGPIO], [test $build_sysfsgpio = yes])
+AM_CONDITIONAL([USE_LIBUSB0], [test $use_libusb0 = yes])
+AM_CONDITIONAL([USE_LIBUSB1], [test $use_libusb1 = yes])
+AM_CONDITIONAL([IS_CYGWIN], [test $is_cygwin = yes])
+AM_CONDITIONAL([IS_MINGW], [test $is_mingw = yes])
+AM_CONDITIONAL([IS_WIN32], [test $is_win32 = yes])
+AM_CONDITIONAL([IS_DARWIN], [test $is_darwin = yes])
+AM_CONDITIONAL([BITQ], [test $build_bitq = yes])
+AM_CONDITIONAL([CMSIS_DAP], [test $use_hidapi = yes])
+
+AM_CONDITIONAL([MINIDRIVER], [test $build_minidriver = yes])
+AM_CONDITIONAL([MINIDRIVER_DUMMY], [test $build_minidriver_dummy = yes])
+
+AM_CONDITIONAL([INTERNAL_JIMTCL], [test $use_internal_jimtcl = yes])
+AM_CONDITIONAL([INTERNAL_LIBJAYLINK], [test $use_internal_libjaylink = yes])
+
+# Look for environ alternatives.  Possibility #1: is environ in unistd.h or stdlib.h?
+AC_MSG_CHECKING([for environ in unistd.h and stdlib.h])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <stdlib.h>
+  ]], [[char **ep = environ;]]
+  )], [
+    AC_MSG_RESULT([yes])
+    has_environ=yes
+  ], [
+    AC_MSG_RESULT([no])
+
+    # Possibility #2: can environ be found in an available library?
+    AC_MSG_CHECKING([for extern environ])
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+    extern char **environ;
+    ]], [[char **ep = environ;]]
+      )], [
+        AC_DEFINE(NEED_ENVIRON_EXTERN, [1], [Must declare 'environ' to use it.])
+        has_environ=yes
+      ], [
+        has_environ=no
+      ])
+    AC_MSG_RESULT([${has_environ}])
+  ])
+
+if test "${has_environ}" != "yes" ; then
+  AC_MSG_FAILURE([Could not find 'environ' in unistd.h or available libraries.])
+fi
+
+AC_DEFINE([_GNU_SOURCE],[1],[Use GNU C library extensions (e.g. stdndup).])
+
+# set default gcc warnings
+GCC_WARNINGS="-Wall -Wstrict-prototypes -Wformat-security -Wshadow"
+if test "${gcc_wextra}" = yes; then
+  GCC_WARNINGS="${GCC_WARNINGS} -Wextra -Wno-unused-parameter"
+  GCC_WARNINGS="${GCC_WARNINGS} -Wbad-function-cast"
+  GCC_WARNINGS="${GCC_WARNINGS} -Wcast-align"
+  GCC_WARNINGS="${GCC_WARNINGS} -Wredundant-decls"
+fi
+if test "${gcc_werror}" = yes; then
+  GCC_WARNINGS="${GCC_WARNINGS} -Werror"
+fi
+
+# overide default gcc cflags
+if test $gcc_warnings = yes; then
+  CFLAGS="$CFLAGS $GCC_WARNINGS"
+fi
+
+AC_CONFIG_FILES([
+  Makefile
+  src/Makefile
+  src/helper/Makefile
+  src/jtag/Makefile
+  src/jtag/drivers/Makefile
+  src/jtag/drivers/usb_blaster/Makefile
+  src/jtag/hla/Makefile
+  src/jtag/aice/Makefile
+  src/transport/Makefile
+  src/target/openrisc/Makefile
+  src/xsvf/Makefile
+  src/svf/Makefile
+  src/target/Makefile
+  src/rtos/Makefile
+  src/server/Makefile
+  src/flash/Makefile
+  src/flash/nor/Makefile
+  src/flash/nand/Makefile
+  src/pld/Makefile
+  doc/Makefile
+])
+AC_OUTPUT
+
+echo
+echo
+echo OpenOCD configuration summary
+echo --------------------------------------------------
+m4_foreach([adapter], [USB1_ADAPTERS, USB_ADAPTERS, USB0_ADAPTERS, HIDAPI_ADAPTERS],
+	[s=m4_format(["%-40s"], ADAPTER_DESC([adapter]))
+	case $ADAPTER_VAR([adapter]) in
+		auto)
+			echo "$s"yes '(auto)'
+			;;
+		yes)
+			echo "$s"yes
+			;;
+		no)
+			echo "$s"no
+			;;
+	esac
+])
+echo
+
+if test $build_ft2232_libftdi = yes -o $build_ft2232_ftd2xx = yes; then
+	if test $enable_ftdi = no; then
+		AC_MSG_WARN([Building the deprecated 'ft2232' adapter driver but not its replacement!])
+		AC_MSG_WARN([Please consider using --enable-ftdi instead.])
+	else
+		AC_MSG_WARN([Building the deprecated 'ft2232' adapter driver.])
+	fi
+fi

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/99-openocd.rules
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/99-openocd.rules b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/99-openocd.rules
new file mode 100755
index 0000000..057c4b7
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/99-openocd.rules
@@ -0,0 +1,134 @@
+# Copy this file to /etc/udev/rules.d/
+
+ACTION!="add|change", GOTO="openocd_rules_end"
+SUBSYSTEM!="usb|tty|hidraw", GOTO="openocd_rules_end"
+
+# Please keep this list sorted by VID:PID
+
+# opendous and estick
+ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204f", MODE="664", GROUP="plugdev"
+
+# Original FT232/FT245 VID:PID
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="664", GROUP="plugdev"
+
+# Original FT2232 VID:PID
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="664", GROUP="plugdev"
+
+# Original FT4232 VID:PID
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", MODE="664", GROUP="plugdev"
+
+# Original FT232H VID:PID
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE="664", GROUP="plugdev"
+
+# DISTORTEC JTAG-lock-pick Tiny 2
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8220", MODE="664", GROUP="plugdev"
+
+# TUMPA, TUMPA Lite
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a98", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a99", MODE="664", GROUP="plugdev"
+
+# XDS100v2
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="a6d0", MODE="664", GROUP="plugdev"
+
+# Xverve Signalyzer Tool (DT-USB-ST), Signalyzer LITE (DT-USB-SLITE)
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca0", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca1", MODE="664", GROUP="plugdev"
+
+# TI/Luminary Stellaris Evaluation Board FTDI (several)
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcd9", MODE="664", GROUP="plugdev"
+
+# TI/Luminary Stellaris In-Circuit Debug Interface FTDI (ICDI) Board
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcda", MODE="664", GROUP="plugdev"
+
+# egnite Turtelizer 2
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bdc8", MODE="664", GROUP="plugdev"
+
+# Section5 ICEbear
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c140", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c141", MODE="664", GROUP="plugdev"
+
+# Amontec JTAGkey and JTAGkey-tiny
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", MODE="664", GROUP="plugdev"
+
+# TI ICDI
+ATTRS{idVendor}=="0451", ATTRS{idProduct}=="c32a", MODE="664", GROUP="plugdev"
+
+# STLink v1
+ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", MODE="664", GROUP="plugdev"
+
+# STLink v2
+ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="664", GROUP="plugdev"
+
+# STLink v2-1
+ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="664", GROUP="plugdev"
+
+# Hilscher NXHX Boards
+ATTRS{idVendor}=="0640", ATTRS{idProduct}=="0028", MODE="664", GROUP="plugdev"
+
+# Hitex STR9-comStick
+ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002c", MODE="664", GROUP="plugdev"
+
+# Hitex STM32-PerformanceStick
+ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002d", MODE="664", GROUP="plugdev"
+
+# Altera USB Blaster
+ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="664", GROUP="plugdev"
+
+# Amontec JTAGkey-HiSpeed
+ATTRS{idVendor}=="0fbb", ATTRS{idProduct}=="1000", MODE="664", GROUP="plugdev"
+
+# SEGGER J-Link
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0102", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0103", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0104", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0105", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0107", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0108", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1010", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1011", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1012", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1013", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1014", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1016", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1017", MODE="664", GROUP="plugdev"
+ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1018", MODE="664", GROUP="plugdev"
+
+# Raisonance RLink
+ATTRS{idVendor}=="138e", ATTRS{idProduct}=="9000", MODE="664", GROUP="plugdev"
+
+# Debug Board for Neo1973
+ATTRS{idVendor}=="1457", ATTRS{idProduct}=="5118", MODE="664", GROUP="plugdev"
+
+# Olimex ARM-USB-OCD
+ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0003", MODE="664", GROUP="plugdev"
+
+# Olimex ARM-USB-OCD-TINY
+ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0004", MODE="664", GROUP="plugdev"
+
+# Olimex ARM-JTAG-EW
+ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="001e", MODE="664", GROUP="plugdev"
+
+# Olimex ARM-USB-OCD-TINY-H
+ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="664", GROUP="plugdev"
+
+# Olimex ARM-USB-OCD-H
+ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002b", MODE="664", GROUP="plugdev"
+
+# USBprog with OpenOCD firmware
+ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c63", MODE="664", GROUP="plugdev"
+
+# TI/Luminary Stellaris In-Circuit Debug Interface (ICDI) Board
+ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="664", GROUP="plugdev"
+
+# Marvell Sheevaplug
+ATTRS{idVendor}=="9e88", ATTRS{idProduct}=="9e8f", MODE="664", GROUP="plugdev"
+
+# Keil Software, Inc. ULink
+ATTRS{idVendor}=="c251", ATTRS{idProduct}=="2710", MODE="664", GROUP="plugdev"
+
+# CMSIS-DAP compatible adapters
+ATTRS{product}=="*CMSIS-DAP*", MODE="664", GROUP="plugdev"
+
+LABEL="openocd_rules_end"

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/coresight-trace.txt
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/coresight-trace.txt b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/coresight-trace.txt
new file mode 100755
index 0000000..c093c20
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/coresight-trace.txt
@@ -0,0 +1,68 @@
++OpenOCD and CoreSight Tracing
++
+Many recent ARM chips  (Using e..g. Cortex-M3 and
+Cortex-M4 cores) support CoreSight debug/trace.
+This note sketches an approach currently planned for those cores
+with OpenOCD.
+
+ This tracing data can help debug and tune ARM software, but not
+all cores support tracing.  Some support more extensive tracing
+other cores with trace support +should be able to use the same
+approach and maybe some of the same analysis code.
+
++the Cortex-M3 is assumed here to be the
++core in use, for simplicity and to reflect current OpenOCD users.
+
+
+This note summarizes a software model to generate, collect, and
+analyze such trace data .  That is not fully implemented as of early
+January 2011, +and thus is not *yet* usable.
++
++
++Some microcontroller cores support a low pin-count Single-wire trace,
+with a mode where +trace data is emitted (usually to a UART.  To use
+this mode, +SWD must be in use.
++At this writing, OpenOCD SWD support is not yet complete either.
+
+(There are also multi-wire trace ports requiring more complex debug
+adapters than OpenOCD currently supports, and offering richer data.
++
++
++* ENABLING involves activating  SWD and (single wire) trace.
++
++current expectations are that OpenOCD itself will handle enabling;
+activating single wire trace involves a debug adapter interaction, and
+collecting that trace data requires particular (re)wiring.
++
++* CONFIGURATION involves setting up ITM  and/or ETM modules to emit the
++desired data from the Cortex core.  (This might include dumping
++event counters printf-style messages; code profiling; and more.  Not all
++cores offer the same trace capabilities.
++
++current expectations are that Tcl scripts will be used to configure these
++modules for the desired tracing, by direct writes to registers.  In some
++cases (as with RTOS event tracking and similar messaging, this might
++be  augmented or replaced by user code running on the ARM core.
++
++COLLECTION involves reading that trace data, probably through UART, and
++saving it in a useful format to analyse  For now, deferred analysis modes
+are assumed, not than real-time or interactive ones.
++
++
++current expectations are to to dump data in text using contrib/itmdump.c
++or derived tools, and to post-process it into reports.  Such reports might
++include program messaging (such as application data streams via ITM, maybe
++using printf type messaging; code coverage analysis or so forth.  Recent
++versions of CMSIS software reserve some ITM codespace for RTOS  event
+tracing and include ITM messaging support.
+Clearly some of that data would be valuable for interactive debugging.
++
++Should someone get ambitious, GUI reports should be possible.  GNU tools
++for simpler reports like gprof may be simpler to support at first.
++In any case, OpenOCD is not currently GUI-oriented.  Accordingly, we now
++expect any such graphics to come from postprocessing.
+
+ measurments for RTOS event timings should also be easy to collect.
++Examples include context and message switch times, as well as times
+for application interactions.
++

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/cross-build.sh
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/cross-build.sh b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/cross-build.sh
new file mode 100755
index 0000000..74ab0f4
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/cross-build.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+# This is an example of how to do a cross-build of OpenOCD using pkg-config.
+# Cross-building with pkg-config is deceptively hard and most guides and
+# tutorials are incomplete or give bad advice. Some of the traps that are easy
+# to fall in but handled by this script are:
+#
+#  * Polluting search paths and flags with values from the build system.
+#  * Faulty pkg-config wrappers shipped with distribution packaged cross-
+#    toolchains.
+#  * Build failing because pkg-config discards some paths even though they are
+#    correctly listed in the .pc file.
+#  * Getting successfully built binaries that cannot find runtime data because
+#    paths refer to the build file system.
+#
+# This script is probably more useful as a reference than as a complete build
+# tool but for some configurations it may be usable as-is. It only cross-
+# builds libusb-1.0 from source, but the script can be extended to build other
+# prerequisities in a similar manner.
+#
+# Usage:
+# export LIBUSB1_SRC=/path/to/libusb-1.0
+# export HIDAPI_SRC=/path/to/hidapi
+# export OPENOCD_CONFIG="--enable-..."
+# cd /work/dir
+# /path/to/openocd/contrib/cross-build.sh <host-triplet>
+#
+# For static linking, a workaround is to
+# export LIBUSB1_CONFIG="--enable-static --disable-shared"
+#
+# All the paths must not contain any spaces.
+
+set -e -x
+
+WORK_DIR=$PWD
+
+## Source code paths, customize as necessary
+: ${OPENOCD_SRC:="`dirname "$0"`/.."}
+: ${LIBUSB1_SRC:=/path/to/libusb}
+: ${HIDAPI_SRC:=/path/to/hidapi}
+
+OPENOCD_SRC=`readlink -m $OPENOCD_SRC`
+LIBUSB1_SRC=`readlink -m $LIBUSB1_SRC`
+HIDAPI_SRC=`readlink -m $HIDAPI_SRC`
+
+HOST_TRIPLET=$1
+BUILD_DIR=$WORK_DIR/$HOST_TRIPLET-build
+LIBUSB1_BUILD_DIR=$BUILD_DIR/libusb1
+HIDAPI_BUILD_DIR=$BUILD_DIR/hidapi
+OPENOCD_BUILD_DIR=$BUILD_DIR/openocd
+
+## Root of host file tree
+SYSROOT=$WORK_DIR/$HOST_TRIPLET-root
+
+## Install location within host file tree
+: ${PREFIX=/usr}
+
+## OpenOCD-only install dir for packaging
+PACKAGE_DIR=$WORK_DIR/openocd_`git --git-dir=$OPENOCD_SRC/.git describe`_$HOST_TRIPLET
+
+#######
+
+# Create pkg-config wrapper and make sure it's used
+export PKG_CONFIG=$WORK_DIR/$HOST_TRIPLET-pkg-config
+
+cat > $PKG_CONFIG <<EOF
+#!/bin/sh
+
+SYSROOT=$SYSROOT
+
+export PKG_CONFIG_DIR=
+export PKG_CONFIG_LIBDIR=\${SYSROOT}$PREFIX/lib/pkgconfig:\${SYSROOT}$PREFIX/share/pkgconfig
+export PKG_CONFIG_SYSROOT_DIR=\${SYSROOT}
+
+# The following have to be set to avoid pkg-config to strip /usr/include and /usr/lib from paths
+# before they are prepended with the sysroot path. Feels like a pkg-config bug.
+export PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=
+export PKG_CONFIG_ALLOW_SYSTEM_LIBS=
+
+exec pkg-config "\$@"
+EOF
+chmod +x $PKG_CONFIG
+
+# Clear out work dir
+rm -rf $SYSROOT $BUILD_DIR
+mkdir -p $SYSROOT
+
+# libusb-1.0 build & install into sysroot
+mkdir -p $LIBUSB1_BUILD_DIR
+cd $LIBUSB1_BUILD_DIR
+$LIBUSB1_SRC/configure --build=`$LIBUSB1_SRC/config.guess` --host=$HOST_TRIPLET \
+--with-sysroot=$SYSROOT --prefix=$PREFIX \
+$LIBUSB1_CONFIG
+make
+make install DESTDIR=$SYSROOT
+
+# hidapi build & install into sysroot
+if [ -d $HIDAPI_SRC ] ; then
+  mkdir -p $HIDAPI_BUILD_DIR
+  cd $HIDAPI_BUILD_DIR
+  $HIDAPI_SRC/configure --build=`$HIDAPI_SRC/config.guess` --host=$HOST_TRIPLET \
+    --with-sysroot=$SYSROOT --prefix=$PREFIX \
+    $HIDAPI_CONFIG
+  make
+  make install DESTDIR=$SYSROOT
+fi
+
+# OpenOCD build & install into sysroot
+mkdir -p $OPENOCD_BUILD_DIR
+cd $OPENOCD_BUILD_DIR
+$OPENOCD_SRC/configure --build=`$OPENOCD_SRC/config.guess` --host=$HOST_TRIPLET \
+--with-sysroot=$SYSROOT --prefix=$PREFIX \
+$OPENOCD_CONFIG
+make
+make install DESTDIR=$SYSROOT
+
+# Separate OpenOCD install w/o dependencies. OpenOCD will have to be linked
+# statically or have dependencies packaged/installed separately.
+make install DESTDIR=$PACKAGE_DIR

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-site/blob/e302582d/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/gen-stellaris-part-header.pl
----------------------------------------------------------------------
diff --git a/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/gen-stellaris-part-header.pl b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/gen-stellaris-part-header.pl
new file mode 100755
index 0000000..68f2889
--- /dev/null
+++ b/docs/os/tutorials/downloads/openocd-code-89bf96ffe6ac66c80407af8383b9d5adc0dc35f4/contrib/gen-stellaris-part-header.pl
@@ -0,0 +1,124 @@
+#!/usr/bin/perl
+# Automatically generates the StellarisParts struct in src/flash/nor/stellaris.c
+# Uses the header files from TI/Luminary's StellarisWare complete Firmware Development Package
+# available from: http://www.luminarymicro.com/products/software_updates.html
+
+$comment = "// Autogenerated by contrib/gen-stellaris-part-header.pl
+// From Stellaris Firmware Development Package revision";
+
+$struct_header = "static const struct {
+	uint8_t class;
+	uint8_t partno;
+	const char *partname;
+} StellarisParts[] = {
+";
+
+$struct_footer = "\t{0xFF, 0x00, \"Unknown Part\"}\n};\n";
+
+$#ARGV == 1 || die "Usage: $0 <inc directory> <output file>\n";
+-d $ARGV[0] || die $ARGV[0]." is not a directory\n";
+$dir = $ARGV[0];
+-f $ARGV[1] || die $ARGV[1]." is not a file\n";
+$file = $ARGV[1];
+print STDERR "Scanning $dir, Updating $file\n";
+
+opendir(DIR, $dir) || die "can't open $dir: $!";
+@files = readdir(DIR);
+closedir(DIR);
+
+@header_files = sort(grep(/lm.+\.h/, @files));
+
+$ver = 0;
+$new_struct = $struct_header;
+process_file(@header_files);
+$new_struct .= $struct_footer;
+
+$dump = "$comment $ver\n$new_struct";
+{
+	local($/, *INPUT);
+	open(INPUT, $file) || die "can't open $file: $!";
+	$contents = <INPUT>;
+	close(INPUT);
+}
+
+$old_struct = qr/((^\/\/.*?\n)*)\Q$struct_header\E.*?$struct_footer/sm;
+$contents =~ s/$old_struct/$dump/;
+open(OUTPUT, ">$file") || die "can't open file $file for writing: $!";
+print OUTPUT $contents;
+close(OUTPUT);
+
+sub process_file {
+	foreach $h_file (@_) {
+		($base) = ($h_file =~ m/lm..(.{3,7})\.h/ig);
+		$base = uc($base);
+		local($/, *FILE);
+		open(FILE, "$dir/$h_file");
+		$content = <FILE>;
+		close(FILE);
+		$invalid = 0;
+		if ($content =~ /This is part of revision (\d+) of/) {
+			if ($ver != 0 and $ver != $1) {
+				print STDERR "File version mismatch: $ver != $1\n";
+				$ver = max($ver, $1);
+			} else {
+				$ver = $1;
+			}
+		}
+
+		if ($content =~ /SYSCTL_DID0_CLASS_[^M].+?0x(\S+)/s) {
+			$class = hex($1) >> 16;
+		} else {
+			# attempt another way to get class
+			if ($content =~ /\s(\S+)-class/) {
+				$class = getclass($1);
+				if ($class eq 0xFF) {
+					print STDERR "$h_file unknown class\n";
+					$invalid = 1;
+				}
+			} else {
+				print STDERR "$h_file is missing SYSCTL_DID0_CLASS_\n";
+				$class = 0;
+				$invalid = 1;
+			}
+		}
+
+		if ($content =~ /SYSCTL_DID1_PRTNO_$base.+0x(\S+)/) {
+			$prtno = hex($1);
+			$base = "LM3S" . $base;
+		} else {
+			# LM4F have a changed header
+			if ($content =~ /SYSCTL_DID1_PRTNO_LM4F$base.+?0x(\S+)/s) {
+				$prtno = hex($1);
+				$base = "LM4F" . $base;
+			} else {
+				print STDERR "$h_file is missing SYSCTL_DID1_PRTNO\n";
+				$prtno = 0;
+				$invalid = 1;
+			}
+		}
+		$new_member = sprintf "{0x%02X, 0x%02X, \"%s\"},", $class, $prtno >> 16, $base;
+		if ($invalid == 1) {
+			#$new_struct .= "\t//$new_member\t// Invalid\n";
+		} else {
+			$new_struct .= "\t$new_member\n";
+		}
+	}
+}
+
+sub getclass {
+	$class = $_[0];
+	if ($class =~ /Sandstorm/i) {
+		return 0;
+	} elsif ($class =~ /Fury/i) {
+		return 1;
+	} elsif ($class =~ /DustDevil/i) {
+		return 3;
+	} elsif ($class =~ /Tempest/i) {
+		return 4;
+	} elsif ($class =~ /Blizzard/i) {
+		return 5;
+	} elsif ($class =~ /Firestorm/i) {
+		return 6;
+	}
+	return 0xFF;
+}