由于最新版的mame代码使用了一些c++20的新特性,为了避免配置尝试用clang编译mame源码
由于clang对类型的检查相对严格,首先编辑一些在clang中无法通过编译的部分,以及一些在龙架构中会导致运行错误的部分
diff --git a/src/devices/cpu/drcbec.cpp b/src/devices/cpu/drcbec.cpp
index 0d514451..678fd830 100644
--- a/src/devices/cpu/drcbec.cpp
+++ b/src/devices/cpu/drcbec.cpp
@@ -21,7 +21,7 @@
#include <cfenv>
#include <cmath>
-#if defined(clang_major) && (clang_major < 12)
+#if defined(clang_major) && (clang_major < 20)
// can't guarantee floating point environment control works
#else
#pragma STDC FENV_ACCESS ON
diff --git a/src/emu/audio_effects/eq.cpp b/src/emu/audio_effects/eq.cpp
index 59b17dcc..c852bb49 100644
--- a/src/emu/audio_effects/eq.cpp
+++ b/src/emu/audio_effects/eq.cpp
@@ -243,7 +243,7 @@ void audio_effect_eq::build_low_shelf(u32 band)
float sr = m_sample_rate;
float f = std::clamp(float(m_f[band]), 1.0f, sr/2.0f - 1.0f);
- float V = pow(10, abs(m_db[band])/20);
- float V = pow(10, fabs(m_db[band])/20);
float K = tan(std::numbers::pi * f / sr);
float K2 = K*K;
diff --git a/src/lib/util/delegate.h b/src/lib/util/delegate.h
index d1f778a3..1c8d1e9d 100644
--- a/src/lib/util/delegate.h
+++ b/src/lib/util/delegate.h
@@ -146,6 +146,8 @@
#define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE
#elif defined(clang) && defined(i386) && defined(_WIN32)
#define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE
- #elif defined(loongarch)
- #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE
#else
#define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_ITANIUM
#endif
makefile不需要更改,clang中包含了-m64等参数的支持,但是运行make命令时要在命令行中指明要使用clang编译,配置为64位,code model为medium
PTR64=1 CFLAGS='-mcmodel=medium' LDFLAGS='-mcmodel=medium' OVERRIDE_CC=clang OVERRIDE_CXX=clang++ OVERRIDE_LD=lld OVERRIDE_AR=llvm-ar make