

Getting Started: Building and Using PJSIP and PJMEDIA

   [Last Update: Sept 13, 2006]
     _________________________________________________________________

   This article describes how to download, customize, build, and use the open
   source PJSIP and PJMEDIA SIP and media stack. The online (and HTML) version
   of this file can be downloaded from http://www.pjsip.org/using.htm


Quick Info

   Building with GNU tools
          Generally these should be all that are needed to build the libraries,
          applications, and samples:

   $ ./configure
   $ make dep && make clean && make

   Building Win32 Target with Microsoft Visual Studio
          Generally we can just do these steps:

         1. Open pjsip-apps/build/pjsip_apps.dsw workspace,
         2. Create an empty pjlib/include/pj/config_site.h, and
         3. build the pjsua application.

   Building for Windows Mobile
          Generally these are all that are needed:

         1. Open pjsip-apps/build/wince-evc4/wince_demos.vcw EVC4 workspace,
         2. Create an empty pjlib/include/pj/config_site.h, and
         3. build the pjsua_wince application.

   With Visual Studio for Win32 target and the GNU build systems, the output
   libraries will be put in lib directory under each projects, and the output
   binaries will be put in bin directory under each projects.


Table of Contents:
     _________________________________________________________________

   1. Getting the Source Distribution

     1.1 Getting the Release tarball

     1.2 Getting from Subversion trunk

     1.3 Source Directories Layout

   2. Build Preparation

     2.1 config_site.h file

     2.2 Disk Space Requirements

   3. Building Linux, *nix, *BSD, and MacOS X Targets with GNU Build Systems

     3.1 Supported Targets

     3.2 Requirements

     3.3 Running configure

     3.4 Running make

     3.5 Cross Compilation

   4. Building for Windows Targets with Microsoft Visual Studio

     4.1 Requirements

     4.2 Building the Projects

     4.3 Debugging the Sample Application

   5. Building for Windows Mobile Targets (Windows CE/WinCE/PDA/SmartPhone)

     5.1 Requirements

     5.2 Building the Projects

   6. Using PJPROJECT with Applications


   Appendix I: Common Problems/Frequently Asked Question (FAQ)

     I.1 fatal error C1083: Cannot open include file: 'pj/config_site.h':
   No such file or directory


1. Getting the Source Code Distribution
     _________________________________________________________________

   All libraries (PJLIB, PJLIB-UTIL, PJSIP, PJMEDIA, and PJMEDIA-CODEC) are
   currently distributed under a single source tree, collectively named as
   PJPROJECT or just PJ libraries. These libraries can be obtained by either
   downloading the release tarball or getting them from the Subversion trunk.


1.1 Getting the Release tarball
     _________________________________________________________________

   Getting the released tarball is a convenient way to obtain stable version of
   PJPROJECT. The tarball may not contain the latest features or bug-fixes, but
   normally it is considered more stable as each will be tested more rigorously
   before released.

   The   latest   released   tarball   can   be   downloaded   from   the
   http://www.pjsip.org/download.htm.


1.2 Getting from Subversion trunk
     _________________________________________________________________

   PJPROJECT  Subversion  repository  will always contain the latest/most
   up-to-date version of the sources. Normally the Subversion repository is
   always kept in a "good" state. However, there's always a chance that things
   break  and  the  tree  doesn't  build  correctly (particularly for the
   "not-so-popular" targets), so please consult the mailing list should there
   be any problems.

   Using Subversion also has benefits of keeping the local copy of the source
   up to date with the main PJ source tree and to easily track the changes made
   to the local copy, if any.


What is Subversion

   Subversion (SVN) is Open Source version control system similar to CVS.
   Subversion homepage is in http://subversion.tigris.org/


Getting Subversion Client

   A Subversion (SVN) client is needed to download the PJ source files from
   pjsip.org  SVN  tree.  SVN  client  binaries  can  be  downloaded from
   http://subversion.tigris.org/, and the program should be available for
   Windows, Linux, MacOS X, and many more platforms.


Getting the Source for The First Time

   Once Subversion client is installed, we can use these commands to initially
   retrieve the latest sources from the Subversion trunk:



   $ svn co http://svn.pjproject.net/repos/pjproject/trunk pjproject
   $ cd pjproject


