mirror of https://github.com/BOINC/boinc.git
Merge pull request #4386 from bema-aei/emulated_x86_feature_detection
Apple M1 CPU feature detection
This commit is contained in:
commit
f045c08691
|
@ -1,6 +1,6 @@
|
|||
// This file is part of BOINC.
|
||||
// http://boinc.berkeley.edu
|
||||
// Copyright (C) 2020 University of California
|
||||
// Copyright (C) 2021 University of California
|
||||
//
|
||||
// BOINC is free software; you can redistribute it and/or modify it
|
||||
// under the terms of the GNU Lesser General Public License
|
||||
|
@ -53,6 +53,7 @@ extern int compareOSVersionTo(int toMajor, int toMinor);
|
|||
|
||||
#include "client_types.h"
|
||||
#include "client_state.h"
|
||||
#include "client_msgs.h"
|
||||
#include "log_flags.h"
|
||||
#include "project.h"
|
||||
|
||||
|
@ -72,6 +73,90 @@ void CLIENT_STATE::add_platform(const char* platform) {
|
|||
}
|
||||
|
||||
|
||||
#if defined (__APPLE__) && defined (__arm64__)
|
||||
// detect a possibly emulated x86_64 CPU and its features on a Apple Silicon M1 Mac
|
||||
//
|
||||
int launch_child_process_to_detect_emulated_cpu() {
|
||||
int prog;
|
||||
char data_dir[MAXPATHLEN];
|
||||
char execpath[MAXPATHLEN];
|
||||
int retval = 0;
|
||||
|
||||
retval = boinc_delete_file(EMULATED_CPU_INFO_FILENAME);
|
||||
if (retval) {
|
||||
msg_printf(0, MSG_INFO,
|
||||
"Failed to delete old %s. error code %d",
|
||||
EMULATED_CPU_INFO_FILENAME, retval
|
||||
);
|
||||
} else {
|
||||
for (;;) {
|
||||
if (!boinc_file_exists(EMULATED_CPU_INFO_FILENAME)) break;
|
||||
boinc_sleep(0.01);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// write the EMULATED_CPU_INFO into the BOINC data dir
|
||||
boinc_getcwd(data_dir);
|
||||
|
||||
// the execuable should be in BOINC data dir
|
||||
strncpy(execpath, data_dir, sizeof(execpath));
|
||||
strncat(execpath, "/" EMULATED_CPU_INFO_EXECUTABLE, sizeof(execpath) - strlen(execpath) - 1);
|
||||
|
||||
if (log_flags.coproc_debug) {
|
||||
msg_printf(0, MSG_INFO,
|
||||
"[x86_64-M1] launching child process at %s",
|
||||
execpath
|
||||
);
|
||||
}
|
||||
|
||||
int argc = 1;
|
||||
char* const argv[2] = {
|
||||
const_cast<char *>(execpath),
|
||||
NULL
|
||||
};
|
||||
|
||||
retval = run_program(
|
||||
data_dir,
|
||||
execpath,
|
||||
argc,
|
||||
argv,
|
||||
0,
|
||||
prog
|
||||
);
|
||||
|
||||
if (retval) {
|
||||
if (log_flags.coproc_debug) {
|
||||
msg_printf(0, MSG_INFO,
|
||||
"[x86_64-M1] run_program of child process returned error %d",
|
||||
retval
|
||||
);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
retval = get_exit_status(prog);
|
||||
if (retval) {
|
||||
char buf[200];
|
||||
if (WIFEXITED(retval)) {
|
||||
int code = WEXITSTATUS(retval);
|
||||
snprintf(buf, sizeof(buf), "process exited with status %d: %s", code, strerror(code));
|
||||
} else if (WIFSIGNALED(retval)) {
|
||||
int sig = WTERMSIG(retval);
|
||||
snprintf(buf, sizeof(buf), "process was terminated by signal %d", sig);
|
||||
} else {
|
||||
snprintf(buf, sizeof(buf), "unknown status %d", retval);
|
||||
}
|
||||
msg_printf(0, MSG_INFO,
|
||||
"Emulated CPU detection failed: %s",
|
||||
buf
|
||||
);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
#endif
|
||||
|
||||
// determine the list of supported platforms.
|
||||
//
|
||||
void CLIENT_STATE::detect_platforms() {
|
||||
|
@ -106,8 +191,9 @@ void CLIENT_STATE::detect_platforms() {
|
|||
}
|
||||
#elif defined(__arm64__)
|
||||
add_platform("arm64-apple-darwin");
|
||||
//TODO: Add test for Mac OS Version when Apple Rosetta emulator is removed
|
||||
add_platform("x86_64-apple-darwin");
|
||||
if (!launch_child_process_to_detect_emulated_cpu()) {
|
||||
add_platform("x86_64-apple-darwin");
|
||||
}
|
||||
#else
|
||||
#error Mac client now requires a 64-bit system
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
// This file is part of BOINC.
|
||||
// http://boinc.berkeley.edu
|
||||
// Copyright (C) 2021 University of California
|
||||
//
|
||||
// BOINC is free software; you can redistribute it and/or modify it
|
||||
// under the terms of the GNU Lesser General Public License
|
||||
// as published by the Free Software Foundation,
|
||||
// either version 3 of the License, or (at your option) any later version.
|
||||
//
|
||||
// BOINC is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
// This helper program is used to detect an emulated x86_64 CPU on Apples
|
||||
// ARM64 CPUs (M1). It should be compiiled _only_ for x86_64 architecture.
|
||||
// It writes the feature string of the meulated CPU to a file
|
||||
// EMULATED_CPU_INFO_FILENAME in the current working directory.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#include "hostinfo.h" // for P_FEATURES_SIZE
|
||||
#include "filesys.h" // for boinc_fopen()
|
||||
#include "file_names.h" // for EMULATED_CPU_INFO_FILENAME
|
||||
|
||||
int main () {
|
||||
size_t len;
|
||||
char features[P_FEATURES_SIZE];
|
||||
FILE*fp;
|
||||
|
||||
len = sizeof(features);
|
||||
sysctlbyname("machdep.cpu.features", features, &len, NULL, 0);
|
||||
if ((fp = boinc_fopen(EMULATED_CPU_INFO_FILENAME, "w"))) {
|
||||
fprintf(fp," %s\n", features);
|
||||
fclose(fp);
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
// This file is part of BOINC.
|
||||
// http://boinc.berkeley.edu
|
||||
// Copyright (C) 2018 University of California
|
||||
// Copyright (C) 2021 University of California
|
||||
//
|
||||
// BOINC is free software; you can redistribute it and/or modify it
|
||||
// under the terms of the GNU Lesser General Public License
|
||||
|
@ -72,6 +72,8 @@ extern void send_log_after(const char* filename, double t, MIOFILE& mf);
|
|||
#define CONFIG_FILE "cc_config.xml"
|
||||
#define NVC_CONFIG_FILE "nvc_config.xml"
|
||||
#define COPROC_INFO_FILENAME "coproc_info.xml"
|
||||
#define EMULATED_CPU_INFO_EXECUTABLE "detect_rosetta_cpu"
|
||||
#define EMULATED_CPU_INFO_FILENAME "emulated_cpu_info.txt"
|
||||
#define CPU_BENCHMARKS_FILE_NAME "cpu_benchmarks"
|
||||
#define CREATE_ACCOUNT_FILENAME "create_account.xml"
|
||||
#define DAILY_XFER_HISTORY_FILENAME "daily_xfer_history.xml"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// This file is part of BOINC.
|
||||
// http://boinc.berkeley.edu
|
||||
// Copyright (C) 2020 University of California
|
||||
// Copyright (C) 2021 University of California
|
||||
//
|
||||
// BOINC is free software; you can redistribute it and/or modify it
|
||||
// under the terms of the GNU Lesser General Public License
|
||||
|
@ -805,31 +805,116 @@ void use_cpuid(HOST_INFO& host) {
|
|||
static void get_cpu_info_mac(HOST_INFO& host) {
|
||||
int p_model_size = sizeof(host.p_model);
|
||||
size_t len;
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
char brand_string[256];
|
||||
char features[P_FEATURES_SIZE];
|
||||
char *p;
|
||||
char *sep=" ";
|
||||
int family, stepping, model;
|
||||
|
||||
len = sizeof(host.p_vendor);
|
||||
sysctlbyname("machdep.cpu.vendor", host.p_vendor, &len, NULL, 0);
|
||||
int family, stepping, model, feature;
|
||||
string feature_string;
|
||||
|
||||
len = sizeof(brand_string);
|
||||
sysctlbyname("machdep.cpu.brand_string", brand_string, &len, NULL, 0);
|
||||
|
||||
len = sizeof(family);
|
||||
sysctlbyname("machdep.cpu.family", &family, &len, NULL, 0);
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
|
||||
len = sizeof(model);
|
||||
sysctlbyname("machdep.cpu.model", &model, &len, NULL, 0);
|
||||
// on an Apple M1 chip the cpu.vendor is broken, family, model and stepping don't exist
|
||||
if (!strncmp(brand_string, "Apple M", strlen("Apple M"))) {
|
||||
|
||||
len = sizeof(stepping);
|
||||
sysctlbyname("machdep.cpu.stepping", &stepping, &len, NULL, 0);
|
||||
strcpy(host.p_vendor, "Apple");
|
||||
strncpy(host.p_model, brand_string, sizeof(host.p_model));
|
||||
|
||||
} else {
|
||||
|
||||
len = sizeof(host.p_vendor);
|
||||
sysctlbyname("machdep.cpu.vendor", host.p_vendor, &len, NULL, 0);
|
||||
|
||||
len = sizeof(family);
|
||||
sysctlbyname("machdep.cpu.family", &family, &len, NULL, 0);
|
||||
|
||||
len = sizeof(model);
|
||||
sysctlbyname("machdep.cpu.model", &model, &len, NULL, 0);
|
||||
|
||||
len = sizeof(stepping);
|
||||
sysctlbyname("machdep.cpu.stepping", &stepping, &len, NULL, 0);
|
||||
|
||||
snprintf(
|
||||
host.p_model, sizeof(host.p_model),
|
||||
"%s [x86 Family %d Model %d Stepping %d]",
|
||||
brand_string, family, model, stepping
|
||||
);
|
||||
}
|
||||
|
||||
len = sizeof(features);
|
||||
sysctlbyname("machdep.cpu.features", features, &len, NULL, 0);
|
||||
|
||||
#else // defined(__i386__) || defined(__x86_64__)
|
||||
|
||||
strcpy(host.p_vendor, "Apple");
|
||||
strncpy(host.p_model, brand_string, sizeof(host.p_model));
|
||||
|
||||
features[0] = '\0';
|
||||
len = sizeof(feature);
|
||||
feature_string="";
|
||||
|
||||
sysctlbyname("hw.optional.amx_version", &feature, &len, NULL, 0);
|
||||
snprintf(features, sizeof(features), "amx_version_%d", feature);
|
||||
feature_string += features;
|
||||
|
||||
sysctlbyname("hw.optional.arm64", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " arm64";
|
||||
|
||||
sysctlbyname("hw.optional.armv8_1_atomics", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " armv8_1_atomics";
|
||||
|
||||
sysctlbyname("hw.optional.armv8_2_fhm", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " armv8_2_fhm";
|
||||
|
||||
sysctlbyname("hw.optional.armv8_2_sha3", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " armv8_2_sha3";
|
||||
|
||||
sysctlbyname("hw.optional.armv8_2_sha512", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " armv8_2_sha512";
|
||||
|
||||
sysctlbyname("hw.optional.armv8_crc32", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " armv8_crc32";
|
||||
|
||||
sysctlbyname("hw.optional.floatingpoint", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " floatingpoint";
|
||||
|
||||
sysctlbyname("hw.optional.neon", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " neon";
|
||||
|
||||
sysctlbyname("hw.optional.neon_fp16", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " neon_fp16";
|
||||
|
||||
sysctlbyname("hw.optional.neon_hpfp", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " neon_hpfp";
|
||||
|
||||
sysctlbyname("hw.optional.ucnormal_mem", &feature, &len, NULL, 0);
|
||||
if (feature) feature_string += " ucnormal_mem";
|
||||
|
||||
// read features of the emulated CPU if there is a file containing these
|
||||
char fpath[MAXPATHLEN];
|
||||
boinc_getcwd(fpath);
|
||||
strcat(fpath,"/");
|
||||
strcat(fpath,EMULATED_CPU_INFO_FILENAME);
|
||||
if (boinc_file_exists(fpath)) {
|
||||
FILE* fp = boinc_fopen(fpath, "r");
|
||||
if (fp) {
|
||||
fgets(features, sizeof(features), fp);
|
||||
feature_string += features;
|
||||
fclose(fp);
|
||||
} else if (log_flags.coproc_debug) {
|
||||
msg_printf(0, MSG_INFO, "[x86_64-M1] couldn't open file %s", fpath);
|
||||
}
|
||||
} else if (log_flags.coproc_debug) {
|
||||
msg_printf(0, MSG_INFO, "[x86_64-M1] didn't find file %s", fpath);
|
||||
}
|
||||
|
||||
strncpy(features,feature_string.c_str(),sizeof(features));
|
||||
|
||||
#endif // defined(__i386__) || defined(__x86_64__)
|
||||
|
||||
// Convert Mac CPU features string to match that returned by Linux
|
||||
for(p=features; *p; p++) {
|
||||
*p = tolower(*p);
|
||||
|
@ -851,15 +936,6 @@ static void get_cpu_info_mac(HOST_INFO& host) {
|
|||
}
|
||||
}
|
||||
|
||||
snprintf(
|
||||
host.p_model, sizeof(host.p_model),
|
||||
"%s [x86 Family %d Model %d Stepping %d]",
|
||||
brand_string, family, model, stepping
|
||||
);
|
||||
#else
|
||||
// TODO: Add code for Apple arm64 CPU
|
||||
#endif
|
||||
|
||||
host.p_model[p_model_size-1] = 0;
|
||||
|
||||
// This returns an Apple hardware model designation such as "MacPro3,1".
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
/* End PBXAggregateTarget section */
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
B13E2D172655655000D5C977 /* detect_rosetta_cpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B13E2D162655655000D5C977 /* detect_rosetta_cpu.cpp */; };
|
||||
DD000D6A24D0208E0083DE77 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD89165E0F3B1BC200DE5B1C /* OpenGL.framework */; };
|
||||
DD000D6B24D020940083DE77 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD89165E0F3B1BC200DE5B1C /* OpenGL.framework */; };
|
||||
DD000D7424D0244D0083DE77 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD000D7324D0244C0083DE77 /* SystemConfiguration.framework */; };
|
||||
|
@ -583,6 +584,20 @@
|
|||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
B1A32E54265D206800896566 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 20286C28FDCF999611CA2CEA /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = B13E2D0E265564D100D5C977;
|
||||
remoteInfo = detect_rosetta_cpu;
|
||||
};
|
||||
B1A32E57265D20FB00896566 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 20286C28FDCF999611CA2CEA /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = DD407A4907D2FB1200163EF5;
|
||||
remoteInfo = libboinc;
|
||||
};
|
||||
DD095D1E0F3B22DE000902F5 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 20286C28FDCF999611CA2CEA /* Project object */;
|
||||
|
@ -838,6 +853,15 @@
|
|||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
B13E2D0D265564D100D5C977 /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
DD3E15350A774397007E0084 /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -873,6 +897,9 @@
|
|||
AA8B6B1C046C364400A80164 /* app_ipc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = app_ipc.h; path = ../lib/app_ipc.h; sourceTree = SOURCE_ROOT; };
|
||||
AAA31C97042157A800A80164 /* shmem.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = shmem.cpp; sourceTree = "<group>"; };
|
||||
AAA31C98042157A800A80164 /* shmem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = shmem.h; path = ../lib/shmem.h; sourceTree = SOURCE_ROOT; };
|
||||
B13E2D0F265564D100D5C977 /* detect_rosetta_cpu */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = detect_rosetta_cpu; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B13E2D11265564D100D5C977 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
|
||||
B13E2D162655655000D5C977 /* detect_rosetta_cpu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = detect_rosetta_cpu.cpp; sourceTree = "<group>"; };
|
||||
DD000D7324D0244C0083DE77 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = "<absolute>"; };
|
||||
DD0052F710CA6F1D0067570C /* cs_proxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cs_proxy.cpp; path = ../client/cs_proxy.cpp; sourceTree = SOURCE_ROOT; };
|
||||
DD0052F810CA6F1D0067570C /* cs_proxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cs_proxy.h; path = ../client/cs_proxy.h; sourceTree = SOURCE_ROOT; };
|
||||
|
@ -981,7 +1008,6 @@
|
|||
DD40825707D3076400163EF5 /* reduce_lib.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = reduce_lib.cpp; sourceTree = "<group>"; };
|
||||
DD40825807D3076400163EF5 /* reduce_main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = reduce_main.cpp; sourceTree = "<group>"; };
|
||||
DD40825907D3076400163EF5 /* reduce.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = reduce.h; path = ../api/reduce.h; sourceTree = SOURCE_ROOT; };
|
||||
DD40827D07D30AA800163EF5 /* jpeglib.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jpeglib.h; path = ../samples/jpeglib/jpeglib.h; sourceTree = SOURCE_ROOT; };
|
||||
DD40E75D0ADB87BC00214518 /* wxPieCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = wxPieCtrl.cpp; path = ../clientgui/common/wxPieCtrl.cpp; sourceTree = SOURCE_ROOT; };
|
||||
DD40E75E0ADB87BC00214518 /* wxPieCtrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = wxPieCtrl.h; path = ../clientgui/common/wxPieCtrl.h; sourceTree = SOURCE_ROOT; };
|
||||
DD4688410C165F3C0089F500 /* Uninstall BOINC.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Uninstall BOINC.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
@ -1371,6 +1397,13 @@
|
|||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
B13E2D0C265564D100D5C977 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DD1277B1081F3D67007B5DE1 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -1581,6 +1614,7 @@
|
|||
DDF9EC03144EB14B005D6144 /* libboinc_opencl.a */,
|
||||
DD3EAAA6216A25AD00BC673C /* boinc_finish_install */,
|
||||
DD5F654123605B41009ED2A2 /* gfx_cleanup */,
|
||||
B13E2D0F265564D100D5C977 /* detect_rosetta_cpu */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = SOURCE_ROOT;
|
||||
|
@ -1588,7 +1622,6 @@
|
|||
20286C29FDCF999611CA2CEA /* «PROJECTNAME» */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DD40827D07D30AA800163EF5 /* jpeglib.h */,
|
||||
F54B8FBE02AC0A0C01FB7237 /* client */,
|
||||
DD81C3F707C5D03B0098A04D /* clientgui */,
|
||||
DDB873950C85072500E0DE1F /* clientscr */,
|
||||
|
@ -1599,6 +1632,7 @@
|
|||
DD81C79E144D8F97000BE61A /* jpeg */,
|
||||
20286C2CFDCF999611CA2CEA /* Resources */,
|
||||
20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
|
||||
B13E2D10265564D100D5C977 /* detect_rosetta_cpu */,
|
||||
195DF8C9FE9D4F0611CA2CBB /* Products */,
|
||||
DD96AFFA0811075100A06F22 /* ScreenSaver-Info.plist */,
|
||||
DD1277B5081F3D67007B5DE1 /* PostInstall-Info.plist */,
|
||||
|
@ -1647,6 +1681,14 @@
|
|||
name = "External Frameworks and Libraries";
|
||||
sourceTree = SOURCE_ROOT;
|
||||
};
|
||||
B13E2D10265564D100D5C977 /* detect_rosetta_cpu */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B13E2D11265564D100D5C977 /* main.cpp */,
|
||||
);
|
||||
path = detect_rosetta_cpu;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DD1277BC081F3E59007B5DE1 /* mac_installer */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -2078,6 +2120,7 @@
|
|||
F54B8FC902AC0A0C01FB7237 /* cs_scheduler.cpp */,
|
||||
DD344B9307C5AE2E0043025C /* cs_statefile.cpp */,
|
||||
DD344B9407C5AE2E0043025C /* cs_trickle.cpp */,
|
||||
B13E2D162655655000D5C977 /* detect_rosetta_cpu.cpp */,
|
||||
DD344B9507C5AE2E0043025C /* dhrystone.cpp */,
|
||||
DD344B9607C5AE2E0043025C /* dhrystone.h */,
|
||||
DD344B9707C5AE2E0043025C /* dhrystone2.cpp */,
|
||||
|
@ -2196,6 +2239,23 @@
|
|||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
B13E2D0E265564D100D5C977 /* detect_rosetta_cpu */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = B13E2D13265564D100D5C977 /* Build configuration list for PBXNativeTarget "detect_rosetta_cpu" */;
|
||||
buildPhases = (
|
||||
B13E2D0B265564D100D5C977 /* Sources */,
|
||||
B13E2D0C265564D100D5C977 /* Frameworks */,
|
||||
B13E2D0D265564D100D5C977 /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = detect_rosetta_cpu;
|
||||
productName = detect_rosetta_cpu;
|
||||
productReference = B13E2D0F265564D100D5C977 /* detect_rosetta_cpu */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
DD1277B2081F3D67007B5DE1 /* PostInstall */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = DD9E2371091CBDAE0048316E /* Build configuration list for PBXNativeTarget "PostInstall" */;
|
||||
|
@ -2518,6 +2578,8 @@
|
|||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
B1A32E58265D20FB00896566 /* PBXTargetDependency */,
|
||||
B1A32E55265D206800896566 /* PBXTargetDependency */,
|
||||
DD25E20D220438090040366F /* PBXTargetDependency */,
|
||||
);
|
||||
name = BOINC_Client;
|
||||
|
@ -2583,6 +2645,9 @@
|
|||
attributes = {
|
||||
LastUpgradeCheck = 0620;
|
||||
TargetAttributes = {
|
||||
B13E2D0E265564D100D5C977 = {
|
||||
CreatedOnToolsVersion = 12.5;
|
||||
};
|
||||
DD3EAAA5216A25AD00BC673C = {
|
||||
CreatedOnToolsVersion = 9.4.1;
|
||||
};
|
||||
|
@ -2627,6 +2692,7 @@
|
|||
DD89161C0F3B17E900DE5B1C /* ss_app */,
|
||||
DDD336F51062235D00867C7D /* AddRemoveUser */,
|
||||
DD5F654023605B41009ED2A2 /* gfx_cleanup */,
|
||||
B13E2D0E265564D100D5C977 /* detect_rosetta_cpu */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
@ -2972,6 +3038,14 @@
|
|||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
B13E2D0B265564D100D5C977 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B13E2D172655655000D5C977 /* detect_rosetta_cpu.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DD1277B0081F3D67007B5DE1 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -3607,6 +3681,16 @@
|
|||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
B1A32E55265D206800896566 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = B13E2D0E265564D100D5C977 /* detect_rosetta_cpu */;
|
||||
targetProxy = B1A32E54265D206800896566 /* PBXContainerItemProxy */;
|
||||
};
|
||||
B1A32E58265D20FB00896566 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = DD407A4907D2FB1200163EF5 /* libboinc */;
|
||||
targetProxy = B1A32E57265D20FB00896566 /* PBXContainerItemProxy */;
|
||||
};
|
||||
DD095D1F0F3B22DE000902F5 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = DD89161C0F3B17E900DE5B1C /* ss_app */;
|
||||
|
@ -3801,6 +3885,24 @@
|
|||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
B13E2D14265564D100D5C977 /* Development */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = x86_64;
|
||||
OTHER_LDFLAGS = "-lboinc";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Development;
|
||||
};
|
||||
B13E2D15265564D100D5C977 /* Deployment */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = x86_64;
|
||||
OTHER_LDFLAGS = "-lboinc";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Deployment;
|
||||
};
|
||||
DD1AFEB60A512D8700EE5B82 /* Development */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
|
@ -4745,6 +4847,15 @@
|
|||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
B13E2D13265564D100D5C977 /* Build configuration list for PBXNativeTarget "detect_rosetta_cpu" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
B13E2D14265564D100D5C977 /* Development */,
|
||||
B13E2D15265564D100D5C977 /* Deployment */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Development;
|
||||
};
|
||||
DD1AFEB50A512D8700EE5B82 /* Build configuration list for PBXNativeTarget "Install_BOINC" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# This file is part of BOINC.
|
||||
# http://boinc.berkeley.edu
|
||||
# Copyright (C) 2020 University of California
|
||||
# Copyright (C) 2021 University of California
|
||||
#
|
||||
# BOINC is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License
|
||||
|
@ -53,6 +53,7 @@
|
|||
## Updated 7/29/20 by Charlie Fenton to build arm64 and x86_64 Universal2 Binary
|
||||
## Updated 11/22/20 by Charlie Fenton to build DMG bare-core (apple-darwin) release
|
||||
## Updated 11/26/20 by Charlie Fenton to let installer show message if MacOS too old
|
||||
## Updated 5/27/21 to support zsh & detecting X86_64 features emulated by Rosetta 2
|
||||
##
|
||||
## NOTE: This script requires Mac OS 10.7 or later, and uses XCode developer
|
||||
## tools. So you must have installed XCode Developer Tools on the Mac
|
||||
|
@ -192,11 +193,11 @@ lipo "BOINCManager.app/Contents/MacOS/BOINCManager" -verify_arch x86_64
|
|||
if [ $? -eq 0 ]; then Products_Have_x86_64="yes"; fi
|
||||
lipo "BOINCManager.app/Contents/MacOS/BOINCManager" -verify_arch arm64
|
||||
if [ $? -eq 0 ]; then Products_Have_arm64="yes"; fi
|
||||
if [ $Products_Have_x86_64 == "no" ] && [ $Products_Have_arm64 == "no" ]; then
|
||||
if [ $Products_Have_x86_64 = "no" ] && [ $Products_Have_arm64 = "no" ]; then
|
||||
echo "ERROR: could not determine architecture of BOINC Manager"
|
||||
fi
|
||||
if [ $Products_Have_arm64 == "yes" ]; then
|
||||
if [ $Products_Have_x86_64 == "yes" ]; then
|
||||
if [ $Products_Have_arm64 = "yes" ]; then
|
||||
if [ $Products_Have_x86_64 = "yes" ]; then
|
||||
arch="universal"
|
||||
else
|
||||
arch="arm64"
|
||||
|
@ -292,6 +293,7 @@ cp -fp clientscr/res/boinc_logo_black.jpg ../BOINC_Installer/Pkg_Root/Library/Ap
|
|||
cp -fp api/ttf/liberation-fonts-ttf-2.00.0/LiberationSans-Regular.ttf ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/LiberationSans-Regular.ttf
|
||||
cp -fp clientscr/ss_config.xml ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/
|
||||
cp -fpRL "${BUILDPATH}/boincscr" ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/
|
||||
cp -fpRL "${BUILDPATH}/detect_rosetta_cpu" ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/
|
||||
|
||||
cp -fpRL "${BUILDPATH}/BOINCManager.app" ../BOINC_Installer/Pkg_Root/Applications/
|
||||
|
||||
|
@ -397,6 +399,9 @@ if [ -e "${HOME}/BOINCCodeSignIdentities.txt" ]; then
|
|||
# Code Sign the boincscr graphics app if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/Pkg_Root/Library/Application Support/BOINC Data/boincscr"
|
||||
|
||||
# Code Sign the detect_rosetta_cpu helper app if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/Pkg_Root/Library/Application Support/BOINC Data/detect_rosetta_cpu"
|
||||
|
||||
# Code Sign the BOINC screensaver code for OS 10.6 and OS 10.7 if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/Pkg_Root/Library/Screen Savers/BOINCSaver.saver/Contents/MacOS/BOINCSaver_MacOS10_6_7"
|
||||
|
||||
|
@ -510,6 +515,7 @@ sudo chmod -R 644 ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-a
|
|||
mkdir -p ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir
|
||||
cp -fpRL "${BUILDPATH}/boinc" ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/
|
||||
cp -fpRL "${BUILDPATH}/boinccmd" ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/
|
||||
cp -fpRL "${BUILDPATH}/detect_rosetta_cpu" ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/
|
||||
cp -fpRL curl/ca-bundle.crt ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/
|
||||
|
||||
mkdir -p ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/switcher
|
||||
|
@ -534,34 +540,37 @@ if [ -n "${APPSIGNINGIDENTITY}" ]; then
|
|||
# Code Sign the stand-alone bare core boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinc"
|
||||
|
||||
# Code Sign detect_rosetta_cpu for the stand-alone boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/detect_rosetta_cpu"
|
||||
|
||||
# Code Sign setprojectgrp for the stand-alone boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/switcher/setprojectgrp"
|
||||
|
||||
# Code Sign switcher for the stand-alone boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/switcher/switcher"
|
||||
|
||||
if [ $arch == "universal" ]; then
|
||||
# Workaround for code signing problem under Xcode 12.2:
|
||||
# Code sign each architecture separately then combine into a uiversal binary
|
||||
lipo "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd" -thin x86_64 -output "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64"
|
||||
if [ $arch = "universal" ]; then
|
||||
# Workaround for code signing problem under Xcode 12.2:
|
||||
# Code sign each architecture separately then combine into a uiversal binary
|
||||
lipo "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd" -thin x86_64 -output "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64"
|
||||
|
||||
lipo "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd" -thin arm64 -output "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64"
|
||||
lipo "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd" -thin arm64 -output "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64"
|
||||
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64"
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64"
|
||||
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64"
|
||||
|
||||
rm -f "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd"
|
||||
|
||||
lipo "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64" -create -output "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd"
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64"
|
||||
|
||||
rm -f "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64"
|
||||
rm -f "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd"
|
||||
|
||||
rm -f "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64"
|
||||
lipo "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64" -create -output "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd"
|
||||
|
||||
rm -f "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64"
|
||||
|
||||
rm -f "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64"
|
||||
|
||||
else
|
||||
# Code Sign boinccmd for the stand-alone boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd"
|
||||
# Code Sign boinccmd for the stand-alone boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# This file is part of BOINC.
|
||||
# http://boinc.berkeley.edu
|
||||
# Copyright (C) 2019 University of California
|
||||
# Copyright (C) 2021 University of California
|
||||
#
|
||||
# BOINC is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License
|
||||
|
@ -157,11 +157,11 @@ lipo "BOINCManager.app/Contents/MacOS/BOINCManager" -verify_arch x86_64
|
|||
if [ $? -eq 0 ]; then Products_Have_x86_64="yes"; fi
|
||||
lipo "BOINCManager.app/Contents/MacOS/BOINCManager" -verify_arch arm64
|
||||
if [ $? -eq 0 ]; then Products_Have_arm64="yes"; fi
|
||||
if [ $Products_Have_x86_64 == "no" ] && [ $Products_Have_arm64 == "no" ]; then
|
||||
if [ $Products_Have_x86_64 = "no" ] && [ $Products_Have_arm64 = "no" ]; then
|
||||
echo "ERROR: could not determine architecture of BOINC Manager"
|
||||
fi
|
||||
if [ $Products_Have_arm64 == "yes" ]; then
|
||||
if [ $Products_Have_x86_64 == "yes" ]; then
|
||||
if [ $Products_Have_arm64 = "yes" ]; then
|
||||
if [ $Products_Have_x86_64 = "yes" ]; then
|
||||
arch="universal"
|
||||
else
|
||||
arch="arm64"
|
||||
|
@ -254,6 +254,7 @@ cp -fp clientscr/res/boinc_logo_black.jpg ../BOINC_Installer/Pkg_Root/Library/Ap
|
|||
cp -fp api/ttf/liberation-fonts-ttf-2.00.0/LiberationSans-Regular.ttf ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/LiberationSans-Regular.ttf
|
||||
cp -fp clientscr/ss_config.xml ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/
|
||||
cp -fpRL "${BUILDPATH}/boincscr" ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/
|
||||
cp -fpRL "${BUILDPATH}/detect_rosetta_cpu" ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/
|
||||
|
||||
cp -fpRL "${BUILDPATH}/BOINCManager.app/." "../BOINC_Installer/Pkg_Root/Applications/${MANAGERAPPNAME}.app/"
|
||||
sed -i "" s/BOINCManager/"${MANAGERAPPNAME}"/g "../BOINC_Installer/Pkg_Root/Applications/${MANAGERAPPNAME}.app/Contents/Info.plist"
|
||||
|
@ -392,6 +393,9 @@ if [ -e "${HOME}/BOINCCodeSignIdentities.txt" ]; then
|
|||
# Code Sign the boincscr graphics app if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/Pkg_Root/Library/Application Support/BOINC Data/boincscr"
|
||||
|
||||
# Code Sign the detect_rosetta_cpu helper app if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/Pkg_Root/Library/Application Support/BOINC Data/detect_rosetta_cpu"
|
||||
|
||||
# Code Sign the BOINC screensaver code for OS 10.6 and OS 10.7 if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/Pkg_Root/Library/Screen Savers/${SSAVERAPPNAME}.saver/Contents/MacOS/BOINCSaver_MacOS10_6_7"
|
||||
|
||||
|
@ -449,6 +453,7 @@ sudo chmod -R 644 ../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SH
|
|||
mkdir -p ../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir
|
||||
cp -fpRL "${BUILDPATH}/boinc" ../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/
|
||||
cp -fpRL "${BUILDPATH}/boinccmd" ../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/
|
||||
cp -fpRL "${BUILDPATH}/detect_rosetta_cpu" ../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/
|
||||
cp -fpRL curl/ca-bundle.crt ../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/
|
||||
|
||||
mkdir -p ../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/switcher
|
||||
|
@ -470,6 +475,41 @@ if [ -n "${APPSIGNINGIDENTITY}" ]; then
|
|||
# Code Sign the BOINC installer application if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_macOSX_$arch/${INSTALLERAPPNAME}.app"
|
||||
|
||||
# Code Sign the stand-alone bare core boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinc"
|
||||
|
||||
# Code Sign detect_rosetta_cpu for the stand-alone boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/detect_rosetta_cpu"
|
||||
|
||||
# Code Sign setprojectgrp for the stand-alone boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/switcher/setprojectgrp"
|
||||
|
||||
# Code Sign switcher for the stand-alone boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/switcher/switcher"
|
||||
|
||||
if [ $arch = "universal" ]; then
|
||||
# Workaround for code signing problem under Xcode 12.2:
|
||||
# Code sign each architecture separately then combine into a uiversal binary
|
||||
lipo "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd" -thin x86_64 -output "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64"
|
||||
|
||||
lipo "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd" -thin arm64 -output "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64"
|
||||
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64"
|
||||
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64"
|
||||
|
||||
rm -f "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd"
|
||||
|
||||
lipo "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64" "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64" -create -output "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd"
|
||||
|
||||
rm -f "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-x86_64"
|
||||
|
||||
rm -f "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd-arm64"
|
||||
|
||||
else
|
||||
# Code Sign boinccmd for the stand-alone boinc client if we have a signing identity
|
||||
sudo codesign -f -o runtime -s "${APPSIGNINGIDENTITY}" "../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3/${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin/move_to_boinc_dir/boinccmd"
|
||||
fi
|
||||
fi
|
||||
|
||||
cd ../BOINC_Installer/New_Release_${SHORTBRANDNAME}_$1_$2_$3
|
||||
|
@ -483,6 +523,8 @@ ditto -ck --sequesterRsrc --keepParent ${SHORTBRANDNAME}_$1.$2.$3_macOSX_$arch $
|
|||
ditto -ck --sequesterRsrc --keepParent ${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin ${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin.zip
|
||||
ditto -ck --sequesterRsrc --keepParent ${SHORTBRANDNAME}_$1.$2.$3_macOSX_SymbolTables ${SHORTBRANDNAME}_$1.$2.$3_macOSX_SymbolTables.zip
|
||||
|
||||
hdiutil create -srcfolder ${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin -ov -format UDZO ${SHORTBRANDNAME}_$1.$2.$3_$arch-apple-darwin.dmg
|
||||
|
||||
#popd
|
||||
cd "${BOINCPath}"
|
||||
|
||||
|
|
Loading…
Reference in New Issue