This is an automated email from the ASF dual-hosted git repository.

xiaofeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git


The following commit(s) were added to refs/heads/master by this push:
     new 8b340f95 Get gcc version by script to support cross-compile (#2567)
8b340f95 is described below

commit 8b340f95a3a2ad95867ce2ca75b1737b035fb1d9
Author: Xiaofeng Wang <wasp...@gmail.com>
AuthorDate: Fri Mar 22 11:13:09 2024 +0800

    Get gcc version by script to support cross-compile (#2567)
    
    Fix #1631
---
 config_brpc.sh             |  2 +-
 tools/print_gcc_version.cc | 34 ----------------------------------
 tools/print_gcc_version.sh | 41 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 42 insertions(+), 35 deletions(-)

diff --git a/config_brpc.sh b/config_brpc.sh
index 777b76be..cc945d30 100755
--- a/config_brpc.sh
+++ b/config_brpc.sh
@@ -89,7 +89,7 @@ elif [ -z "$CXX" ]; then
     exit 1
 fi
 
-GCC_VERSION=$($CXX tools/print_gcc_version.cc -o print_gcc_version && 
./print_gcc_version && rm ./print_gcc_version)
+GCC_VERSION=$(CXX=$CXX tools/print_gcc_version.sh)
 if [ $GCC_VERSION -gt 0 ] && [ $GCC_VERSION -lt 40800 ]; then
     >&2 $ECHO "GCC is too old, please install a newer version supporting C++11"
     exit 1
diff --git a/tools/print_gcc_version.cc b/tools/print_gcc_version.cc
deleted file mode 100644
index cfd615ce..00000000
--- a/tools/print_gcc_version.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-#include <stdio.h>
-int main() {
-#if defined(__clang__)
-    const int major_v = __GNUC__;
-    int minor_v = __GNUC_MINOR__;
-    if (major_v == 4 && minor_v <= 8) {
-        // Make version of clang >= 4.8 so that it's not rejected by 
config_brpc.sh
-        minor_v = 8;
-    }
-    printf("%d\n", (major_v * 10000 + minor_v * 100));
-#elif defined(__GNUC__)
-    printf("%d\n", (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + 
__GNUC_PATCHLEVEL__));
-#else
-    printf("0\n");
-#endif
-    return 0;
-}
diff --git a/tools/print_gcc_version.sh b/tools/print_gcc_version.sh
new file mode 100755
index 00000000..00abf6cc
--- /dev/null
+++ b/tools/print_gcc_version.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+while read -r line; do
+    val=$(echo "$line" | awk '{print $3}')
+    if   [[ $line =~ __clang__ ]]; then
+        CLANG=${val}
+    elif [[ $line =~ __GNUC__ ]]; then
+        GNUC=${val}
+    elif [[ $line =~ __GNUC_MINOR__ ]]; then
+        GNUC_MINOR=${val}
+    elif [[ $line =~ __GNUC_PATCHLEVEL__ ]]; then
+        GNUC_PATCHLEVEL=${val}
+    fi
+done < <("${CXX:-c++}" -dM -E - < /dev/null | grep 
"__clang__\|__GNUC__\|__GNUC_MINOR__\|__GNUC_PATCHLEVEL__")
+
+if [ -n "$GNUC" ] && [ -n "$GNUC_MINOR" ] && [ -n "$GNUC_PATCHLEVEL" ]; then
+    # Calculate GCC/Clang version
+    GCC_VERSION=$((GNUC * 10000 + GNUC_MINOR * 100 + GNUC_PATCHLEVEL))
+    if [ -n "$CLANG" ] && [ "40000" -lt $GCC_VERSION ] && [ $GCC_VERSION -lt 
"40800" ]; then
+        # Make version of clang >= 4.8 so that it's not rejected by 
config_brpc.sh
+        GCC_VERSION=40800
+    fi
+    echo $GCC_VERSION
+else
+    echo 0
+fi


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org
For additional commands, e-mail: dev-h...@brpc.apache.org

Reply via email to