Keeping The Local Copy Up-to-Date

   Once sources have been downloaded, we can keep the local copy up to date by
   periodically synchronizing the local source with the latest revision from
   the  PJ's  Subversion  trunk. The mailing list provides best source of
   information about the availability of new updates in the trunk.

   To  update  the  local  copy  with the latest changes in the main PJ's
   repository:



   $ cd pjproject
   $ svn update


Tracking Local and Remote Changes

   To see what files have been changed locally:



   $ cd pjproject
   $ svn status

   The above command only compares local file against the original local copy,
   so it doesn't require Internet connection while performing the check.

   To see both what files have been changed locally and what files have been
   updated in the PJ's Subversion repository:



   $ cd pjproject
   $ svn status -u

   Note that this command requires active Internet connection to query the
   status of PJPROJECT's source repository.


1.3 Source Directories Layout
     _________________________________________________________________

Top-Level Directory Layout

   The top-level directories (denoted as $TOP here) in the source distribution
   contains the following sub-directories:

   $TOP/build
          Contains makefiles that are common for all projects.

   $TOP/pjlib
          Contains  header  and  source files of PJLIB. PJLIB is the base
          portability  and  framework  library which is used by all other
          libraries

   $TOP/pjlib-util
          Contains  PJLIB-UTIL  header and source files. PJLIB-UTIL is an
          auxiliary library that contains utility functions such as scanner,
          XML, STUN, MD5 algorithm, getopt() implementation, etc.

   $TOP/pjmedia
          Contains PJMEDIA and PJMEDIA-CODEC header and source files. The
          sources of various codecs (such as GSM, Speex, and iLBC) can be found
          under this directory.

   $TOP/pjsip
          Contains PJSIP header and source files.

   $TOP/pjsip-apps
          Contains source code for PJSUA and various sample applications.


Individual Directory Inside Each Project

   Each library directory further contains these sub-directories:

   bin
          Contains binaries produced by the build process.

   build
          Contains build scripts/makefiles, project files, project workspace,
          etc. to build the project. In particular, it contains one Makefile
          file  to  build the project with GNU build systems, and a *.dsw
          workspace file to build the library with Microsoft Visual Studio 6 or
          later.

   build/output
          The build/output directory contains the object files and other files
          generated by the build process. To support building multiple targets
          with a single source tree, each build target will occupy a different
          subdirectory under this directory.

   build/wince-evc4
          This directory contains the project/workspace files to build Windows
          CE/WinCE version of the project using Microsoft Embedded Visual C++
          4.

   build/wince-evc4/output
          This directory contains the library, executable, and object files
          generated by Windows Mobile build process.

   docs
          Contains Doxygen configuration file (doxygen.cfg) to generate online
          documentation from the source files. The output documentation will be
          put in this directory as well (for example, docs/html directory for
          the HTML files).

          (to generate Doxygen documentation from the source tree, just run
          "doxygen docs/doxygen.cfg" in the individual project directory. The
          generated files will reside in docs directory).

   include
          Contains the header files for the project.

   lib
          Contains libraries produced by the build process.

   src
          Contains the source files of the project.


2. Build Preparation
     _________________________________________________________________

2.1 config_site.h file
     _________________________________________________________________

   The pjlib/include/pj/config_site.h contains local customizations to the
   libraries.

   All customizations should be put in this file instead of modifying PJ's
   files, because if PJ's files get modified, then those modified files will
   not be updated the next time the source is synchronized. Or in other case,
   the local modification may be overwritten with the fresh copy from the SVN.

   Putting the local customization to the config_site.h solves this problem,
   because this file is not included in the version control, so it will never
   be overwritten by "svn update" command.

   Please find list of configuration macros that can be overriden from these
   files:
     * pjlib/config.h file
     * pjmedia/config.h file
     * pjsip/sip_config.h file

   A     sample    config_site.h    file    is    also    available    in
   pjlib/include/config_site_sample.h.


Creating config_site.h file

   The simplest way is just to create an empty file, to use whetever default
   values set by the libraries.

   Another way to create the config_site.h file is to write something like the
   following:


   // Uncomment to get minimum footprint (suitable for 1-2 concurrent calls
   only)
   //#define PJ_CONFIG_MINIMAL_SIZE
   // Uncomment to get maximum performance
   //#define PJ_CONFIG_MAXIMUM_SPEED
   #include <pj/config_site_sample.h>


