Browse Source

Meta: Add the ability to specify clang with serenity.sh

This enables maintaining gcc and clang builds side-by-side.
Tom 3 years ago
parent
commit
77953a937d
2 changed files with 30 additions and 5 deletions
  1. 29 4
      Meta/serenity.sh
  2. 1 1
      Toolchain/BuildClang.sh

+ 29 - 4
Meta/serenity.sh

@@ -6,8 +6,9 @@ ARG0=$0
 print_help() {
     NAME=$(basename "$ARG0")
     cat <<EOF
-Usage: $NAME COMMAND [TARGET] [ARGS...]
+Usage: $NAME COMMAND [TARGET] [TOOLCHAIN] [ARGS...]
   Supported TARGETs: aarch64, i686, x86_64, lagom. Defaults to SERENITY_ARCH, or i686 if not set.
+  Supported TOOLCHAINs: gcc, clang. Defaults to gcc if not set.
   Supported COMMANDs:
     build:      Compiles the target binaries, [ARGS...] are passed through to ninja
     install:    Installs the target binary
@@ -86,9 +87,23 @@ if [ -n "$1" ]; then
 else
     TARGET="${SERENITY_ARCH:-"i686"}"
 fi
+
+case "$1" in
+    gcc|clang)
+        TOOLCHAIN_TYPE="$1"; shift
+        ;;
+    *)
+        TOOLCHAIN_TYPE="gcc"
+        ;;
+esac
+
 CMD_ARGS=( "$@" )
 CMAKE_ARGS=()
 
+if [ "$TOOLCHAIN_TYPE" = "clang" ]; then
+    CMAKE_ARGS+=("-DUSE_CLANG_TOOLCHAIN=1")
+fi
+
 get_top_dir() {
     git rev-parse --show-toplevel
 }
@@ -154,10 +169,15 @@ cmd_with_target() {
         SERENITY_SOURCE_DIR="$(get_top_dir)"
         export SERENITY_SOURCE_DIR
     fi
-    BUILD_DIR="$SERENITY_SOURCE_DIR/Build/$TARGET"
+    local TARGET_TOOLCHAIN=""
+    if [[ "$TOOLCHAIN_TYPE" != "gcc" && "$TARGET" != "lagom" ]]; then
+        # Only append the toolchain if it's not gcc
+        TARGET_TOOLCHAIN="$TOOLCHAIN_TYPE"
+    fi
+    BUILD_DIR="$SERENITY_SOURCE_DIR/Build/$TARGET$TARGET_TOOLCHAIN"
     if [ "$TARGET" != "lagom" ]; then
         export SERENITY_ARCH="$TARGET"
-        TOOLCHAIN_DIR="$SERENITY_SOURCE_DIR/Toolchain/Build/$TARGET"
+        TOOLCHAIN_DIR="$SERENITY_SOURCE_DIR/Toolchain/Local/$TARGET_TOOLCHAIN/$TARGET"
     fi
 }
 
@@ -184,7 +204,12 @@ delete_target() {
 }
 
 build_toolchain() {
-    ( cd "$SERENITY_SOURCE_DIR/Toolchain" && ARCH="$TARGET" ./BuildIt.sh )
+    echo "build_toolchain: $TOOLCHAIN_DIR"
+    if [ "$TOOLCHAIN_TYPE" = "clang" ]; then
+        ( cd "$SERENITY_SOURCE_DIR/Toolchain" && ARCH="$TARGET" ./BuildClang.sh )
+    else
+        ( cd "$SERENITY_SOURCE_DIR/Toolchain" && ARCH="$TARGET" ./BuildIt.sh )
+    fi
 }
 
 ensure_toolchain() {

+ 1 - 1
Toolchain/BuildClang.sh

@@ -12,7 +12,7 @@ LLVM_ARCH=
 [ "$ARCH" = "i686" ] && LLVM_ARCH="i386" || LLVM_ARCH="$ARCH"
 LLVM_TARGET="$LLVM_ARCH-pc-serenity"
 PREFIX="$DIR/Local/clang/$ARCH"
-BUILD="$DIR/../Build/$ARCH"
+BUILD="$DIR/../Build/clang/$ARCH"
 SYSROOT="$BUILD/Root"
 
 MD5SUM="md5sum"