buildpas2js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #!/bin/bash
  2. # Some variables
  3. BASEURL="https://svn.freepascal.org/svn/projects/pas2js/"
  4. function info {
  5. echo "Info: $*"
  6. }
  7. function usage {
  8. echo "usage $0 [options] [FPC [SVN]]"
  9. echo '-c compiler set compiler to use'
  10. echo '-d directory set base directory for checkout'
  11. echo '-h help this help message'
  12. echo '-o OPTS extra compiler options'
  13. echo '-z URL set url for checkout. Can be relative to pas2js repo'
  14. }
  15. function doCompile {
  16. info "Compiler command line: $*"
  17. $FPC $*
  18. }
  19. set -e
  20. while test $# != 0
  21. do
  22. f=$1
  23. case $f in
  24. '-c') shift
  25. FPC="$1";;
  26. '-d') shift
  27. DIR="$1";;
  28. '-z') shift
  29. SVN="$1";;
  30. '-o') shift
  31. EXTRAOPTS="$1";;
  32. '-h') usage
  33. exit;;
  34. *)
  35. if [ -z "$FPC" ]; then
  36. FPC=$1
  37. else
  38. if [ -z "$SVN" ]; then
  39. SVN=$1
  40. else
  41. usage
  42. fi
  43. fi
  44. esac
  45. shift
  46. done
  47. #
  48. # Collect some info , set defaults
  49. #
  50. info FPC $FPC
  51. info SVN $SVN
  52. info DIR $DIR
  53. if [ -z "$FPC" ]; then
  54. FPC=fpc
  55. fi
  56. if [ -z "$SVN" ]; then
  57. SVN=${BASEURL}trunk
  58. else
  59. PROT=$(echo $SVN | sed -n '/.*:\/\//p')
  60. if [ -z "$PROT" ]; then
  61. SVN="${BASEURL}${SVN}"
  62. fi
  63. fi
  64. if [ -z "$DIR" ]; then
  65. DIR=$TMP
  66. if [ -z "$DIR" ]; then
  67. DIR=$TEMP
  68. fi
  69. if [ -z "$DIR" ]; then
  70. DIR=~/tmp
  71. fi
  72. fi
  73. FPCVER=$($FPC -iV)
  74. FPCVER30=$(echo $FPCVER | grep '3.0')
  75. FPCCPU=$($FPC -iTP)
  76. #
  77. # Get started
  78. #
  79. info "SVN URL: $SVN"
  80. info "Compiler version: $FPCVER"
  81. info "Base directory: $DIR"
  82. info ""
  83. info ""
  84. #
  85. # Change to base dir
  86. #
  87. info Changing directory to base dir $DIR
  88. mkdir -p $DIR
  89. cd $DIR
  90. if [ -d daily ]; then
  91. info Removing previous dir
  92. rm -rf daily
  93. fi
  94. #
  95. # Export sources
  96. #
  97. info "Exporting SVN $SVN to $DIR/daily"
  98. svn export -q $SVN daily
  99. BUILDDIR="$DIR/daily"
  100. PKGDIR="$BUILDDIR/compiler/packages"
  101. UNITPATH="$PKGDIR/fcl-js/src/;$PKGDIR/fcl-json/src/;$PKGDIR/fcl-passrc/src/;$PKGDIR/pastojs/src/"
  102. if [ ! -z "$FPCVER30" ]; then
  103. UNITPATH="${UNITPATH};$PKGDIR/compat"
  104. fi
  105. OPTS="-B -O1 -Scghi -v0 -ve $EXTRAOPT"
  106. if [ "$FPCCPU" = "x86_64" ]; then
  107. LIBOPT="-fPIC"
  108. fi
  109. COMPDIR=$BUILDDIR/compiler/utils/pas2js
  110. BINDIR=$BUILDDIR/bin/
  111. OUTDIR=$BUILDDIR/output
  112. if [ -d "$BINDIR" ]; then
  113. info Removing previous binaries from "$BINDIR"
  114. rm -rf "$BINDIR"/*
  115. else
  116. info Creating output dir "$BINDIR"
  117. mkdir -p "$BINDIR"
  118. fi
  119. if [ -d "$OUTDIR" ]; then
  120. info Removing previous binaries from "$OUTDIR"
  121. rm -rf "$OUTDIR"/*
  122. else
  123. info Creating output dir "$OUTDIR"
  124. mkdir -p "$OUTDIR"
  125. fi
  126. # pas2js
  127. info
  128. info Build pas2js in $COMPDIR
  129. info "---"
  130. cd "$COMPDIR"
  131. doCompile -Fu"$UNITPATH" $OPTS -FE$OUTDIR pas2js.pp
  132. strip $OUTDIR/pas2js
  133. info Copying to build dir.
  134. cp $OUTDIR/pas2js $BINDIR/
  135. # libpas2js
  136. info ""
  137. info Build libpas2js in $COMPDIR
  138. info "---"
  139. cd "$COMPDIR"
  140. doCompile -Fu"$UNITPATH" $OPTS $LIBOPT -FE$OUTDIR pas2jslib.pp
  141. strip $OUTDIR/libpas2jslib.so
  142. info Copying to build dir.
  143. cp $OUTDIR/libpas2jslib.so $BINDIR/
  144. # compileserver
  145. if [ ! -z "$FPCVER30" ]; then
  146. info ""
  147. info Version 3.0.x detected: Skipping compileserver build.
  148. info "---"
  149. else
  150. info ""
  151. info Build compileserver in $COMPDIR
  152. info "---"
  153. cd "$COMPDIR"
  154. doCompile -Fu"$UNITPATH" $OPTS -FE$OUTDIR compileserver.pp
  155. strip $OUTDIR/compileserver
  156. info Copying to build dir.
  157. cp $OUTDIR/compileserver $BINDIR/
  158. fi
  159. # webidl
  160. info ""
  161. info Build webidl2pas in $COMPDIR
  162. info "---"
  163. cd "$COMPDIR"
  164. doCompile -Fu"$UNITPATH" $OPTS -FE$OUTDIR -Fu$PKGDIR/webidl/src webidl2pas.pp
  165. strip $OUTDIR/webidl2pas
  166. info Copying to build dir.
  167. cp $OUTDIR/webidl2pas $BINDIR/
  168. # all done
  169. info Compiled binaries:
  170. ls -l $BINDIR
  171. info Build demos in $snvdir/demo without webcompiler
  172. cd "$BUILDDIR/demo"
  173. make SKIPWEBCOMPILER=1 P2JS=$BUILDDIR/output/pas2js
  174. info Build webcompiler in demos dir
  175. cd "$BUILDDIR/demo"
  176. make demowebcompiler P2JS=$BUILDDIR/output/pas2js