build.sh 18 KB

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