From f8303ec6fb94ad15dcfdef59c315eef609768734 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Thu, 14 Dec 2017 16:15:06 +0200 Subject: [PATCH] Adds `macports_clang` build flag to build using clang-5.0 form MacPorts (with OpenMP support). --- SConstruct | 1 + platform/osx/SCsub | 6 +++++- platform/osx/detect.py | 13 +++++++++++++ thirdparty/README.md | 3 +++ .../vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c | 5 +++-- 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/SConstruct b/SConstruct index cf18bfe18a5..4f2df947c62 100644 --- a/SConstruct +++ b/SConstruct @@ -169,6 +169,7 @@ opts.Add(EnumVariable('warnings', "Set the level of warnings emitted during comp opts.Add(BoolVariable('progress', "Show a progress indicator during build", True)) opts.Add(BoolVariable('dev', "If yes, alias for verbose=yes warnings=all", False)) opts.Add(BoolVariable('openmp', "If yes, enable OpenMP", True)) +opts.Add(BoolVariable('macports_clang', "Build using clang-5.0 from MacPorts", False)) # Thirdparty libraries opts.Add(BoolVariable('builtin_enet', "Use the builtin enet library", True)) diff --git a/platform/osx/SCsub b/platform/osx/SCsub index cb88bc470af..13ce14f040e 100644 --- a/platform/osx/SCsub +++ b/platform/osx/SCsub @@ -4,7 +4,11 @@ import os Import('env') def make_debug(target, source, env): - os.system('dsymutil %s -o %s.dSYM' % (target[0], target[0])) + if (env["macports_clang"]): + mpprefix = os.environ.get("MACPORTS_PREFIX", "/opt/local") + os.system(mpprefix + '/libexec/llvm-5.0/bin/llvm-dsymutil %s -o %s.dSYM' % (target[0], target[0])) + else: + os.system('dsymutil %s -o %s.dSYM' % (target[0], target[0])) files = [ 'crash_handler_osx.mm', diff --git a/platform/osx/detect.py b/platform/osx/detect.py index ff7cf2ad2fe..77a4ee1a48c 100644 --- a/platform/osx/detect.py +++ b/platform/osx/detect.py @@ -72,6 +72,19 @@ def configure(env): else: # 64-bit, default env.Append(CCFLAGS=['-arch', 'x86_64']) env.Append(LINKFLAGS=['-arch', 'x86_64']) + if (env["macports_clang"]): + mpprefix = os.environ.get("MACPORTS_PREFIX", "/opt/local") + env["CC"] = mpprefix + "/libexec/llvm-5.0/bin/clang" + env["LD"] = mpprefix + "/libexec/llvm-5.0/bin/clang++" + env["CXX"] = mpprefix + "/libexec/llvm-5.0/bin/clang++" + env['AR'] = mpprefix + "/libexec/llvm-5.0/bin/llvm-ar" + env['RANLIB'] = mpprefix + "/libexec/llvm-5.0/bin/llvm-ranlib" + env['AS'] = mpprefix + "/libexec/llvm-5.0/bin/llvm-as" + env.Append(CCFLAGS=['-D__MACPORTS__']) #hack to fix libvpx MM256_BROADCASTSI128_SI256 define + if (env["openmp"]): + env.Append(CPPFLAGS=['-fopenmp']) + env.Append(LINKFLAGS=['-L' + mpprefix + '/lib/libomp/']) + env.Append(LIBS=['gomp']) else: # osxcross build root = os.environ.get("OSXCROSS_ROOT", 0) diff --git a/thirdparty/README.md b/thirdparty/README.md index dd931b2fcb4..fbce76fcc73 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -179,6 +179,9 @@ Files extracted from upstream source: TODO. +Important: File `libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c` has +Godot-made change marked with `// -- GODOT --` comments. + ## libwebp diff --git a/thirdparty/libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c b/thirdparty/libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c index b7186785379..d8a92354c98 100644 --- a/thirdparty/libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c +++ b/thirdparty/libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c @@ -40,11 +40,12 @@ DECLARE_ALIGNED(32, static const uint8_t, filt4_global_avx2[32]) = { }; #if defined(__clang__) +// -- GODOT start - # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ <= 3) || \ - (defined(__APPLE__) && \ + (!defined(__MACPORTS__) && defined(__APPLE__) && \ ((__clang_major__ == 4 && __clang_minor__ <= 2) || \ (__clang_major__ == 5 && __clang_minor__ == 0))) - +// -- GODOT end -- # define MM256_BROADCASTSI128_SI256(x) \ _mm_broadcastsi128_si256((__m128i const *)&(x)) # else // clang > 3.3, and not 5.0 on macosx.