Add support for ninja to the CoreCLR build.
authorPat Gavlin <pagavlin@microsoft.com>
Mon, 9 Nov 2015 04:00:30 +0000 (20:00 -0800)
committerPat Gavlin <pagavlin@microsoft.com>
Mon, 9 Nov 2015 15:32:25 +0000 (07:32 -0800)
Just what it says on the tin.

build.sh
src/pal/tools/gen-buildsys-clang.sh

index 80e5a20..52bfe13 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -2,12 +2,13 @@
 
 usage()
 {
-    echo "Usage: $0 [BuildArch] [BuildType] [clean] [verbose] [coverage] [cross] [clangx.y] [skipcoreclr] [skipmscorlib] [skiptests]"
+    echo "Usage: $0 [BuildArch] [BuildType] [clean] [verbose] [coverage] [cross] [clangx.y] [ninja] [skipcoreclr] [skipmscorlib] [skiptests]"
     echo "BuildArch can be: x64, ARM"
     echo "BuildType can be: Debug, Release"
     echo "clean - optional argument to force a clean build."
     echo "verbose - optional argument to enable verbose build output."
     echo "coverage - optional argument to enable code coverage build (currently supported only for Linux and OSX)."
+    echo "ninja - target ninja instead of GNU make"
     echo "clangx.y - optional argument to build using clang version x.y."
     echo "cross - optional argument to signify cross compilation,"
     echo "      - will use ROOTFS_DIR environment variable if set."
@@ -68,13 +69,22 @@ build_coreclr()
     echo "Commencing build of native components for $__BuildOS.$__BuildArch.$__BuildType"
     cd "$__IntermediatesDir"
 
+    generator=""
+    buildFile="Makefile"
+    buildTool="make"
+    if [ $__UseNinja == 1 ]; then
+        generator="ninja"
+        buildFile="build.ninja"
+        buildTool="ninja"
+    fi
+
     # Regenerate the CMake solution
     echo "Invoking cmake with arguments: \"$__ProjectRoot\" $__BuildType $__CodeCoverage"
-    "$__ProjectRoot/src/pal/tools/gen-buildsys-clang.sh" "$__ProjectRoot" $__ClangMajorVersion $__ClangMinorVersion $__BuildArch $__BuildType $__CodeCoverage $__IncludeTests
+    "$__ProjectRoot/src/pal/tools/gen-buildsys-clang.sh" "$__ProjectRoot" $__ClangMajorVersion $__ClangMinorVersion $__BuildArch $__BuildType $__CodeCoverage $__IncludeTests $generator
 
     # Check that the makefiles were created.
 
-    if [ ! -f "$__IntermediatesDir/Makefile" ]; then
+    if [ ! -f "$__IntermediatesDir/$buildFile" ]; then
         echo "Failed to generate native component build project!"
         exit 1
     fi
@@ -92,7 +102,7 @@ build_coreclr()
 
     echo "Executing make install -j $NumProc $__UnprocessedBuildArgs"
 
-    make install -j $NumProc $__UnprocessedBuildArgs
+    $buildTool install -j $NumProc $__UnprocessedBuildArgs
     if [ $? != 0 ]; then
         echo "Failed to build coreclr components."
         exit 1
@@ -219,6 +229,7 @@ __RootBinDir="$__ProjectDir/bin"
 __LogsDir="$__RootBinDir/Logs"
 __UnprocessedBuildArgs=
 __MSBCleanBuildArgs=
+__UseNinja=false
 __SkipCoreCLR=false
 __SkipMSCorLib=false
 __CleanBuild=false
@@ -281,6 +292,9 @@ for i in "$@"
         __ClangMajorVersion=3
         __ClangMinorVersion=7
         ;;
+        ninja)
+        __UseNinja=1
+        ;;
         skipcoreclr)
         __SkipCoreCLR=1
         ;;
index 790014e..31e83ef 100755 (executable)
@@ -3,15 +3,16 @@
 # This file invokes cmake and generates the build system for gcc.
 #
 
-if [ $# -lt 4 -o $# -gt 6 ]
+if [ $# -lt 4 -o $# -gt 7 ]
 then
   echo "Usage..."
-  echo "gen-buildsys-clang.sh <path to top level CMakeLists.txt> <ClangMajorVersion> <ClangMinorVersion> <Architecture> [build flavor] [coverage]"
+  echo "gen-buildsys-clang.sh <path to top level CMakeLists.txt> <ClangMajorVersion> <ClangMinorVersion> <Architecture> [build flavor] [coverage] [ninja]"
   echo "Specify the path to the top level CMake file - <ProjectK>/src/NDP"
   echo "Specify the clang version to use, split into major and minor version"
   echo "Specify the target architecture." 
   echo "Optionally specify the build configuration (flavor.) Defaults to DEBUG." 
   echo "Optionally specify 'coverage' to enable code coverage build."
+  echo "Target ninja instead of make. ninja must be on the PATH."
   exit 1
 fi
 
@@ -37,6 +38,7 @@ build_arch="$4"
 buildtype=DEBUG
 code_coverage=OFF
 build_tests=OFF
+generator="Unix Makefiles"
 
 for i in "${@:5}"; do
     upperI="$(echo $i | awk '{print toupper($0)}')"
@@ -53,6 +55,9 @@ for i in "${@:5}"; do
       echo "Including tests directory in build."
       build_tests=ON
       ;;
+      NINJA)
+      generator=Ninja
+      ;;
       *)
       echo "Ignoring unknown arg '$i'"
     esac
@@ -127,6 +132,7 @@ if [[ -n "$CROSSCOMPILE" ]]; then
 fi
 
 cmake \
+  -G "$generator" \
   "-DCMAKE_USER_MAKE_RULES_OVERRIDE=$1/src/pal/tools/clang-compiler-override.txt" \
   "-DCMAKE_AR=$llvm_ar" \
   "-DCMAKE_LINKER=$llvm_link" \