build.sh 18 KB

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