CyaSSL MPLAB X Project Files

This directory contains project files for the Microchip MPLAB X IDE. These
projects have been set up to use the Microchip PIC32 Ethernet Starter Kit
and the Microchip XC32 compiler, and have been created specifically to test
the Microchip-specific CTaoCrypt API with compression support. For MPLAB X 
projects that don't use compression and are generic to the CTaoCrypt API, 
please see the <cyassl_root>/mplabx directory.

In order to generate the necessary auto-generated MPLAB X files, make sure
to import the cyassl.X and zlib.X projects into your MPLAB X workspace before 
trying to build either the CTaoCrypt test or benchmark applications. This will
correctly set up the respective project's Makefiles.

Included Project Files
-----------------------

1. CyaSSL library (cyassl.X)

    This project builds a static CyaSSL library. Prior to building this
    project, uncomment the MICROCHIP_PIC32 define located in:

    <cyassl_root>/cyassl/ctaocrypt/settings.h

    After this project has been built, the compiled library will be located
    at:

    <cyassl_root>/mplabx/cyassl.X/dist/default/production/cyassl.X.a

    Note that this project includes the zlib header location in the project's
    include paths. This is because this project has been set up to be compiled
    with zlib support to enable compression and decompression features.

2. CTaoCrypt Test App (ctaocrypt_test.X)

    This project tests the CTaoCrypt cryptography modules. It is generally
    a good idea to run this first on an embedded system after compiling
    CyaSSL in order to verify all underlying crypto is working correctly.

3. CTaoCrypt Benchmark App (ctaocrypt_benchmark.X)

    This project builds the CTaoCrypt benchmark application. If the CyaSSL
    project (cyassl.X) has been compiled with libz support and is being
    used to build this project, the zlib.X project will need to added to
    the "Libraries" folder under the ctaocrypt_benchmark.X project before
    it will compile successfully.

4. CTaoCrypt MCAPI Test App (ctaocrypt_mcapi.X)

    This project tests the Microchip crytpo API layer. The Microchip crypto
    layer is located under the <cyassl_root>/mcapi directory.

5. zlib library (zlib.X)

    This project builds the zlib library for use in the ctaocrypt_test.X
    and ctaocrypt_mcapi.X projects. This project expects the zlib sources
    to be located under the CyaSSL root directory. Currently it is set up
    to work with zlib 1.2.8, and looks for sources under:

    <cyassl_root>/zlib-1.2.8

PIC32MX/PIC32MZ
---------------

The projects are set for PIC32MX by default. For PIC32MZ, change project
properties->Devices and add "CYASSL_MICROCHIP_PIC32M" to 
XC32-gcc->Preprocessing and messages-> Preprocessor macros.

MIPS16 and MIPS32 Support
-------------------------

These projects support both MIPS16 and MIPS32 instruction sets. Switching
between these two instruction sets can be done in each project's properties
settings by checking the "Generate 16-bit code" checkbox.

Support
-------
Please send questions or comments to support@wolfssl.com

