未验证 提交 6335e6a0 编写于 作者: chen.zhiyu's avatar chen.zhiyu 提交者: GitHub

add musl option (#27798)

上级 e8a5aefb
...@@ -131,6 +131,7 @@ option(WITH_LITE "Compile Paddle Fluid with Lite Engine" OFF) ...@@ -131,6 +131,7 @@ option(WITH_LITE "Compile Paddle Fluid with Lite Engine" OFF)
option(WITH_NCCL "Compile PaddlePaddle with NCCL support" ON) option(WITH_NCCL "Compile PaddlePaddle with NCCL support" ON)
option(WITH_CRYPTO "Compile PaddlePaddle with crypto support" ON) option(WITH_CRYPTO "Compile PaddlePaddle with crypto support" ON)
option(WITH_ARM "Compile PaddlePaddle with arm support" OFF) option(WITH_ARM "Compile PaddlePaddle with arm support" OFF)
option(WITH_MUSL "Compile with musl libc instead of gblic" OFF)
# PY_VERSION # PY_VERSION
if(NOT PY_VERSION) if(NOT PY_VERSION)
......
...@@ -51,6 +51,16 @@ if(WIN32) ...@@ -51,6 +51,16 @@ if(WIN32)
endif(NOT MSVC) endif(NOT MSVC)
endif(WIN32) endif(WIN32)
if(WITH_MUSL)
add_definitions(-DPADDLE_WITH_MUSL)
message(STATUS, "Set compile option WITH_MKL=OFF when WITH_MUSL=ON")
SET(WITH_MKL OFF)
message(STATUS, "Set compile option WITH_GPU=OFF when WITH_MUSL=ON")
SET(WITH_GPU OFF)
endif()
if(WITH_PSLIB) if(WITH_PSLIB)
add_definitions(-DPADDLE_WITH_PSLIB) add_definitions(-DPADDLE_WITH_PSLIB)
endif() endif()
......
...@@ -88,7 +88,7 @@ if(NOT APPLE AND NOT WIN32) ...@@ -88,7 +88,7 @@ if(NOT APPLE AND NOT WIN32)
set_target_properties(paddle_fluid_shared PROPERTIES LINK_FLAGS "${LINK_FLAGS}") set_target_properties(paddle_fluid_shared PROPERTIES LINK_FLAGS "${LINK_FLAGS}")
# check symbol hidden # check symbol hidden
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/check_symbol.cmake FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/check_symbol.cmake
"execute_process(COMMAND bash -c \"${CMAKE_CURRENT_SOURCE_DIR}/check_symbol.sh" "execute_process(COMMAND sh -c \"${CMAKE_CURRENT_SOURCE_DIR}/check_symbol.sh"
" ${CMAKE_CURRENT_BINARY_DIR}/libpaddle_fluid.so\" RESULT_VARIABLE symbol_res)\n" " ${CMAKE_CURRENT_BINARY_DIR}/libpaddle_fluid.so\" RESULT_VARIABLE symbol_res)\n"
"if(NOT \"\${symbol_res}\" STREQUAL \"0\")\n" "if(NOT \"\${symbol_res}\" STREQUAL \"0\")\n"
" message(FATAL_ERROR \"Check symbol failed.\")\n" " message(FATAL_ERROR \"Check symbol failed.\")\n"
......
#!/bin/bash #!/bin/sh
lib=$1 lib=$1
if [ $# -ne 1 ]; then echo "No input library"; exit -1 ; fi if [ $# -ne 1 ]; then echo "No input library"; exit -1 ; fi
......
...@@ -47,6 +47,10 @@ limitations under the License. */ ...@@ -47,6 +47,10 @@ limitations under the License. */
#include <type_traits> #include <type_traits>
#include <utility> #include <utility>
#if !defined(_WIN32) && !defined(PADDLE_WITH_MUSL)
#include <execinfo.h>
#endif
#define GLOG_NO_ABBREVIATED_SEVERITIES // msvc conflict logging with windows.h #define GLOG_NO_ABBREVIATED_SEVERITIES // msvc conflict logging with windows.h
#include "glog/logging.h" #include "glog/logging.h"
#include "paddle/fluid/platform/errors.h" #include "paddle/fluid/platform/errors.h"
...@@ -236,13 +240,14 @@ inline std::string SimplifyDemangleStr(std::string str) { ...@@ -236,13 +240,14 @@ inline std::string SimplifyDemangleStr(std::string str) {
} }
inline std::string GetCurrentTraceBackString() { inline std::string GetCurrentTraceBackString() {
static constexpr int TRACE_STACK_LIMIT = 100;
std::ostringstream sout; std::ostringstream sout;
sout << "\n\n--------------------------------------\n"; sout << "\n\n--------------------------------------\n";
sout << "C++ Traceback (most recent call last):"; sout << "C++ Traceback (most recent call last):";
sout << "\n--------------------------------------\n"; sout << "\n--------------------------------------\n";
#if !defined(_WIN32) #if !defined(_WIN32) && !defined(PADDLE_WITH_MUSL)
static constexpr int TRACE_STACK_LIMIT = 100;
void* call_stack[TRACE_STACK_LIMIT]; void* call_stack[TRACE_STACK_LIMIT];
auto size = backtrace(call_stack, TRACE_STACK_LIMIT); auto size = backtrace(call_stack, TRACE_STACK_LIMIT);
auto symbols = backtrace_symbols(call_stack, size); auto symbols = backtrace_symbols(call_stack, size);
...@@ -261,7 +266,7 @@ inline std::string GetCurrentTraceBackString() { ...@@ -261,7 +266,7 @@ inline std::string GetCurrentTraceBackString() {
} }
free(symbols); free(symbols);
#else #else
sout << "Windows not support stack backtrace yet.\n"; sout << "Not support stack backtrace yet.\n";
#endif #endif
return sout.str(); return sout.str();
} }
......
...@@ -25,6 +25,8 @@ limitations under the License. */ ...@@ -25,6 +25,8 @@ limitations under the License. */
classname& operator=(classname&&) = delete classname& operator=(classname&&) = delete
#endif #endif
#ifndef PADDLE_WITH_MUSL
#if defined(__FLT_MAX__) #if defined(__FLT_MAX__)
#define FLT_MAX __FLT_MAX__ #define FLT_MAX __FLT_MAX__
#endif // __FLT_MAX__ #endif // __FLT_MAX__
#endif // PADDLE_WITH_MUSL
...@@ -14,11 +14,11 @@ ...@@ -14,11 +14,11 @@
#pragma once #pragma once
#include <cstdio>
#include <stdexcept>
#include <time.h> #include <time.h>
#include <cstdio>
#include <memory> #include <memory>
#include <stdexcept>
#include <string> #include <string>
#define GLOG_NO_ABBREVIATED_SEVERITIES // msvc conflict logging with windows.h #define GLOG_NO_ABBREVIATED_SEVERITIES // msvc conflict logging with windows.h
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#if !defined(_WIN32) #if !defined(_WIN32)
#include <dlfcn.h> // dladdr #include <dlfcn.h> // dladdr
#include <execinfo.h> // backtrace
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/time.h> #include <sys/time.h>
#include <algorithm> // std::accumulate #include <algorithm> // std::accumulate
......
...@@ -205,8 +205,15 @@ def pre_load(dso_name): ...@@ -205,8 +205,15 @@ def pre_load(dso_name):
load_dso(dso_path) load_dso(dso_path)
def get_glibc_ver(): def get_libc_ver():
return run_shell_command("ldd --version | awk '/ldd/{print $NF}'") ldd_glibc = run_shell_command("ldd --version | awk '/ldd/{print $NF}'")
if ldd_glibc is not None:
return ("glibc", ldd_glibc)
ldd_musl = run_shell_command("ldd 2>&1 | awk '/Version/{print $NF}'")
if ldd_musl is not None:
return ("musl", ldd_musl)
return (None, None)
def less_than_ver(a, b): def less_than_ver(a, b):
...@@ -231,8 +238,9 @@ def less_than_ver(a, b): ...@@ -231,8 +238,9 @@ def less_than_ver(a, b):
# For paddle, the problem is that 'libgomp' is a DSO with static TLS, and it is loaded after 14 DSOs. # For paddle, the problem is that 'libgomp' is a DSO with static TLS, and it is loaded after 14 DSOs.
# So, here is a tricky way to solve the problem by pre load 'libgomp' before 'core_avx.so'. # So, here is a tricky way to solve the problem by pre load 'libgomp' before 'core_avx.so'.
# The final solution is to upgrade glibc to > 2.22 on the target system. # The final solution is to upgrade glibc to > 2.22 on the target system.
if platform.system().lower() == 'linux' and less_than_ver(get_glibc_ver(), if platform.system().lower() == 'linux':
'2.23'): libc_type, libc_ver = get_libc_ver()
if libc_type == 'glibc' and less_than_ver(libc_ver, '2.23'):
try: try:
pre_load('libgomp') pre_load('libgomp')
except Exception as e: except Exception as e:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册