2.2 Disk Space Requirements
     _________________________________________________________________

   The building process needs:
     * about 50-60 MB of disk space to store the uncompressed source files, and
     * about 30-50 MB of additional space for building each target

   (Visual Studio Debug and Release are considered as separate targets)


3. Building Linux, *nix, *BSD, and MacOS X Targets with GNU Build Systems
     _________________________________________________________________

3.1 Supported Targets
     _________________________________________________________________

   The  new,  autoconf  based  GNU  build system can be used to build the
   libraries/applications for the following targets:
     * Linux/uC-Linux (i386, Opteron, Itanium, MIPS, PowerPC, etc.),
     * MacOS X (PowerPC),
     * mingw (i386),
     * FreeBSD and maybe other BSD's (i386, Opteron, etc.),
     * RTEMS with cross compilation (ARM, powerpc),
     * etc.


3.2 Requirements
     _________________________________________________________________

   In order to use PJ's GNU build system, these typical GNU tools are needed:
     * GNU make (other make will not work),
     * GNU binutils for the target, and
     * GNU gcc for the target.

   In addition, the appropriate "SDK" must be installed for the particular
   target (this could just be a libc and the appropriate system abstraction
   library such as Posix).

   The build system is known to work on the following hosts:
     * Linux, many types of distributions.
     * MacOS X 10.2
     * mingw (Win2K, XP)
     * FreeBSD (must use gmake instead of make)

   Building Win32 applications with cygwin is currently not supported (there is
   some Windows header conflicts), but cross-compilations might just work.


3.3 Running configure
     _________________________________________________________________

Using Default Settings

   Run  "./configure"  without  any  options to let the script detect the
   appropriate settings for the host:



   $ cd pjproject
   $ ./configure
   ...

   Notes:
          The default settings build the libraries in "release" mode, with
          default CFLAGS set to "-O2 -DNDEBUG". To change the default CFLAGS,
          we can use the usual "./configure CFLAGS='-g'" construct.

    Features Customization

   With the new autoconf based build system, most configuration/customization
   can be specified as configure arguments. The list of customizable features
   can be viewed by running "./configure --help" command:



   $ cd pjproject
   $ ./configure --help
   ...
   Optional Features:
   --disable-floating-point   Disable floating point where possible
   --disable-sound            Exclude sound (i.e. use null sound)
   --disable-small-filter     Exclude small filter in resampling
   --disable-large-filter     Exclude large filter in resampling
   --disable-g711-plc         Exclude G.711 Annex A PLC
   --disable-speex-aec        Exclude Speex Acoustic Echo Canceller/AEC
   --disable-g711-codec       Exclude G.711 codecs from the build
   --disable-l16-codec        Exclude Linear/L16 codec family from the build
   --disable-gsm-codec        Exclude GSM codec in the build
   --disable-speex-codec      Exclude Speex codecs in the build
   --disable-ilbc-codec       Exclude iLBC codec in the build
   ...                       

    Configuring Debug Version and Other Customizations

   The configure script accepts standard customization, which details can be
   obtained by executing ./configure --help.

   For example, to build the libraries/application in debug mode:



   $ ./configure CFLAGS="-g"
   ...


  3.4 Cross Compilation
     _________________________________________________________________

   (.. to be completed)



   $ ./configure --target=powerpc-linux-unknown
   ...


  3.5 Running make
     _________________________________________________________________

   Once the configure script completes successfully, start the build process by
   invoking these commands:



   $ cd pjproject
   $ make dep
   $ make

   Note:
          gmake may need to be specified instead of make for some hosts, to
          invoke GNU make instead of the native make.


   Description of all make targets supported by the Makefile's:

   all
          The default (or first) target to build the libraries/binaries.

   dep, depend
          Build dependencies rule from the source files.

   clean
          Clean  the object files for current target, but keep the output
          library/binary files intact.

   distclean, realclean
          Remove  all  generated  files (object, libraries, binaries, and
          dependency files) for current target.


   Note:
          make can be invoked either in the top-level PJ directory or in build
          directory under each project to build only the particular project.


