1: reduce python whl package size
2: unify api link logic on all OS
3: add option: MGE_WINDOWS_BUILD_WITH_STATIC_CRT
--- default OFF
--- if build CRT(vc runtime) with STATIC with megengine.dll
some CRT api will crash, for example, flush, so if you
build with static megengine, and do not want to install CRT
you can set MGE_WINDOWS_BUILD_WITH_STATIC_CRT TRUE
--- how to install CRT:
https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-160
install VC_redist.x64.exe
4: rename megengine_export to megengine_shared(only export needed symbols ),
caused by runtime symbols conflict with pytorch
GitOrigin-RevId: 93d8d80f29
for keep same build between gcc and clang
more detail:
```
printf("%d\n", std::isnan(std::numeric_limits<float>::quiet_NaN()));
printf("%d\n", std::isnan(std::nan("1")));
```
linux-clang and android-NDK clang have diff build logic with gcc and
macos/windows clang/clangcl
* clang++-12 -Ofast 1.cc
output is:
0
0
* clang++-12 -Ofast 1.cc -fno-finite-math-only
output is:
1
1
* g++ -Ofast 1.cc
output is:
1
1
GitOrigin-RevId: f0622e2ca0
(os vesion >= sp2) build with cmake
* cmake build support(xp sp2):
(dbg)EXTRA_CMAKE_ARGS="-DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2=ON"
./scripts/cmake-build/host_build.sh -m -d
(opt)EXTRA_CMAKE_ARGS="-DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2=ON"
./scripts/cmake-build/host_build.sh -m
* cmake build support(xp sp3):
(dbg)EXTRA_CMAKE_ARGS="-DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP=ON"
./scripts/cmake-build/host_build.sh -m -d
(opt)EXTRA_CMAKE_ARGS="-DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP=ON"
./scripts/cmake-build/host_build.sh -m
* internal behavior:
will define MGB_HAVE_THREAD=0 when enable
-DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2=ON
* refer to
https://docs.microsoft.com/en-us/cpp/build/configuring-programs-for-windows-xp?view=msvc-160
xp sp2(x86) do not support vc runtime fully, casused by KERNEL32.dll do not
implement some base apis for c++ std function, for example,
std::mutex/std::thread/std::condition_variable as a workround, we will
disable some MegEngine features on xp sp2 env, for exampe, multi-thread etc!
* about DNN_MUTEX/MGB_MUTEX/LITE_MUTEX, if your code will build in inference
code (even CPU backends), please replace std::mutex to DNN_MUTEX/MGB_MUTEX,
* about multi-thread, if you code need multi-thread support, please
enable it when MGB_HAVE_THREAD=1
* about test build env status
1: Visual Studio 2019(MSVC version <= 14.26.28801)---- pass
2: Visual Studio 2019(MSVC version > 14.26.28801) ---- failed
caused by this 'new' version will put VCR depends on win7
KERNEL32.DLL, this may be fixed at Visual Studio 2019 later version
but we do not test at this MR merge point
3: Visual Studio 2017 ---------- pass
4: Visual Studio 2014 ---------- pass
GitOrigin-RevId: ea6e1f8b4f
reason: some target call python3 to generate some headers,
if PYTHON_EXECUTABLE changed, headers will be invalid, which
will lead to rebuild most of obj, because this headers will
be include in most cpp/c, what`s more, this target do not depends
python3 version(python API) the output is same when use python3.5
or python3.x so change use PYTHON_EXECUTABLE to
PYTHON3_EXECUTABLE_WITHOUT_VERSION, when
PYTHON_EXECUTABLE/PYTHON_LIBRARY/PYTHON_INCLUDE_DIR changed,
can reuse the build obj
GitOrigin-RevId: c2ffe3ead3
detail: NDK do not support find_package(Threads)
but NDK support threads!
FIXME: compnode support NON-cpu compnode on no support threads env
FXIME: may have issue if ANDROID support CUDA, need fix it
if need support this case
GitOrigin-RevId: 19af74a6af
when cuda enable:
error log:
nn-8.0.4-trt-7.2.2.3-libs/TensorRT-7.2.2.3/lib/libnvinfer_static.a(profile.o):
undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
/usr/bin/ld:
/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libdl.so:
error adding symbols: DSO missing from command line
ld version:
GNU ld (GNU Binutils for Ubuntu) 2.34, example ubuntu20.04
error reason: at new ld, import flags with active zone
libnvinfer_static.a depend dlclose@@GLIBC_2.2.5, which need -ldl
ld -o rc4_encryptor xxx.o -ldl libnvinfer_static.a, which failed
so we put a -ldl for CUDA_LIBS env, then will change to
ld -o rc4_encryptor xxx.o libnvinfer_static.a -ldl
GitOrigin-RevId: adda3acb2d
* support arm-host and x86-cross-arm
* fix trt myelib cmake build issue at 'trt copy env'(about 'copy env', Please refs cb92123f)
about x86-cross-arm CUDA env:
1: run ./scripts/cmake-build/create_cuda_build_libs.py to prepare
cuda/cudnn/trt env(download deb package info, Please refs create_cuda_build_libs.py)
2: export TRT_ROOT_DIR=xxxxx which may create by step 1
3: export CUDNN_ROOT_DIR=xxxx which may create by step 1
4: export PATH=xxxx:$PATH xxxx need create by step 1, which nvcc have
relative path dir: ../targets/sbsa-linux/
GitOrigin-RevId: 440c76052aabe5b07a4b64d126e759f919c257a8
as some reason: some version of trt/cudnn need
-Wl,--whole-archive attribute to fix cuda issue,
target A(CMAKE OBJECT,eg megbrain/megdnn): -Wl,--whole-archive depend on trt/cudnn
target B(SHARED LIBS,eg libmegengine.so) --> A with `PUBLIC` depends
target C(SHARED LIBS,eg _impertive.so) --> B with `PUBLIC` depends,
then ld will force link fatbin section into C, which will be undesired
what`s more, attribute PUBLIC/PRIVATE do not take effect
to OBJECT library(megbrain/megdnn)
what`s more, megengine/megengine_export have to PUBLIC for
mgb/imperative target, as SRC/include depends
so we pull cudalib depend from megbrain/megdnn to
megengine/megengine_export on linux os, to finall
target at windows os, for example lar on windows
GitOrigin-RevId: b278a69e1c