« Qt Brynhildr on Mac (arm64) Ver.2.5.3 Beta (dmg) | トップページ

2024年10月29日 (火)

QtでmacOSのUniversal Binary版をビルドする

えっと、macOSでUniversal Binary版をビルドするように変更したのでその説明をしてみようと思います。

  1. x64用とarm64用のソースコードを一度に指定する必要があるのでx64専用のソースコードはマクロ"__x86_64__"が定義されたときのみ、arm64専用のソースコードはマクロ"__aarch64__"が定義されたときのみ有効になるように変更
  2. ライブラリ名がx64とarm64で同じだとまずいのでlibvpx_x64.a/libcelt_x64.a、libvpx_arm64.a/libcelt_arm64.aと別名に変更
  3. qtbrynhildr.proで"QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64"と指定し、configにmacos-x64/macos-arm64を両方指定する

以下が修正差分です。

diff --git a/src/graphicsthread/decoder_vp8_avx.cpp b/src/graphicsthread/decoder_vp8_avx.cpp
index fce2bd69..a3c614ee 100644
--- a/src/graphicsthread/decoder_vp8_avx.cpp
+++ b/src/graphicsthread/decoder_vp8_avx.cpp
@@ -1,5 +1,6 @@
// -*- mode: c++; coding: utf-8-unix -*-
// Copyright (c) 2020- FunFun <fu.aba.dc5@gmail.com>
+#if defined(__x86_64__) // for Universal Binary

// Common Header
#include "common/common.h"
@@ -58,3 +59,5 @@ QImage* DecoderVP8AVX::getDesktopImage(int numOfThread)
}

} // end of namespace qtbrynhildr
+
+#endif // defined(__x86_64__) // for Universal Binary
diff --git a/src/graphicsthread/decoder_vp8_avx2.cpp b/src/graphicsthread/decoder_vp8_avx2.cpp
index 1941e794..71c77120 100644
--- a/src/graphicsthread/decoder_vp8_avx2.cpp
+++ b/src/graphicsthread/decoder_vp8_avx2.cpp
@@ -1,5 +1,6 @@
// -*- mode: c++; coding: utf-8-unix -*-
// Copyright (c) 2020- FunFun <fu.aba.dc5@gmail.com>
+#if defined(__x86_64__) // for Universal Binary

// Common Header
#include "common/common.h"
@@ -58,3 +59,5 @@ QImage* DecoderVP8AVX2::getDesktopImage(int numOfThread)
}

} // end of namespace qtbrynhildr
+
+#endif // defined(__x86_64__) // for Universal Binary
diff --git a/src/graphicsthread/decoder_vp8_neon.cpp b/src/graphicsthread/decoder_vp8_neon.cpp
index 5db4eda4..cb09f966 100644
--- a/src/graphicsthread/decoder_vp8_neon.cpp
+++ b/src/graphicsthread/decoder_vp8_neon.cpp
@@ -1,5 +1,6 @@
// -*- mode: c++; coding: utf-8-unix -*-
// Copyright (c) 2020- FunFun <fu.aba.dc5@gmail.com>
+#if defined(__aarch64__) // for Universal Binary

// Common Header
#include "common/common.h"
@@ -58,3 +59,5 @@ QImage* DecoderVP8NEON::getDesktopImage(int numOfThread)
}

} // end of namespace qtbrynhildr
+
+#endif // defined(__aarch64__)
diff --git a/src/graphicsthread/decoder_vp8_sse.cpp b/src/graphicsthread/decoder_vp8_sse.cpp
index e9070d22..e91403b2 100644
--- a/src/graphicsthread/decoder_vp8_sse.cpp
+++ b/src/graphicsthread/decoder_vp8_sse.cpp
@@ -1,5 +1,6 @@
// -*- mode: c++; coding: utf-8-unix -*-
// Copyright (c) 2020- FunFun <fu.aba.dc5@gmail.com>
+#if defined(__x86_64__) // for Universal Binary

// Common Header
#include "common/common.h"
@@ -58,3 +59,5 @@ QImage* DecoderVP8SSE::getDesktopImage(int numOfThread)
}

} // end of namespace qtbrynhildr
+
+#endif // defined(__x86_64__) // for Universal Binary
diff --git a/src/graphicsthread/yuv2rgb/yuv2rgb_avx.cpp b/src/graphicsthread/yuv2rgb/yuv2rgb_avx.cpp
index bffa2112..e5e8282b 100644
--- a/src/graphicsthread/yuv2rgb/yuv2rgb_avx.cpp
+++ b/src/graphicsthread/yuv2rgb/yuv2rgb_avx.cpp
@@ -1,5 +1,6 @@
// -*- mode: c++; coding: utf-8-unix -*-
// Copyright (c) 2018- FunFun <fu.aba.dc5@gmail.com>
+#if defined(__x86_64__) // for Universal Binary

