Building the pdk (platform development kit)

1) get a cupcake source tree with all the normal tools... and add doxygen 
(We currently support version 1.4.6)

  sudo apt-get install doxygen
  
Make sure that you are using the right version of java
  
  sudo update-java-alternatives -s java-1.5.0-sun

If that doesn't work, go through the instructions on

  http://source.android.com/download again.


2) from the root
  . build/envsetup.sh


4) mkdir dist
   mkdir logs
   
then build everything:

   time make -j8 pdk pdk_all dist DIST_DIR=dist 2>&1 | tee logs/`date +%y%m%d-%H%M%S`

so you can have a record of the build commands in the logs directory.


5) the pdk and pndk tar file is put in the dist directory.

6) the pdk-docs are in 

  out/target/common/docs/online-pdk


--------------------------------------------------------------------------------
# Build Notes

The build target 'pdk' brings in the pdk/pndk make files into the build system.
  Then there are three targets:
    pdk_docs - which builds just the pdk documentation
    pndk - which builds the platform's native development kit (native compiler, linker, etc.)
    pdk_all - which builds the above two targets

To change which version of doxygen runs you can pass in the variable:
  doxygen_version='<path/name_of_doxygen_executable>'
on the make line.


--------------------------------------------------------------------------------
# Testing

You must install google appengine.  See: http://code.google.com/appengine/downloads.html

Here's the command to run the pdk-docs server locally:
  python <path_to_appengine_installation>/dev_appserver.py --address 0.0.0.0 \
    <path_to_cupcake_code>/android/out/target/common/docs

To verify it is working, you can access it with a browser locally on port 8080:

http://localhost:8080/online-pdk/guide/index.html

NOTE: If you are trying to get to the appengine local testing instance remotely
you will have to ssh tunnel into your linux box as appengine only serves the web
host locally.  

On a Windows machine to check your current port forwarding settings:

1. Start putty.
2. Click on your session in the list and hit load (this loads the settings so you can edit them)
3. Go to SSH -> tunnels and look at the Forwarded ports box

L8080   localhost:8080

Means that you can point your webbrowser on your laptop to http://localhost:8080/ and it will show you the same thing as on your workstation for http://localhost:8080/

To add port forwarding

1. Start putty.
2. Click on your session in the list and hit load (this loads the settings so you can edit them)
3. Go to SSH -> tunnels.
4. Pick an unused port on your laptop (8080, 8888, something like that) and put it in the "source port box"
5. In the destination box, put localhost:8888 (replace with the actual port number the service is running on)
6. Hit add.
7. Go back to "Session" and save your new settings so this configuration will happen every time you login.
 

--------------------------------------------------------------------------------
# Deployment

To host the pdk docs on the internal appengine run:
/home/build/static/projects/apphosting/devtools/appcfg.py update <path_to_cupcake_src>/out/target/common/docs
where the docs directory contains: pdk.py, app.yaml, and the online-pdk directory,
all of which are tarred up by the Pdk.mk file when using the target pdk_docs. 

To host the pdk docs on the external appengine run:
/home/build/static/projects/apphosting/devtools/appcfg.py -s pdk-docs.appspot.com update <path_to_cupcake_src>/out/target/common/docs
where the docs directory contains: pdk.py, app.yaml, and the online-pdk directory,
all of which are tarred up by the Pdk.mk file when using the target pdk_docs. 