4. Building for Windows Targets with Microsoft Visual Studio
     _________________________________________________________________

  4.1 Requirements
     _________________________________________________________________

   The Microsoft Visual Studio based project files can be used with one of the
   following:

     * Microsoft Visual Studio 6,
     * Microsoft Visual Studio .NET 2002,
     * Microsoft Visual Studio .NET 2003,
     * Microsoft Visual C++ Express 2005 with Platform SDK and DirectX SDK,

   For the host, the following are required:
     * Windows NT, 2000, XP, 2003, or later ,
     * Windows 95/98 should work too, but this has not been tested,
     * Sufficient amount of RAM for the build process.


  4.2 Building the Projects
     _________________________________________________________________

   Follow the steps below to build the libraries/application using Visual
   Studio:
    1. Open Visual Studio 6 workspace file pjsip-apps/build/pjsip_apps.dsw. If
       later version of Visual Studio is being used, it should convert the
       workspace file and project files into the new formats.
    2. Set pjsua as Active Project.
    3. Select Debug or Release build as appropriate.
    4. Build the project. This will build pjsua application and all libraries
       needed by pjsua.
    5. After  successful  build,  the pjsua application will be placed in
       pjsip-apps/bin directory, and the libraries in lib directory under each
       projects.

   To build the samples:
    1. (Still using the same workspace)
    2. Set samples project as Active Project
    3. Select Debug or Release build as appropriate.
    4. Build the project. This will build all sample applications and all
       libraries needed.
    5. After  successful build, the sample applications will be placed in
       pjsip-apps/bin/samples directory, and the libraries in lib directory
       under each projects.

  4.3 Debugging the Sample Application
     _________________________________________________________________

   The sample applications are build using Samples.mak makefile, therefore it
   is  difficult  to  setup  debugging session in Visual Studio for these
   applications. To solve this issue, the pjsip_apps workspace contain one
   project  called  sample_debug  which  can  be used to debug the sample
   application.

   To setup debugging using sample_debug project:
    1. (Still using pjsip_apps workspace)
    2. Set sample_debug project as Active Project
    3. Edit debug.c file inside this project.
    4. Modify the #include line to include the particular sample application to
       debug
    5. Select Debug build.
    6. Build and debug the project.