// Common Header
#include "common/common.h"
@@ -515,3 +516,5 @@ void convertYUVtoRGB_SIMD_AVX_GSV(uchar *ytop, uchar* utop, uchar *vtop, uchar *
#endif // QTB_SIMD_SUPPORT

} // end of namespace qtbrynhildr
+
+#endif // defined(__x86_64__) // for Universal Binary
diff --git a/src/graphicsthread/yuv2rgb/yuv2rgb_sse.cpp b/src/graphicsthread/yuv2rgb/yuv2rgb_sse.cpp
index f674f316..177c5c78 100644
--- a/src/graphicsthread/yuv2rgb/yuv2rgb_sse.cpp
+++ b/src/graphicsthread/yuv2rgb/yuv2rgb_sse.cpp
@@ -1,5 +1,6 @@
// -*- mode: c++; coding: utf-8-unix -*-
// Copyright (c) 2018- FunFun <fu.aba.dc5@gmail.com>
+#if defined(__x86_64__) // for Universal Binary

// Common Header
#include "common/common.h"
@@ -906,3 +907,5 @@ void convertYUVtoRGB_SIMD_SSE_GSV(uchar *ytop, uchar* utop, uchar *vtop, uchar *
#endif // QTB_SIMD_SUPPORT

} // end of namespace qtbrynhildr
+
+#endif // defined(__x86_64__) // for Universal Binary
diff --git a/src/graphicsthread/yuv2rgb/yuv2rgb_sse_avx2.cpp b/src/graphicsthread/yuv2rgb/yuv2rgb_sse_avx2.cpp
index 0aaac5b9..a6372428 100644
--- a/src/graphicsthread/yuv2rgb/yuv2rgb_sse_avx2.cpp
+++ b/src/graphicsthread/yuv2rgb/yuv2rgb_sse_avx2.cpp
@@ -1,5 +1,6 @@
// -*- mode: c++; coding: utf-8-unix -*-
// Copyright (c) 2018- FunFun <fu.aba.dc5@gmail.com>
+#if defined(__x86_64__) // for Universal Binary

// Common Header
#include "common/common.h"
@@ -872,3 +873,5 @@ void convertYUVtoRGB_SIMD_AVX2_GSV(uchar *ytop, uchar* utop, uchar *vtop, uchar
#endif // QTB_SIMD_SUPPORT

} // end of namespace qtbrynhildr
+
+#endif // defined(__x86_64__) // for Universal Binary
diff --git a/src/pro/spec_celt.pro b/src/pro/spec_celt.pro
index 07a8ab54..faddf34b 100644
--- a/src/pro/spec_celt.pro
+++ b/src/pro/spec_celt.pro
@@ -9,3 +9,13 @@ celt {
else {
DEFINES += QTB_CELT_SUPPORT=0
}
+
+macos-x64 {
+ LIBS -= -L../libs/celt/$$BUILDARCH -lcelt
+ LIBS += -L../libs/celt/macos-x64 -lcelt_x64
+}
+
+macos-arm64 {
+ LIBS -= -L../libs/celt/$$BUILDARCH -lcelt
+ LIBS += -L../libs/celt/macos-arm64 -lcelt_arm64
+}
diff --git a/src/pro/spec_vp8.pro b/src/pro/spec_vp8.pro
index fde86aa7..4e2ff7ba 100644
--- a/src/pro/spec_vp8.pro
+++ b/src/pro/spec_vp8.pro
@@ -12,6 +12,16 @@ HEADERS += graphicsthread/decoder_vp8_cpp.h
SOURCES += graphicsthread/decoder_vp8_cpp.cpp
}

+macos-x64 {
+ LIBS -= -L../libs/vpx/$$BUILDARCH -lvpx
+ LIBS += -L../libs/vpx/macos-x64 -lvpx_x64
+}
+
+macos-arm64 {
+ LIBS -= -L../libs/vpx/$$BUILDARCH -lvpx
+ LIBS += -L../libs/vpx/macos-arm64 -lvpx_arm64
+}
+
# VP8-AVX2
vp8-avx2 {
SOURCES += graphicsthread/yuv2rgb/yuv2rgb_sse_avx2.cpp
diff --git a/src/qtbrynhildr.pro b/src/qtbrynhildr.pro
index 5a9d2856..edcd7c39 100644
--- a/src/qtbrynhildr.pro
+++ b/src/qtbrynhildr.pro
@@ -117,7 +117,8 @@ include (pro/os_freebsd.pro)
# ------------------------------------------------------------------------------
macx {
CONFIG += macos-x64
-#CONFIG += macos-arm64
+CONFIG += macos-arm64
+QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64
QMAKE_CXXFLAGS += -flto
}
include (pro/os_macos.pro)

« Qt Brynhildr on Mac (arm64) Ver.2.5.3 Beta (dmg) | トップページ

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« Qt Brynhildr on Mac (arm64) Ver.2.5.3 Beta (dmg) | トップページ