30 static_assert (
sizeof (pointer_sized_int) ==
sizeof (
void*),
"Basic sanity test failed: please report!");
31 static_assert (
sizeof (int8) == 1,
"Basic sanity test failed: please report!");
32 static_assert (
sizeof (uint8) == 1,
"Basic sanity test failed: please report!");
33 static_assert (
sizeof (int16) == 2,
"Basic sanity test failed: please report!");
34 static_assert (
sizeof (uint16) == 2,
"Basic sanity test failed: please report!");
35 static_assert (
sizeof (int32) == 4,
"Basic sanity test failed: please report!");
36 static_assert (
sizeof (uint32) == 4,
"Basic sanity test failed: please report!");
37 static_assert (
sizeof (int64) == 8,
"Basic sanity test failed: please report!");
38 static_assert (
sizeof (uint64) == 8,
"Basic sanity test failed: please report!");
41 "." JUCE_STRINGIFY(JUCE_MINOR_VERSION)
42 "." JUCE_STRINGIFY(JUCE_BUILDNUMBER);
45#if JUCE_ANDROID && ! defined (JUCE_DISABLE_JUCE_VERSION_PRINTING)
46 #define JUCE_DISABLE_JUCE_VERSION_PRINTING 1
49#if JUCE_DEBUG && ! JUCE_DISABLE_JUCE_VERSION_PRINTING
50 struct JuceVersionPrinter
54 DBG (SystemStats::getJUCEVersion());
58 static JuceVersionPrinter juceVersionPrinter;
77 ids.
add (address.toString());
89 void initialise()
noexcept;
91 int numLogicalCPUs = 0, numPhysicalCPUs = 0;
93 bool hasMMX =
false, hasSSE =
false, hasSSE2 =
false, hasSSE3 =
false,
94 has3DNow =
false, hasSSSE3 =
false, hasSSE41 =
false,
95 hasSSE42 =
false, hasAVX =
false, hasAVX2 =
false,
96 hasAVX512F =
false, hasAVX512BW =
false, hasAVX512CD =
false,
97 hasAVX512DQ =
false, hasAVX512ER =
false, hasAVX512IFMA =
false,
98 hasAVX512PF =
false, hasAVX512VBMI =
false, hasAVX512VL =
false,
99 hasAVX512VPOPCNTDQ =
false,
139 #if JUCE_ANDROID || JUCE_MINGW
143 HANDLE process = GetCurrentProcess();
144 SymInitialize (process,
nullptr, TRUE);
147 int frames = (int) CaptureStackBackTrace (0, numElementsInArray (stack), stack,
nullptr);
150 symbol.
calloc (
sizeof (SYMBOL_INFO) + 256, 1);
151 symbol->MaxNameLen = 255;
152 symbol->SizeOfStruct =
sizeof (SYMBOL_INFO);
154 for (
int i = 0; i < frames; ++i)
156 DWORD64 displacement = 0;
158 if (SymFromAddr (process, (DWORD64) stack[i], &displacement, symbol))
162 IMAGEHLP_MODULE64 moduleInfo;
163 zerostruct (moduleInfo);
164 moduleInfo.SizeOfStruct =
sizeof (moduleInfo);
166 if (::SymGetModuleInfo64 (process, symbol->ModBase, &moduleInfo))
167 result << moduleInfo.ModuleName <<
": ";
169 result << symbol->Name <<
" + 0x" <<
String::toHexString ((int64) displacement) << newLine;
175 int frames = backtrace (stack, numElementsInArray (stack));
176 char** frameStrings = backtrace_symbols (stack, frames);
178 for (
int i = 0; i < frames; ++i)
179 result << frameStrings[i] << newLine;
181 ::free (frameStrings);
191static LONG WINAPI handleCrash (LPEXCEPTION_POINTERS ep)
193 globalCrashHandler (ep);
194 return EXCEPTION_EXECUTE_HANDLER;
197static void handleCrash (
int signum)
199 globalCrashHandler ((
void*) (pointer_sized_int) signum);
200 kill (getpid(), SIGKILL);
203int juce_siginterrupt (
int sig,
int flag);
208 jassert (handler !=
nullptr);
209 globalCrashHandler = handler;
212 SetUnhandledExceptionFilter (handleCrash);
214 const int signals[] = { SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT, SIGSYS };
216 for (
int i = 0; i < numElementsInArray (signals); ++i)
218 ::signal (signals[i], handleCrash);
219 juce_siginterrupt (signals[i], 1);
226 #if JUCE_MAC || JUCE_IOS
227 static bool firstQuery =
true;
228 static bool isRunningInAppSandbox =
false;
244 return isRunningInAppSandbox;
Represents a local file or directory.
bool isDirectory() const
Checks whether the file is a directory that exists.
String getFileExtension() const
Returns the file's extension.
static File JUCE_CALLTYPE getSpecialLocation(const SpecialLocationType type)
Finds the location of a special type of file or directory, such as a home folder or documents folder.
@ invokedExecutableFile
Returns the file that was invoked to launch this executable.
@ windowsSystemDirectory
On a Windows machine, returns the location of the Windows/System32 folder.
File getParentDirectory() const
Returns the directory that contains this file or directory.
uint64 getFileIdentifier() const
Returns a unique identifier for the file, if one is available.
Very simple container class to hold a pointer to some data on the heap.
void calloc(SizeType newNumElements, const size_t elementSize=sizeof(ElementType))
Allocates a specified amount of memory and clears it.
static Array< MACAddress > getAllAddresses()
Returns a list of the MAC addresses of all the available network cards.
A special array for holding a list of strings.
void add(String stringToAdd)
Appends a string at the end of the array.
bool isEmpty() const noexcept
Returns true if the array is empty, false otherwise.
static String toHexString(IntegerType number)
Returns a string representing this numeric value in hexadecimal.
static bool hasAVX512CD() noexcept
Returns true if Intel AVX-512 Conflict Detection instructions are available.
static String getStackBacktrace()
Returns a backtrace of the current call-stack.
static bool hasMMX() noexcept
Returns true if Intel MMX instructions are available.
static void setApplicationCrashHandler(CrashHandlerFunction)
Sets up a global callback function that will be called if the application executes some kind of illeg...
void(*)(void *) CrashHandlerFunction
A function type for use in setApplicationCrashHandler().
static int getNumPhysicalCpus() noexcept
Returns the number of physical CPU cores.
static bool hasAVX512ER() noexcept
Returns true if Intel AVX-512 Exponential and Reciprocal instructions are available.
static bool has3DNow() noexcept
Returns true if AMD 3DNOW instructions are available.
static bool hasAVX2() noexcept
Returns true if Intel AVX2 instructions are available.
static bool hasAVX512VPOPCNTDQ() noexcept
Returns true if Intel AVX-512 Vector Population Count Double and Quad-word instructions are available...
static bool hasSSE() noexcept
Returns true if Intel SSE instructions are available.
static bool hasAVX512DQ() noexcept
Returns true if Intel AVX-512 Doubleword and Quadword instructions are available.
static bool isRunningInAppExtensionSandbox() noexcept
Returns true if this code is running inside an app extension sandbox.
static bool hasNeon() noexcept
Returns true if ARM NEON instructions are available.
static bool hasAVX512F() noexcept
Returns true if Intel AVX-512 Foundation instructions are available.
static bool hasSSE3() noexcept
Returns true if Intel SSE3 instructions are available.
static bool hasSSE2() noexcept
Returns true if Intel SSE2 instructions are available.
static bool hasAVX() noexcept
Returns true if Intel AVX instructions are available.
static bool hasAVX512VBMI() noexcept
Returns true if Intel AVX-512 Vector Bit Manipulation instructions are available.
static bool hasSSSE3() noexcept
Returns true if Intel SSSE3 instructions are available.
static bool hasAVX512VL() noexcept
Returns true if Intel AVX-512 Vector Length instructions are available.
static bool hasAVX512PF() noexcept
Returns true if Intel AVX-512 Prefetch instructions are available.
static bool hasSSE41() noexcept
Returns true if Intel SSE4.1 instructions are available.
static StringArray getDeviceIdentifiers()
This method calculates some IDs to uniquely identify the device.
static String getJUCEVersion()
Returns the current version of JUCE, See also the JUCE_VERSION, JUCE_MAJOR_VERSION and JUCE_MINOR_VER...
static bool hasSSE42() noexcept
Returns true if Intel SSE4.2 instructions are available.
static bool hasAVX512IFMA() noexcept
Returns true if Intel AVX-512 Integer Fused Multiply-Add instructions are available.
static bool hasAVX512BW() noexcept
Returns true if Intel AVX-512 Byte and Word instructions are available.
static int getNumCpus() noexcept
Returns the number of logical CPU cores.
#define JUCE_MAJOR_VERSION
Current JUCE version number.