Skip to content

Commit 23e097e

Browse files
author
Jianchun Xu
committed
swb: run write-barrier check/analyze from build.sh
Enable build.sh to run write-barrier check/analyze: ``` build.sh -n -d --wb-check lib/Runtime/Base/FunctionBody.cpp ```
1 parent 15e6bb1 commit 23e097e

File tree

2 files changed

+87
-2
lines changed

2 files changed

+87
-2
lines changed

CMakeLists.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,28 @@ endif(WITHOUT_FEATURES_SH)
310310

311311
enable_language(ASM)
312312

313+
################# Write-barrier check/analyze ##################
314+
if (WB_CHECK_SH OR WB_ANALYZE_SH)
315+
add_definitions(
316+
-Xclang -load
317+
-Xclang ${CMAKE_CURRENT_SOURCE_DIR}/tools/RecyclerChecker/Build/libclangRecyclerChecker.so
318+
)
319+
endif()
320+
if (WB_CHECK_SH)
321+
unset(WB_CHECK_SH CACHE) # don't cache
322+
add_definitions(
323+
-Xclang -plugin
324+
-Xclang check-recycler
325+
)
326+
endif()
327+
if (WB_ANALYZE_SH)
328+
unset(WB_ANALYZE_SH CACHE) # don't cache
329+
add_definitions(
330+
-Xclang -analyze
331+
-Xclang -analyzer-checker=chakra.RecyclerChecker
332+
)
333+
endif()
334+
313335
include_directories(
314336
.
315337
lib/Common

build.sh

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ PRINT_USAGE() {
4949
echo " --without=FEATURE,FEATURE,..."
5050
echo " Disable FEATUREs from JSRT experimental"
5151
echo " features."
52+
echo " --wb-check CPPFILE"
53+
echo " Write-barrier check given CPPFILE (git path)"
54+
echo " --wb-analyze CPPFILE"
55+
echo " Write-barrier analyze given CPPFILE (git path)"
5256
echo ""
5357
echo "example:"
5458
echo " ./build.sh --cxx=/path/to/clang++ --cc=/path/to/clang -j"
@@ -75,6 +79,8 @@ ARCH="-DCC_TARGETS_AMD64_SH=1"
7579
OS_LINUX=0
7680
OS_APT_GET=0
7781
OS_UNIX=0
82+
WB_CHECK=
83+
WB_ANALYZE=
7884

7985
if [ -f "/proc/version" ]; then
8086
OS_LINUX=1
@@ -234,6 +240,24 @@ while [[ $# -gt 0 ]]; do
234240
done
235241
;;
236242

243+
--wb-check)
244+
if [[ "$2" =~ ^[^-] ]]; then
245+
WB_CHECK="$2"
246+
shift
247+
else
248+
PRINT_USAGE && exit 1
249+
fi
250+
;;
251+
252+
--wb-analyze)
253+
if [[ "$2" =~ ^[^-] ]]; then
254+
WB_ANALYZE="$2"
255+
shift
256+
else
257+
PRINT_USAGE && exit 1
258+
fi
259+
;;
260+
237261
*)
238262
echo "Unknown option $1"
239263
PRINT_USAGE
@@ -306,6 +330,43 @@ if [[ ${#_CXX} > 0 ]]; then
306330
CC_PREFIX="-DCMAKE_CXX_COMPILER=$_CXX -DCMAKE_C_COMPILER=$_CC"
307331
fi
308332

333+
################# Write-barrier check/analyze run #################
334+
WB_FLAG=
335+
WB_TARGET=
336+
if [[ $WB_CHECK || $WB_ANALYZE ]]; then
337+
if [[ $MAKE != 'ninja' ]]; then
338+
echo "--wb-check/wb-analyze only works with --ninja" && exit 1
339+
fi
340+
if [[ $WB_CHECK && $WB_ANALYZE ]]; then
341+
echo "Please run only one of --wb-check or --wb-analyze" && exit 1
342+
fi
343+
if [[ $WB_CHECK ]]; then
344+
WB_FLAG="-DWB_CHECK_SH=1"
345+
WB_FILE=$WB_CHECK
346+
fi
347+
if [[ $WB_ANALYZE ]]; then
348+
WB_FLAG="-DWB_ANALYZE_SH=1"
349+
WB_FILE=$WB_ANALYZE
350+
fi
351+
352+
if [[ -f $CHAKRACORE_DIR/$WB_FILE ]]; then
353+
touch $CHAKRACORE_DIR/$WB_FILE
354+
else
355+
echo "$CHAKRACORE_DIR/$WB_FILE not found. Please use full git path for $WB_FILE." && exit 1
356+
fi
357+
358+
WB_FILE_DIR=`dirname $WB_FILE`
359+
WB_FILE_BASE=`basename $WB_FILE`
360+
361+
WB_FILE_CMAKELISTS="$CHAKRACORE_DIR/$WB_FILE_DIR/CMakeLists.txt"
362+
if [[ -f $WB_FILE_CMAKELISTS ]]; then
363+
SUBDIR=$(grep -i add_library $WB_FILE_CMAKELISTS | sed -r "s/.*\((\S+) .*/\1/")
364+
else
365+
echo "$WB_FILE_CMAKELISTS not found." && exit 1
366+
fi
367+
WB_TARGET="$WB_FILE_DIR/CMakeFiles/$SUBDIR.dir/$WB_FILE_BASE.o"
368+
fi
369+
309370
build_directory="$CHAKRACORE_DIR/BuildLinux/${BUILD_TYPE:0}"
310371
if [ ! -d "$build_directory" ]; then
311372
SAFE_RUN `mkdir -p $build_directory`
@@ -322,12 +383,14 @@ fi
322383

323384
echo Generating $BUILD_TYPE makefiles
324385
cmake $CMAKE_GEN $CC_PREFIX $ICU_PATH $STATIC_LIBRARY $ARCH \
325-
-DCMAKE_BUILD_TYPE=$BUILD_TYPE $SANITIZE $NO_JIT $WITHOUT_FEATURES ../..
386+
-DCMAKE_BUILD_TYPE=$BUILD_TYPE $SANITIZE $NO_JIT $WITHOUT_FEATURES \
387+
$WB_FLAG \
388+
../..
326389

327390
_RET=$?
328391
if [[ $? == 0 ]]; then
329392
if [[ $MAKE != 0 ]]; then
330-
$MAKE $MULTICORE_BUILD 2>&1 | tee build.log
393+
$MAKE $MULTICORE_BUILD $WB_TARGET 2>&1 | tee build.log
331394
_RET=${PIPESTATUS[0]}
332395
else
333396
echo "Visit given folder above for xcode project file ----^"

0 commit comments

Comments
 (0)