Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7826646c0 | ||
|
|
f103a0b376 | ||
|
|
a249561677 | ||
|
|
96887926bf | ||
|
|
c8647ffab7 | ||
|
|
4b884c15b1 | ||
|
|
0ace4e4a30 | ||
|
|
3cf2d3737f | ||
|
|
7c168f20f4 |
2
.ci
2
.ci
Submodule .ci updated: ad8dd4a136...20f8e05393
2
.github/workflows/ci-scripts-build.yml
vendored
2
.github/workflows/ci-scripts-build.yml
vendored
@@ -133,7 +133,7 @@ jobs:
|
||||
run: python .ci/cue.py test
|
||||
- name: Upload tapfiles Artifact
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: tapfiles ${{ matrix.name }}
|
||||
path: '**/O.*/*.tap'
|
||||
|
||||
14
configure/os/CONFIG.Common.darwin-aarch64
Normal file
14
configure/os/CONFIG.Common.darwin-aarch64
Normal file
@@ -0,0 +1,14 @@
|
||||
# CONFIG.Common.darwin-aarch64
|
||||
#
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for darwin-aarch64 target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.darwin-aarch64
|
||||
#-------------------------------------------------------
|
||||
|
||||
#
|
||||
# To build universal binaries, configure ARCH_CLASS
|
||||
# in the file CONFIG_SITE.Common.darwin-aarch64
|
||||
|
||||
# Include definitions common to all Darwin targets
|
||||
include $(CONFIG)/os/CONFIG.darwinCommon.darwinCommon
|
||||
8
configure/os/CONFIG.darwin-aarch64.Common
Normal file
8
configure/os/CONFIG.darwin-aarch64.Common
Normal file
@@ -0,0 +1,8 @@
|
||||
# CONFIG.darwin-aarch64.Common
|
||||
#
|
||||
# Definitions for darwin-aarch64 host builds
|
||||
# Sites may override these definitions in CONFIG_SITE.darwin-aarch64.Common
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to unix hosts
|
||||
include $(CONFIG)/os/CONFIG.UnixCommon.Common
|
||||
9
configure/os/CONFIG_SITE.Common.darwin-aarch64
Normal file
9
configure/os/CONFIG_SITE.Common.darwin-aarch64
Normal file
@@ -0,0 +1,9 @@
|
||||
# CONFIG_SITE.Common.darwin-aarch64
|
||||
#
|
||||
# Site override definitions for darwin-aarch64 target builds
|
||||
#-------------------------------------------------------
|
||||
|
||||
#
|
||||
# arm64 devices: Apple Silicon M1
|
||||
|
||||
ARCH_CLASS = arm64
|
||||
@@ -6,6 +6,17 @@ This version of EPICS Base has not been released yet.
|
||||
|
||||
<!-- Insert new items immediately below here ... -->
|
||||
|
||||
### Support for Apple M1/M2 (arm64) Processors
|
||||
|
||||
Thanks to Jeong Han Lee this release comes with build support for Apple's new
|
||||
M1 CPUs running macOS, using the target name `darwin-aarch64`.
|
||||
|
||||
### Set thread names on Windows
|
||||
|
||||
On MS Windows, epicsThread names are made available to the OS and debugger
|
||||
using `SetThreadDescription()` if available as well as using the older
|
||||
exception mechanism.
|
||||
|
||||
### Fix timers on MS Windows for non-EPICS threads
|
||||
|
||||
The waitable timer changes in 3.15.9 broke calls to `epicsThreadSleep()` and
|
||||
|
||||
@@ -50,14 +50,16 @@ bool getStringAsDouble ( const char * pString,
|
||||
ftmp = itmp;
|
||||
}
|
||||
else {
|
||||
int j = epicsScanDouble( pString, &ftmp );
|
||||
if ( j != 1 ) {
|
||||
j = sscanf ( pString,"%x", &itmp );
|
||||
if ( j == 1 ) {
|
||||
ftmp = itmp;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
int j = epicsScanDouble ( pString, &ftmp );
|
||||
if ( j != 1 ) {
|
||||
j = sscanf ( pString, "%lf", &ftmp );
|
||||
if ( j != 1 ) {
|
||||
j = sscanf ( pString, "%x", &itmp );
|
||||
if ( j == 1 ) {
|
||||
ftmp = itmp;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,44 +8,86 @@
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
#define VC_EXTRALEAN
|
||||
#define STRICT
|
||||
#if _WIN64
|
||||
# define _WIN32_WINNT 0x400 /* defining this drops support for W95 */
|
||||
#endif
|
||||
#include <windows.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
/*
|
||||
* this was copied directly from an example in visual c++ 7 documentation,
|
||||
* It uses visual C++ specific keywords for exception handling, but is
|
||||
* probably only useful when using the visual c++ or later debugger.
|
||||
*
|
||||
* Usage: setThreadName (-1, "MainThread");
|
||||
*/
|
||||
|
||||
|
||||
static void setThreadNameVS ( DWORD dwThreadID, LPCSTR szThreadName );
|
||||
typedef HRESULT (WINAPI* setDesc_t)(HANDLE, PCWSTR);
|
||||
|
||||
extern "C" void setThreadName ( DWORD dwThreadID, LPCSTR szThreadName )
|
||||
{
|
||||
static HMODULE hKernel = LoadLibrary("KernelBase.dll");
|
||||
static setDesc_t pSetDesc = (hKernel != NULL ?
|
||||
(setDesc_t)GetProcAddress(hKernel, "SetThreadDescription") : NULL);
|
||||
if (szThreadName == NULL || *szThreadName == '\0')
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (pSetDesc != NULL)
|
||||
{
|
||||
#ifdef THREAD_SET_LIMITED_INFORMATION
|
||||
DWORD thread_access = THREAD_SET_LIMITED_INFORMATION;
|
||||
#else
|
||||
DWORD thread_access = THREAD_SET_INFORMATION;
|
||||
#endif /* ifdef THREAD_SET_LIMITED_INFORMATION */
|
||||
HANDLE hThread = OpenThread(thread_access, FALSE, dwThreadID);
|
||||
if (hThread != NULL)
|
||||
{
|
||||
const std::string s(szThreadName);
|
||||
const std::wstring ws(s.begin(), s.end());
|
||||
HRESULT hr = (*pSetDesc)(hThread, ws.c_str());
|
||||
CloseHandle(hThread);
|
||||
}
|
||||
}
|
||||
// if SetThreadDescription() was available and we have a recent
|
||||
// visual studio debugger (2017 version 15.6 or higher) attached
|
||||
// then the names will already be defined. However we don't know
|
||||
// this for sure, so also trigger the old exception mechanism.
|
||||
// See https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-set-a-thread-name-in-native-code
|
||||
setThreadNameVS(dwThreadID, szThreadName);
|
||||
}
|
||||
|
||||
static void setThreadNameVS( DWORD dwThreadID, LPCSTR szThreadName )
|
||||
{
|
||||
#if _MSC_VER >= 1300 && defined ( _DEBUG )
|
||||
// This was copied directly from an MSDN example
|
||||
// It sets the thread name by throwing a special exception that is caught by Visual Sudio
|
||||
// It requires the debugger to be already attached to the process
|
||||
// when the exception is thrown for the name to be registered
|
||||
static const DWORD MS_VC_EXCEPTION = 0x406D1388;
|
||||
#pragma pack(push,8)
|
||||
typedef struct tagTHREADNAME_INFO
|
||||
{
|
||||
DWORD dwType; // must be 0x1000
|
||||
LPCSTR szName; // pointer to name (in user addr space)
|
||||
DWORD dwThreadID; // thread ID (-1=caller thread)
|
||||
DWORD dwFlags; // reserved for future use, must be zero
|
||||
DWORD dwType; // Must be 0x1000.
|
||||
LPCSTR szName; // Pointer to name (in user addr space).
|
||||
DWORD dwThreadID; // Thread ID (-1=caller thread).
|
||||
DWORD dwFlags; // Reserved for future use, must be zero.
|
||||
} THREADNAME_INFO;
|
||||
#pragma pack(pop)
|
||||
THREADNAME_INFO info;
|
||||
info.dwType = 0x1000;
|
||||
info.szName = szThreadName;
|
||||
info.dwThreadID = dwThreadID;
|
||||
info.dwFlags = 0;
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable: 6320 6322)
|
||||
__try
|
||||
{
|
||||
RaiseException( 0x406D1388, 0,
|
||||
sizeof(info)/sizeof(DWORD), (const ULONG_PTR*)&info );
|
||||
RaiseException(MS_VC_EXCEPTION, 0,
|
||||
sizeof(info) / sizeof(ULONG_PTR),
|
||||
(ULONG_PTR*)&info);
|
||||
}
|
||||
__except(EXCEPTION_CONTINUE_EXECUTION)
|
||||
__except (EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
}
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#*************************************************************************
|
||||
# Copyright (c) 2018 UChicago Argonne LLC, as Operator of Argonne
|
||||
# National Laboratory.
|
||||
# SPDX-License-Identifier: EPICS
|
||||
# EPICS BASE is distributed subject to a Software License Agreement found
|
||||
# in file LICENSE that is included with this distribution.
|
||||
#*************************************************************************
|
||||
@@ -34,6 +35,8 @@ sub HostArch {
|
||||
return 'linux-x86_64' if m/^x86_64-linux/;
|
||||
return 'linux-x86' if m/^i[3-6]86-linux/;
|
||||
return 'linux-arm' if m/^arm-linux/;
|
||||
return 'linux-aarch64' if m/^aarch64-linux/;
|
||||
return 'linux-ppc64' if m/^powerpc64-linux/;
|
||||
return 'windows-x64' if m/^MSWin32-x64/;
|
||||
return 'win32-x86' if m/^MSWin32-x86/;
|
||||
return "cygwin-x86_64" if m/^x86_64-cygwin/;
|
||||
@@ -44,8 +47,8 @@ sub HostArch {
|
||||
my ($kernel, $hostname, $release, $version, $cpu) = uname;
|
||||
if (m/^darwin/) {
|
||||
for ($cpu) {
|
||||
return 'darwin-x86' if m/^(i386|x86_64)/;
|
||||
return 'darwin-ppc' if m/Power Macintosh/;
|
||||
return 'darwin-x86' if m/^x86_64/;
|
||||
return 'darwin-aarch64' if m/^arm64/;
|
||||
}
|
||||
die "$0: macOS CPU type '$cpu' not recognized\n";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user