just a quick question. I tried to start julia 0.7.0 beta2 from some nightly build tar.gz available from the website in a VM which gave me an error ERROR: Unable to find compatible target in system image.
The VM runs stock debian 9 (stretch) x86_64, the CPU type is
head /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel Celeron_4x0 (Conroe/Merom Class Core 2)
OK, fair enough, that is indeed ancient. I would assume that llvm and/or the instruction set extensions used when building julia would not run on a CPU with that feature set ? Is there some documentation/ table where I could look up what the basic requirements for those nightly builds are ? Also, If I would build it myself from source, would it be possible to get it to run on that VM ? What is the minimal CPU feature set in that case ?
The following is only if you build julia yourself, I am not sure how to apply that to downloaded executables:
I built julia on an older netbook with an atom processor and had to set TARGET=atom (this is from memory, so it might be slightly different) in the Make.user. I guess the build scripts have some problems with older processors, I think you can set TARGET=pentium4 and it should work for almost anything.
OK, thank you ! So the requirements when building from source are still pretty minimal. That is very good to know. I now vaguely remember that I read somewhere that there is an ARM port.
I’m deploying with nixops to the v-box provider and I’m not sure if I can manipulate the cpuid with nixops. However it would be very interesting to know if this is indeed the problem and what the necessary features are.
@flicaflow and I found out the following: Julia needs the cx16 CPU flag [1] in its most generic sysimg build [2]. cx16 is available since Pentium D / Core 2 Duo days. But when using Virtualbox, the setting nested paging needs to be turned on, so that the guest can see the cx16 cpuflag (check with cat /proc/cpuinfo).
You can enable this in the Virtualbox UI in Machine → Settings → System → Acceleration → Enable Nested Paging. You can also use the VBoxManage vmmodify command in the terminal to set --nestedpaging on.
Alternatively [2] mentions that Julia can be built with the -cx16 flag, which might make it work on even older CPUs / lower capabilities (we did not test this).
apparently qemu/kvm which is used in my case does not expose that flag by default. Or the debian guest does not pick it up for some reason. A quick google does not come up with something directly useful why this flag might be missing. And the debian guest apparently does not care
EDIT: Or the CPU which is emulated (Conroe/Merom Class Core 2) is really to old, if I understand correctly @flicaflow uses virtualbox
EDIT2: Well, apparently the penryn 45 nm die shrink is the first CPU with cx16, the merom 65 nm (and presumably the 65 nm conroe) does not have it. Well, bad luck
I had the same problem ( ERROR: Unable to find compatible target in system image.) using VirtualBox . Although Nested Paging was enabled and my CPU does support cx16 (CMPXCHG16B), that flag wasn’t exposed to the guest.
To fix this issue I had to manually enabled CMPXCHG16B via
VBoxManage setextradata global VBoxInternal/CPUM/CMPXCHG16B 1
You’re missing the make step, but yes. I think the -cx16 may be autodetected then (since the default is to build for the current machine), but you’ll also need to specify USE_BINARYBUILDER=0 (either on the same line as make, or in a file named Make.user)