5. Building for Windows Mobile Targets (Windows CE/WinCE/PDA/SmartPhone)
     _________________________________________________________________

   PJ supports building SIP and media stacks and applications for Windows
   Mobile targets. A very simple WinCE SIP user agent (with media) application
   is provided just as proof of concept that the port works.

  5.1 Requirements
     _________________________________________________________________

   One of the following development tools is needed to build SIP and media
   components for Windows Mobile:
     * Microsoft Embedded Visual C++ 4 with appropriate SDKs, or
     * Microsoft Visual Studio 2005 for Windows Mobile with appropriate SDKs.

   Note that VS2005 is not directly supported (as I don't have the tools), but
   it is reported to work (I assumed that VS2005 for Windows Mobile can import
   EVC4 workspace file).

  5.2 Building the Projects
     _________________________________________________________________

   The Windows Mobile port is included in the main source distribution. Please
   follow  the  following  steps  to build the WinCE libraries and sample
   application:
    1. Open pjsip-apps/build/wince-evc4/wince_demos.vcw workspace file. If
       later version of EVC4 is being used, this may cause the workspace file
       to be converted to the appropriate format.
    2. Select pjsua_wince project as the Active Project.
    3. Select the appropriate SDK (for example Pocket PC 2003 SDK or SmartPhone
       2003 SDK)
    4. Select the appropriate configuration (for example, Win32 (WCE Emulator
       Debug) to debug the program in emulator, or other configurations such as
       ARMV4, MIPS, SH3, SH4, or whatever suitable for the device)
    5. Select the appropriate device (Emulator or the actual Device).
    6. Build the project. This will build the sample WinCE application and all
       libraries (SIP, Media, etc.) needed by this application.

   Notes

          + If the config_site.h includes config_site_sample.h file, then
            there are certain configuration in config_site_sample.h that get
            activated for Windows CE targets. Please make sure that these
            configurations are suitable for the application.
          + The libraries, binaries and object files produced by the build
            process are located under build/wince-evc4/output directory of each
            projects.


6. Using PJPROJECT with Applications
     _________________________________________________________________

   Regardless of the build system being used, the following tasks are normally
   needed to be done in order to build application to use PJSIP and PJMEDIA:
    1. Put these include directories in the include search path:
          + pjlib/include
          + pjlib-util/include
          + pjmedia/include
          + pjsip/include
    2. Put these library directories in the library search path:
          + pjlib/lib
          + pjlib-util/lib
          + pjmedia/lib
          + pjsip/lib
    3. Include the relevant PJ header files in the application source file. For
       example, using these would include ALL APIs exported by PJ:

      #include <pjlib.h>
      #include <pjlib-util.h>
      #include <pjsip.h>
      #include <pjsip_ua.h>
      #include <pjsip_simple.h>
      #include <pjsua.h>
      #include <pjmedia.h>
      #include <pjmedia-codec.h>
       (Note: the documentation of the relevant libraries should say which
       header files should be included to get the declaration of the APIs).
    4. Declare the OS macros.
          + For Windows applications built with Visual Studio, we need to
            declare PJ_WIN32=1 macro in the project settings (declaring the
            macro in the source file may not be sufficient).
          + For Windows Mobile applications build with Visual C++, we need to
            declare PJ_WIN32_WINCE=1 macro in the project settings.
          + For  GNU build system/autoconf based build system, we need to
            declare PJ_AUTOCONF=1 macro when compiling the applications.
       (Note: the old PJ build system requires declaring the target processor
       with PJ_M_XXX=1 macro, but this has been made obsolete. The target
       processor  will  be  detected  from compiler's predefined macro by
       pjlib/config.h file).
    5. Link with the appropriate PJ libraries. The following libraries will
       need to be included in the library link specifications:

        pjlib
                Base library used by all libraries.

        pjlib-util
                Auxiliary library containing scanner, XML, STUN, MD5, getopt,
                etc, used by the SIP and media stack.

        pjsip
                SIP core stack library.

        pjsip-ua
                SIP user agent library containing INVITE session, call
                transfer, client registration, etc.

        pjsip-simple
                SIP SIMPLE library for base event framework, presence, instant
                messaging, etc.

        pjsua
                High level SIP UA library, combining SIP and media stack into
                high-level easy to use API.

        pjmedia
                The media framework.

        pjmedia-codec
                Container library for various codecs such as GSM, Speex, and
                iLBC.


   Note: the actual library names will be appended with the target name and the
   build configuration. For example:

        For Visual Studio builds
                The actual library names will look like
                pjlib-i386-win32-vc6-debug.lib,
                pjlib-i386-win32-vc6-release.lib, etc., depending on whether we
                are building the Debug or Release version of the library.

                An easier way to link with the libraries is to include PJ
                project files in the workspace, and to configure project
                dependencies so that the application depends on the PJ
                libraries. This way, we don't need to manually add each PJ
                libraries to the input library file specification, since VS
                will automatically link the dependency libraries with the
                application.

        For Windows Mobile builds
                Unfortunately the PJ libraries built for Windows Mobile will
                not be placed in the usual lib directory, but rather under the
                output directory under build/wince-evc4 project directory.

                An easier way to link with the libraries is to include PJ
                project files in the workspace, and to configure project
                dependencies so that the application depends on the PJ
                libraries. This way, we don't need to manually add each PJ
                libraries to the input library file specification, since VS
                will automatically link the dependency libraries with the
                application.

        For GNU builds
                Application's Makefile can get the PJ library suffix by
                including PJ's build.mak file from the root PJ directory (the
                suffix is contained in TARGET_NAME variable). For example, to
                link with PJLIB and PJMEDIA, we can use this syntax in the
                LDFLAGS: "-lpj-$(TARGET_NAME) -lpjmedia-$(TARGET_NAME)"


Appendix I: Common Problems/Frequently Asked Question (FAQ)
     _________________________________________________________________

  I.1 fatal error C1083: Cannot open include file: 'pj/config_site.h': No such
  file or directory

   This error normally occurs when the config_site.h file has not been created.
   This file needs to be created manually (an empty file is sufficient). Please
   follow the Build Preparation instructions above to create this file.





  Thanks for using PJ libraries and for reading this document. Please
  send feedbacks or general comments to <bennylp at pjsip dot org>.

  Benny Prijono

