diff --git a/Makefile b/Makefile index e999f7e5342eb..04141c4afbc26 100644 --- a/Makefile +++ b/Makefile @@ -96,7 +96,7 @@ julia-inference : julia-base julia-ui-$(JULIA_BUILD_MODE) $(build_prefix)/.examp @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT) $(build_private_libdir)/inference.ji JULIA_BUILD_MODE=$(JULIA_BUILD_MODE) ifneq ($(CPUID_SPECIFIC_BINARIES), 0) -CPUID_TAG = _$(call spawn,$(JULIA_EXECUTABLE) --cpuid) +CPUID_TAG = _$(call exec,$(JULIA_EXECUTABLE) --cpuid) else CPUID_TAG = endif diff --git a/src/Makefile b/src/Makefile index 660b5b7e4798f..7fb46740a7bef 100644 --- a/src/Makefile +++ b/src/Makefile @@ -103,8 +103,8 @@ DEBUGFLAGS += $(FLAGS) SHIPFLAGS += $(FLAGS) # if not absolute, then relative to the directory of the julia executable -SHIPFLAGS += "-DJL_SYSTEM_IMAGE_PATH=\"$(build_private_libdir_rel)/sys\"" -DEBUGFLAGS += "-DJL_SYSTEM_IMAGE_PATH=\"$(build_private_libdir_rel)/sys-debug\"" +SHIPFLAGS += "-DJL_SYSTEM_IMAGE_PATH=\"$(build_private_libdir_rel)/sys.$(SHLIB_EXT)\"" +DEBUGFLAGS += "-DJL_SYSTEM_IMAGE_PATH=\"$(build_private_libdir_rel)/sys-debug.$(SHLIB_EXT)\"" ifneq ($(CPUID_SPECIFIC_BINARIES), 0) override CPPFLAGS += "-DCPUID_SPECIFIC_BINARIES=1" diff --git a/src/jloptions.c b/src/jloptions.c index 93cff5bcf94e0..637d495ebfdb0 100644 --- a/src/jloptions.c +++ b/src/jloptions.c @@ -19,15 +19,17 @@ char *shlib_ext = ".dylib"; char *shlib_ext = ".so"; #endif -static char default_sysimg_path[512]; +static char system_image_path[256] = "\0" JL_SYSTEM_IMAGE_PATH; static const char *get_default_sysimg_path() { -#ifndef CPUID_SPECIFIC_BINARIES - snprintf(default_sysimg_path, 512, "%s%s", JL_SYSTEM_IMAGE_PATH, shlib_ext); -#else - snprintf(default_sysimg_path, 512, "%s_%llx%s", JL_SYSTEM_IMAGE_PATH, jl_cpuid_tag(), shlib_ext); +#ifdef CPUID_SPECIFIC_BINARIES + char *path = &system_image_path[1]; + size_t existing_length = strlen(path) - strlen(shlib_ext); + path += existing_length; + snprintf(path, sizeof(system_image_path) - existing_length, + "_%" PRIx64 "%s", jl_cpuid_tag(), shlib_ext); #endif - return default_sysimg_path; + return &system_image_path[1]; } diff --git a/src/sys.c b/src/sys.c index 7d685181e628b..507ca53ac6fe0 100644 --- a/src/sys.c +++ b/src/sys.c @@ -460,6 +460,12 @@ JL_DLLEXPORT uint64_t jl_cpuid_tag(void) } #elif defined(CPUID_SPECIFIC_BINARIES) #error "CPUID not available on this CPU. Turn off CPUID_SPECIFIC_BINARIES" +#else +// For architectures that don't have CPUID +JL_DLLEXPORT uint64_t jl_cpuid_tag(void) +{ + return 0; +} #endif JL_DLLEXPORT int jl_uses_cpuid_tag() diff --git a/ui/repl.c b/ui/repl.c index 3014ec473c5c0..4c998ce262695 100644 --- a/ui/repl.c +++ b/ui/repl.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "uv.h" #define WHOLE_ARCHIVE @@ -177,7 +178,7 @@ static NOINLINE int true_main(int argc, char *argv[]) return 0; } -extern uint64_t jl_cpuid_tag(); +extern JL_DLLEXPORT uint64_t jl_cpuid_tag(); #ifndef _OS_WINDOWS_ int main(int argc, char *argv[]) @@ -245,7 +246,7 @@ int wmain(int argc, wchar_t *argv[], wchar_t *envp[]) #endif if (argc >= 2 && strcmp((char *)argv[1], "--cpuid") == 0) { /* Used by the build system to name CPUID-specific binaries */ - printf("%llx", jl_cpuid_tag()); + printf("%" PRIx64, jl_cpuid_tag()); return 0; } libsupport_init();