build.sh 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. #!/bin/bash
  2. #-------------------------------------------------------------------------------------------------------
  3. # Copyright (C) Microsoft. All rights reserved.
  4. # Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  5. #-------------------------------------------------------------------------------------------------------
  6. SAFE_RUN() {
  7. local SF_RETURN_VALUE=$($1 2>&1)
  8. if [[ $? != 0 ]]; then
  9. >&2 echo $SF_RETURN_VALUE
  10. exit 1
  11. fi
  12. echo $SF_RETURN_VALUE
  13. }
  14. ERROR_EXIT() {
  15. if [[ $? != 0 ]]; then
  16. echo $($1 2>&1)
  17. exit 1;
  18. fi
  19. }
  20. ERROR_CLANG() {
  21. echo "ERROR: clang++ not found."
  22. echo -e "\nYou could use clang++ from a custom location.\n"
  23. PRINT_USAGE
  24. exit 1
  25. }
  26. PRINT_USAGE() {
  27. echo ""
  28. echo "[ChakraCore Build Script Help]"
  29. echo ""
  30. echo "build.sh [options]"
  31. echo ""
  32. echo "options:"
  33. echo " --arch[=S] Set target arch (arm, x86, amd64)"
  34. echo " --cc=PATH Path to Clang (see example below)"
  35. echo " --cxx=PATH Path to Clang++ (see example below)"
  36. echo " --create-deb[=V] Create .deb package with given V version."
  37. echo " -d, --debug Debug build. Default: Release"
  38. echo " --embed-icu Download and embed ICU-57 statically."
  39. echo " -h, --help Show help"
  40. echo " --icu=PATH Path to ICU include folder (see example below)"
  41. echo " -j[=N], --jobs[=N] Multicore build, allow N jobs at once."
  42. echo " -n, --ninja Build with ninja instead of make."
  43. echo " --no-icu Compile without unicode/icu support."
  44. echo " --no-jit Disable JIT"
  45. echo " --libs-only Do not build CH and GCStress"
  46. echo " --lto Enables LLVM Full LTO"
  47. echo " --lto-thin Enables LLVM Thin LTO - xcode 8+ or clang 3.9+"
  48. echo " --static Build as static library. Default: shared library"
  49. echo " --sanitize=CHECKS Build with clang -fsanitize checks,"
  50. echo " e.g. undefined,signed-integer-overflow."
  51. echo " -t, --test-build Test build. Enables test flags on a release build."
  52. echo " --target-os[=S] Target OS"
  53. echo " --target-path[=S] Output path for compiled binaries. Default: out/"
  54. echo " --trace Enables experimental built-in trace."
  55. echo " --xcode Generate XCode project."
  56. echo " --without=FEATURE,FEATURE,..."
  57. echo " Disable FEATUREs from JSRT experimental features."
  58. echo " --valgrind Enable Valgrind support"
  59. echo " !!! Disables Concurrent GC (lower performance)"
  60. echo " -v, --verbose Display verbose output including all options"
  61. echo " --wb-check CPPFILE"
  62. echo " Write-barrier check given CPPFILE (git path)"
  63. echo " --wb-analyze CPPFILE"
  64. echo " Write-barrier analyze given CPPFILE (git path)"
  65. echo " --wb-args=PLUGIN_ARGS"
  66. echo " Write-barrier clang plugin args"
  67. echo " -y Automatically answer Yes to questions asked by \
  68. script (at your own risk)"
  69. echo ""
  70. echo "example:"
  71. echo " ./build.sh --cxx=/path/to/clang++ --cc=/path/to/clang -j"
  72. echo "with icu:"
  73. echo " ./build.sh --icu=/usr/local/opt/icu4c/include"
  74. echo ""
  75. }
  76. CHAKRACORE_DIR=`dirname $0`
  77. _CXX=""
  78. _CC=""
  79. _VERBOSE=""
  80. BUILD_TYPE="Release"
  81. CMAKE_GEN=
  82. MAKE=make
  83. MULTICORE_BUILD=""
  84. NO_JIT=
  85. ICU_PATH="-DICU_SETTINGS_RESET=1"
  86. STATIC_LIBRARY="-DSHARED_LIBRARY_SH=1"
  87. SANITIZE=
  88. WITHOUT_FEATURES=""
  89. CREATE_DEB=0
  90. ARCH="-DCC_USES_SYSTEM_ARCH_SH=1"
  91. OS_LINUX=0
  92. OS_APT_GET=0
  93. OS_UNIX=0
  94. LTO=""
  95. TARGET_OS=""
  96. ENABLE_CC_XPLAT_TRACE=""
  97. WB_CHECK=
  98. WB_ANALYZE=
  99. WB_ARGS=
  100. TARGET_PATH=0
  101. VALGRIND=0
  102. # -DCMAKE_EXPORT_COMPILE_COMMANDS=ON useful for clang-query tool
  103. CMAKE_EXPORT_COMPILE_COMMANDS="-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
  104. LIBS_ONLY_BUILD=
  105. SHOULD_EMBED_ICU=0
  106. ALWAYS_YES=0
  107. if [ -f "/proc/version" ]; then
  108. OS_LINUX=1
  109. PROC_INFO=$(cat /proc/version)
  110. if [[ $PROC_INFO =~ 'Ubuntu' || $PROC_INFO =~ 'Debian'
  111. || $PROC_INFO =~ 'Linaro' ]]; then
  112. OS_APT_GET=1
  113. fi
  114. elif [[ $(uname -s) =~ "Darwin" ]]; then
  115. OS_UNIX=1
  116. else
  117. echo -e "Warning: Installation script couldn't detect host OS..\n" # exit ?
  118. fi
  119. while [[ $# -gt 0 ]]; do
  120. case "$1" in
  121. --arch=*)
  122. ARCH=$1
  123. ARCH="${ARCH:7}"
  124. ;;
  125. --cxx=*)
  126. _CXX=$1
  127. _CXX=${_CXX:6}
  128. ;;
  129. --cc=*)
  130. _CC=$1
  131. _CC=${_CC:5}
  132. ;;
  133. -h | --help)
  134. PRINT_USAGE
  135. exit
  136. ;;
  137. -v | --verbose)
  138. _VERBOSE="V=1"
  139. ;;
  140. -d | --debug)
  141. BUILD_TYPE="Debug"
  142. ;;
  143. --embed-icu)
  144. SHOULD_EMBED_ICU=1
  145. ;;
  146. -t | --test-build)
  147. BUILD_TYPE="Test"
  148. ;;
  149. -j | --jobs)
  150. if [[ "$1" == "-j" && "$2" =~ ^[^-] ]]; then
  151. MULTICORE_BUILD="-j $2"
  152. shift
  153. else
  154. MULTICORE_BUILD="-j $(nproc)"
  155. fi
  156. ;;
  157. -j=* | --jobs=*) # -j=N syntax used in CI
  158. MULTICORE_BUILD=$1
  159. if [[ "$1" =~ ^-j= ]]; then
  160. MULTICORE_BUILD="-j ${MULTICORE_BUILD:3}"
  161. else
  162. MULTICORE_BUILD="-j ${MULTICORE_BUILD:7}"
  163. fi
  164. ;;
  165. --icu=*)
  166. ICU_PATH=$1
  167. ICU_PATH="-DICU_INCLUDE_PATH_SH=${ICU_PATH:6}"
  168. ;;
  169. --libs-only)
  170. LIBS_ONLY_BUILD="-DLIBS_ONLY_BUILD_SH=1"
  171. ;;
  172. --lto)
  173. LTO="-DENABLE_FULL_LTO_SH=1"
  174. HAS_LTO=1
  175. ;;
  176. --lto-thin)
  177. LTO="-DENABLE_THIN_LTO_SH=1"
  178. HAS_LTO=1
  179. ;;
  180. -n | --ninja)
  181. CMAKE_GEN="-G Ninja"
  182. MAKE=ninja
  183. ;;
  184. --no-icu)
  185. ICU_PATH="-DNO_ICU_PATH_GIVEN_SH=1"
  186. ;;
  187. --no-jit)
  188. NO_JIT="-DNO_JIT_SH=1"
  189. ;;
  190. --xcode)
  191. CMAKE_GEN="-G Xcode -DCC_XCODE_PROJECT=1"
  192. CMAKE_EXPORT_COMPILE_COMMANDS=""
  193. MAKE=0
  194. ;;
  195. --create-deb=*)
  196. CREATE_DEB=$1
  197. CREATE_DEB="${CREATE_DEB:13}"
  198. ;;
  199. --static)
  200. STATIC_LIBRARY="-DSTATIC_LIBRARY_SH=1"
  201. ;;
  202. --sanitize=*)
  203. SANITIZE=$1
  204. SANITIZE=${SANITIZE:11} # value after --sanitize=
  205. SANITIZE="-DCLANG_SANITIZE_SH=${SANITIZE}"
  206. ;;
  207. --target=*)
  208. _TARGET_OS=$1
  209. _TARGET_OS="${_TARGET_OS:9}"
  210. if [[ $_TARGET_OS =~ "android" ]]; then
  211. OLD_PATH=$PATH
  212. export TOOLCHAIN=$PWD/android-toolchain-arm
  213. TARGET_OS="-DCC_TARGET_OS_ANDROID_SH=1 -DANDROID_TOOLCHAIN_DIR=${TOOLCHAIN}/arm-linux-androideabi"
  214. export PATH=$TOOLCHAIN/bin:$OLD_PATH
  215. export AR=arm-linux-androideabi-ar
  216. export CC=arm-linux-androideabi-clang
  217. export CXX=arm-linux-androideabi-clang++
  218. export LINK=arm-linux-androideabi-clang++
  219. export STRIP=arm-linux-androideabi-strip
  220. # override CXX and CC
  221. _CXX="${TOOLCHAIN}/bin/${CXX}"
  222. _CC="${TOOLCHAIN}/bin/${CC}"
  223. fi
  224. ;;
  225. --trace)
  226. ENABLE_CC_XPLAT_TRACE="-DENABLE_CC_XPLAT_TRACE_SH=1"
  227. ;;
  228. --target-path=*)
  229. TARGET_PATH=$1
  230. TARGET_PATH=${TARGET_PATH:14}
  231. ;;
  232. --without=*)
  233. FEATURES=$1
  234. FEATURES=${FEATURES:10} # value after --without=
  235. for x in ${FEATURES//,/ } # replace comma with space then split
  236. do
  237. if [[ "$WITHOUT_FEATURES" == "" ]]; then
  238. WITHOUT_FEATURES="-DWITHOUT_FEATURES_SH="
  239. else
  240. WITHOUT_FEATURES="$WITHOUT_FEATURES;"
  241. fi
  242. WITHOUT_FEATURES="${WITHOUT_FEATURES}-DCOMPILE_DISABLE_${x}=1"
  243. done
  244. ;;
  245. --wb-check)
  246. if [[ "$2" =~ ^[^-] ]]; then
  247. WB_CHECK="$2"
  248. shift
  249. else
  250. WB_CHECK="*" # check all files
  251. fi
  252. ;;
  253. --wb-analyze)
  254. if [[ "$2" =~ ^[^-] ]]; then
  255. WB_ANALYZE="$2"
  256. shift
  257. else
  258. PRINT_USAGE && exit 1
  259. fi
  260. ;;
  261. --wb-args=*)
  262. WB_ARGS=$1
  263. WB_ARGS=${WB_ARGS:10}
  264. WB_ARGS=${WB_ARGS// /;} # replace space with ; to generate a cmake list
  265. ;;
  266. --valgrind)
  267. VALGRIND="-DENABLE_VALGRIND_SH=1"
  268. ;;
  269. *)
  270. echo "Unknown option $1"
  271. PRINT_USAGE
  272. exit -1
  273. ;;
  274. esac
  275. shift
  276. done
  277. if [[ $SHOULD_EMBED_ICU == 1 ]]; then
  278. if [ ! -d "${CHAKRACORE_DIR}/deps/icu/source/output" ]; then
  279. ICU_URL="http://source.icu-project.org/repos/icu/icu/tags/release-57-1"
  280. echo -e "\n----------------------------------------------------------------"
  281. echo -e "\nThis script will download ICU-LIB from\n${ICU_URL}\n"
  282. echo "It is licensed to you by its publisher, not Microsoft."
  283. echo "Microsoft is not responsible for the software."
  284. echo "Your installation and use of ICU-LIB is subject to the publisher’s terms available here:"
  285. echo -e "http://www.unicode.org/copyright.html#License\n"
  286. echo -e "----------------------------------------------------------------\n"
  287. echo "If you don't agree, press Ctrl+C to terminate"
  288. WAIT_QUESTION="Hit ENTER to continue (or wait 10 seconds)"
  289. if [[ $ALWAYS_YES == 1 ]]; then
  290. echo "$WAIT_QUESTION : Y"
  291. else
  292. read -t 10 -p "$WAIT_QUESTION"
  293. fi
  294. SAFE_RUN `mkdir -p ${CHAKRACORE_DIR}/deps/`
  295. cd "${CHAKRACORE_DIR}/deps/";
  296. ABS_DIR=`pwd`
  297. if [ ! -d "${ABS_DIR}/icu/" ]; then
  298. echo "Downloading ICU ${ICU_URL}"
  299. if [ ! -f "/usr/bin/svn" ]; then
  300. echo -e "\nYou should install 'svn' client in order to use this feature"
  301. if [ $OS_APT_GET == 1 ]; then
  302. echo "tip: Try 'sudo apt-get install subversion'"
  303. fi
  304. exit 1
  305. fi
  306. svn export -q $ICU_URL icu
  307. ERROR_EXIT "rm -rf ${ABS_DIR}/icu/"
  308. fi
  309. cd "${ABS_DIR}/icu/source";./configure --with-data-packaging=static\
  310. --prefix="${ABS_DIR}/icu/source/output/"\
  311. --enable-static --disable-shared --with-library-bits=64\
  312. --disable-icuio --disable-layout\
  313. CXXFLAGS="-fPIC" CFLAGS="-fPIC"
  314. ERROR_EXIT "rm -rf ${ABS_DIR}/icu/source/output/"
  315. make STATICCFLAGS="-fPIC" STATICCXXFLAGS="-fPIC" STATICCPPFLAGS="-DPIC" install
  316. ERROR_EXIT "rm -rf ${ABS_DIR}/icu/source/output/"
  317. cd "${ABS_DIR}/../"
  318. fi
  319. ICU_PATH="-DCC_EMBED_ICU_SH=1"
  320. fi
  321. if [[ ${#_VERBOSE} > 0 ]]; then
  322. # echo options back to the user
  323. echo "Printing command line options back to the user:"
  324. echo "_CXX=${_CXX}"
  325. echo "_CC=${_CC}"
  326. echo "BUILD_TYPE=${BUILD_TYPE}"
  327. echo "MULTICORE_BUILD=${MULTICORE_BUILD}"
  328. echo "ICU_PATH=${ICU_PATH}"
  329. echo "CMAKE_GEN=${CMAKE_GEN}"
  330. echo "MAKE=${MAKE} $_VERBOSE"
  331. echo ""
  332. fi
  333. # if LTO build is enabled and cc-toolchain/clang was compiled, use it instead
  334. if [[ $HAS_LTO == 1 && -f cc-toolchain/build/bin/clang++ ]]; then
  335. SELF=`pwd`
  336. _CXX="$SELF/cc-toolchain/build/bin/clang++"
  337. _CC="$SELF/cc-toolchain/build/bin/clang"
  338. fi
  339. if [ "${HAS_LTO}${OS_LINUX}" == "11" ]; then
  340. echo "lto: ranlib disabled"
  341. export RANLIB=/bin/true
  342. fi
  343. CLANG_PATH=
  344. if [[ ${#_CXX} > 0 || ${#_CC} > 0 ]]; then
  345. if [[ ${#_CXX} == 0 || ${#_CC} == 0 ]]; then
  346. echo "ERROR: '-cxx' and '-cc' options must be used together."
  347. exit 1
  348. fi
  349. echo "Custom CXX ${_CXX}"
  350. echo "Custom CC ${_CC}"
  351. if [[ ! -f $_CXX || ! -f $_CC ]]; then
  352. echo "ERROR: Custom compiler not found on given path"
  353. exit 1
  354. fi
  355. CLANG_PATH=$_CXX
  356. else
  357. RET_VAL=$(SAFE_RUN 'c++ --version')
  358. if [[ ! $RET_VAL =~ "clang" ]]; then
  359. echo "Searching for Clang..."
  360. if [[ -f /usr/bin/clang++ ]]; then
  361. echo "Clang++ found at /usr/bin/clang++"
  362. _CXX=/usr/bin/clang++
  363. _CC=/usr/bin/clang
  364. CLANG_PATH=$_CXX
  365. else
  366. # try env CXX and CC
  367. if [[ ! -f $CXX || ! -f $CC ]]; then
  368. ERROR_CLANG
  369. fi
  370. _CXX=$CXX
  371. _CC=$CC
  372. CLANG_PATH=$CXX
  373. VERSION=$($CXX --version)
  374. if [[ ! $VERSION =~ "clang" ]]; then
  375. ERROR_CLANG
  376. fi
  377. echo -e "Clang++ not found on PATH.\nTrying CCX -> ${CCX} and CC -> ${CC}"
  378. fi
  379. else
  380. CLANG_PATH=c++
  381. fi
  382. fi
  383. # check clang version (min required 3.7)
  384. VERSION=$($CLANG_PATH --version | grep "version [0-9]*\.[0-9]*" --o -i | grep "[0-9]\.[0-9]*" --o)
  385. VERSION=${VERSION/./}
  386. if [[ $VERSION -lt 37 ]]; then
  387. echo "ERROR: Minimum required Clang version is 3.7"
  388. exit 1
  389. fi
  390. CC_PREFIX=""
  391. if [[ ${#_CXX} > 0 ]]; then
  392. CC_PREFIX="-DCMAKE_CXX_COMPILER=$_CXX -DCMAKE_C_COMPILER=$_CC"
  393. fi
  394. RELATIVE_BUILD_PATH="../.."
  395. if [[ $TARGET_PATH == 0 ]]; then
  396. TARGET_PATH="$CHAKRACORE_DIR/out"
  397. else
  398. if [[ $TARGET_PATH =~ "~/" ]]; then
  399. echo "Do not use '~/' for '--target-path'"
  400. echo -e "\nAborting Build."
  401. exit 1
  402. fi
  403. fi
  404. BUILD_DIRECTORY="${TARGET_PATH}/${BUILD_TYPE:0}"
  405. echo "Build path: ${BUILD_DIRECTORY}"
  406. BUILD_RELATIVE_DIRECTORY=$(python -c "import os.path;print \
  407. os.path.relpath('${CHAKRACORE_DIR}', '$BUILD_DIRECTORY')")
  408. ################# Write-barrier check/analyze run #################
  409. WB_FLAG=
  410. WB_TARGET=
  411. if [[ $WB_CHECK || $WB_ANALYZE ]]; then
  412. # build software write barrier checker clang plugin
  413. $CHAKRACORE_DIR/tools/RecyclerChecker/build.sh --cxx=$_CXX || exit 1
  414. if [[ $WB_CHECK && $WB_ANALYZE ]]; then
  415. echo "Please run only one of --wb-check or --wb-analyze" && exit 1
  416. fi
  417. if [[ $WB_CHECK ]]; then
  418. WB_FLAG="-DWB_CHECK_SH=1"
  419. WB_FILE=$WB_CHECK
  420. fi
  421. if [[ $WB_ANALYZE ]]; then
  422. WB_FLAG="-DWB_ANALYZE_SH=1"
  423. WB_FILE=$WB_ANALYZE
  424. fi
  425. if [[ $WB_ARGS ]]; then
  426. if [[ $WB_ARGS =~ "-fix" ]]; then
  427. MULTICORE_BUILD="-j 1" # 1 job only if doing write barrier fix
  428. fi
  429. WB_ARGS="-DWB_ARGS_SH=$WB_ARGS"
  430. fi
  431. # support --wb-check ONE_CPP_FILE
  432. if [[ $WB_FILE != "*" ]]; then
  433. if [[ $MAKE != 'ninja' ]]; then
  434. echo "--wb-check/wb-analyze ONE_FILE only works with --ninja" && exit 1
  435. fi
  436. if [[ -f $CHAKRACORE_DIR/$WB_FILE ]]; then
  437. touch $CHAKRACORE_DIR/$WB_FILE
  438. else
  439. echo "$CHAKRACORE_DIR/$WB_FILE not found. Please use full git path for $WB_FILE." && exit 1
  440. fi
  441. WB_FILE_DIR=`dirname $WB_FILE`
  442. WB_FILE_BASE=`basename $WB_FILE`
  443. WB_FILE_CMAKELISTS="$CHAKRACORE_DIR/$WB_FILE_DIR/CMakeLists.txt"
  444. if [[ -f $WB_FILE_CMAKELISTS ]]; then
  445. SUBDIR=$(grep -i add_library $WB_FILE_CMAKELISTS | sed "s/.*(\([^ ]*\) .*/\1/")
  446. else
  447. echo "$WB_FILE_CMAKELISTS not found." && exit 1
  448. fi
  449. WB_TARGET="$WB_FILE_DIR/CMakeFiles/$SUBDIR.dir/$WB_FILE_BASE.o"
  450. fi
  451. fi
  452. # prepare DbgController.js.h
  453. CH_DIR="${CHAKRACORE_DIR}/bin/ch"
  454. "${CH_DIR}/jstoc.py" "${CH_DIR}/DbgController.js" controllerScript
  455. if [[ $? != 0 ]]; then
  456. exit 1
  457. fi
  458. if [ ! -d "$BUILD_DIRECTORY" ]; then
  459. SAFE_RUN `mkdir -p $BUILD_DIRECTORY`
  460. fi
  461. pushd $BUILD_DIRECTORY > /dev/null
  462. if [[ $ARCH =~ "x86" ]]; then
  463. ARCH="-DCC_TARGETS_X86_SH=1"
  464. echo "Compile Target : x86"
  465. elif [[ $ARCH =~ "arm" ]]; then
  466. ARCH="-DCC_TARGETS_ARM_SH=1"
  467. echo "Compile Target : arm"
  468. elif [[ $ARCH =~ "amd64" ]]; then
  469. ARCH="-DCC_TARGETS_AMD64_SH=1"
  470. echo "Compile Target : amd64"
  471. else
  472. echo "Compile Target : System Default"
  473. fi
  474. echo Generating $BUILD_TYPE makefiles
  475. cmake $CMAKE_GEN $CC_PREFIX $ICU_PATH $LTO $STATIC_LIBRARY $ARCH $TARGET_OS \
  476. $ENABLE_CC_XPLAT_TRACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $SANITIZE $NO_JIT \
  477. $WITHOUT_FEATURES $WB_FLAG $WB_ARGS $CMAKE_EXPORT_COMPILE_COMMANDS $LIBS_ONLY_BUILD\
  478. $VALGRIND $BUILD_RELATIVE_DIRECTORY
  479. _RET=$?
  480. if [[ $? == 0 ]]; then
  481. if [[ $MAKE != 0 ]]; then
  482. $MAKE $MULTICORE_BUILD $_VERBOSE $WB_TARGET 2>&1 | tee build.log
  483. _RET=${PIPESTATUS[0]}
  484. else
  485. echo "Visit given folder above for xcode project file ----^"
  486. fi
  487. fi
  488. if [[ $_RET != 0 ]]; then
  489. echo "See error details above. Exit code was $_RET"
  490. else
  491. if [[ $CREATE_DEB != 0 ]]; then
  492. DEB_FOLDER=`realpath .`
  493. DEB_FOLDER="${DEB_FOLDER}/chakracore_${CREATE_DEB}"
  494. mkdir -p $DEB_FOLDER/usr/local/bin
  495. mkdir -p $DEB_FOLDER/DEBIAN
  496. cp $DEB_FOLDER/../ch $DEB_FOLDER/usr/local/bin/
  497. if [[ $STATIC_LIBRARY == "-DSHARED_LIBRARY_SH=1" ]]; then
  498. cp $DEB_FOLDER/../*.so $DEB_FOLDER/usr/local/bin/
  499. fi
  500. echo -e "Package: ChakraCore"\
  501. "\nVersion: ${CREATE_DEB}"\
  502. "\nSection: base"\
  503. "\nPriority: optional"\
  504. "\nArchitecture: amd64"\
  505. "\nDepends: libc6 (>= 2.19), uuid-dev (>> 0), libicu-dev (>> 0)"\
  506. "\nMaintainer: ChakraCore <[email protected]>"\
  507. "\nDescription: Chakra Core"\
  508. "\n Open source Core of Chakra Javascript Engine"\
  509. > $DEB_FOLDER/DEBIAN/control
  510. dpkg-deb --build $DEB_FOLDER
  511. _RET=$?
  512. if [[ $_RET == 0 ]]; then
  513. echo ".deb package is available under $BUILD_DIRECTORY"
  514. fi
  515. fi
  516. fi
  517. popd > /dev/null
  518. exit $_RET