From dc0c7c457386bf666f41dd579836d9558a8f5775 Mon Sep 17 00:00:00 2001 From: Pat Gavlin Date: Sun, 8 Nov 2015 20:00:30 -0800 Subject: [PATCH] Add support for ninja to the CoreCLR build. Just what it says on the tin. --- build.sh | 22 ++++++++++++++++++---- src/pal/tools/gen-buildsys-clang.sh | 10 ++++++++-- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/build.sh b/build.sh index 80e5a20..52bfe13 100755 --- 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 ;; diff --git a/src/pal/tools/gen-buildsys-clang.sh b/src/pal/tools/gen-buildsys-clang.sh index 790014e..31e83ef 100755 --- a/src/pal/tools/gen-buildsys-clang.sh +++ b/src/pal/tools/gen-buildsys-clang.sh @@ -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 [build flavor] [coverage]" + echo "gen-buildsys-clang.sh [build flavor] [coverage] [ninja]" echo "Specify the path to the top level CMake file - /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" \ -- 2.7.4