Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update ARM README #21737

Merged
merged 6 commits into from
May 13, 2017
Merged

Update ARM README #21737

merged 6 commits into from
May 13, 2017

Conversation

samuelpowell
Copy link
Member

Following discussion in #21727 I have updated the ARM README to split the document into two distinct sections for 32- and 64-bit ARM architectures.

I haven't made any changes to the instructions for 32-bit architectures, but I have updated the instructions for nVidia TX2 introduced in #21727 to refer to master. The instructions (which can be simplified following updates to openlibm as per #21727 (comment)) currently apply equally to release-0.6.

I did a local make check-whitespace this time!

@yuyichao is this what you had in mind?
@tkelman please let me know if you want a PR against release-0.6.

cc @ViralBShah

README.arm.md Outdated
JULIA_CPU_TARGET=cortex-a57
override USE_SYSTEM_BLAS=1
override USE_SYSTEM_LAPACK=1
sudo apt-get install libssl-dev
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ARMv8 part LGTM. I think this line should have been included in the general build instruction already?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At the moment the 'general' build instructions are part of the 32-bit specific section, rather than the general content, since I haven't yet had to do anything other than install some standard libraries and run make on the AArch64 target to which I have access.

I could move the 'general' instructions into the non-architecture-specific material, but note that at present these:

  1. make no distinction between requisite build software and system libraries which can be installed in order to avoid building dependencies
  2. refer to specific gcc versions that might not be appropriate (for example, I am using 5.4 on AArch64)
  3. don't specify libssl (is it just a peculiarity of the nVidia customised distribution that this wasn't installed by default?).

I can remove the general build software from the current list of requirements (and simply refer to the main Julia README), at which point this is fairly generic advice. But I don't have any AArch32 systems on which to test modified instructions, hence my hesitance to touch this section.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was actually talking about the platform independent instructions. Actually, what deps links to libssl? This is likely linux specific and not arm/aarch64 specific.

make no distinction between requisite build software and system libraries which can be installed in order to avoid building dependencies

You mean the two lists in the section I linked above?

refer to specific gcc versions that might not be appropriate

It mentions >= 4.7, which should be appropriate.

don't specify libssl

It probably should in linux-specific part. Someone else with more experience building it on debian would probably know @tkelman @staticfloat

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand, and agree. Let me make the other changes and then come back to this. Will await advice regarding libssl.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Installing libcurl4-openssl-dev is what does the trick on debian.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The question is more about which dependency links to libssl rather than what package to install. If libcurl is the one that needs libssl, it should be mentioned in the main README.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nothing should need libssl any more

README.arm.md Outdated

[Nightly builds](https://status.julialang.org/download/linux-arm) are
available for ARMv7-A.
Julia support for ARM is work-in-progress, though good results have been
Copy link
Contributor

@yuyichao yuyichao May 7, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I'm concerned there's one known issue #12346 on AArch32 and no known issue on AArch64 and all tests passes on AArch64 (for longer than a year now). Also, almost all x86 specific optimizations have been implemented for AArch64 (with the exception of CPUID detection which is possible but there isn't any v8.1-v8.3 devices or devices with other interesting ISA extensions available for this to be used). I've also been routinely doing performance tests on AArch64 for a lot of my PRs.

While maybe AArch32 is still "work-in-progress" (especially armv6, I'd consider armv7 to be almost finished too) I'd consider AArch64 support to be finished at this point. This is also why I didn't feel like adding AArch64 specific instructions before.

README.arm.md Outdated
[Nightly builds](https://status.julialang.org/download/linux-arm) are
available for ARMv7-A.

### Building Julia

Julia has been compiled on several ARMv7 / Cortex A15 Samsung
Chromebooks running Ubuntu Linux under Crouton, Raspberry Pi systems
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since you are doing a overhaul of this file, we should update this too. No enabled tests should be failing (on armv7) (profile tests are disabled), backtraces are available.

README.arm.md Outdated
@@ -23,10 +33,7 @@ If you get SIGILL during sysimg.o creation, it is likely that your cpu
does not support VFP. File an issue on the Julia issue tracker with
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is an issue anymore, especially not for native build. Mentioning that /proc/cpuinfo content should be included for ARM bug report would be good though.

@@ -112,9 +119,9 @@ If building LLVM fails, you can download binaries from the LLVM website:

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(A few lines up) I think we want LLVM 3.9.0 now.

@samuelpowell
Copy link
Member Author

I have addressed most of @yuyichao's comments, whilst changing as little as possible in the 32-bit section (which I cannot test).

I am still unclear on the libssl point, and I wonder if the specific instructions regarding the installation of dependencies could now be removed, or moved to the R Pi 1/Zero section, where they appear to be most relevant.

Copy link
Contributor

@yuyichao yuyichao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. The libssl one can probably stay there for now. I'm mainly asking because it might be worth putting in the generic one and it can certainly stay here for completeness.

README.arm.md Outdated
# Building Julia on ARM
A list of [known issues](https://github.com/JuliaLang/julia/labels/arm) for ARM is
available. If you encounter difficulties, please create an issue including the output
of `/proc/cpuinfo`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Output of cat /proc/cpuinfo command" or "Content of /proc/cpuinfo".

@kshyatt kshyatt added system:arm ARMv7 and AArch64 docs This change adds or pertains to documentation labels May 7, 2017
@tkelman
Copy link
Contributor

tkelman commented May 7, 2017

what didn't work without libssl? we use mbedtls now. you may need certificates when building from source, but the ca-certificates package should be enough for those

@samuelpowell
Copy link
Member Author

I don't recall the exact problem and have since deleted the log. I'll reflash the OS tomorrow and build from scratch to find out what was happening.

@samuelpowell
Copy link
Member Author

I reflashed the board and built both master and v0.6.0-rc1 from scratch. I didn't have to install anything other than those dependencies listed in the general instructions, and have updated the document accordingly.

Perhaps libssl-dev or one of its dependencies was required when I built v0.5.1, to which these instructions no longer apply.

README.arm.md Outdated
```

No further changes are required.
A full multi-threaded build, including LLVM,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably more accurate to be called parallel build. It's not multi-threaded....

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed. Fixed.

README.arm.md Outdated
few hours.
Julia has been successfully compiled on several ARMv7 / Cortex A15 Samsung Chromebooks
running Ubuntu Linux under Crouton, a number of Raspberry Pi variants, Odroid boards,
and the nVidia Jetson TX2.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't have to be included here (since not everyone has access to these system) but the aarch64 systems I've tested include Jetson TX1 (the first successful build), X-Gene1, Overdrive 3000 (buildbot), Cavium ThunderX (from packet.net).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would you like me to split the tested platforms between the AArch32/64 sections and add the platforms you've tested?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That could be better I guess though not mandatory.

@samuelpowell
Copy link
Member Author

I have double checked and the libssl dependency indeed related to my build of 0.5.2, to which these instructions no longer relate.

CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES
  OPENSSL_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.5/Modules/FindOpenSSL.cmake:370 (find_package_handle_standard_args)
  CMakeLists.txt:283 (FIND_PACKAGE)


-- Configuring incomplete, errors occurred!
See also "/home/nvidia/julia-v0.5.2/deps/build/libgit2-428e18f8d4765b8ad6cf4022080a81ab16f6fdc4/CMakeFiles/CMakeOutput.log".
See also "/home/nvidia/julia-v0.5.2/deps/build/libgit2-428e18f8d4765b8ad6cf4022080a81ab16f6fdc4/CMakeFiles/CMakeError.log".
/home/nvidia/julia-v0.5.2/deps/libgit2.mk:54: recipe for target 'build/libgit2-428e18f8d4765b8ad6cf4022080a81ab16f6fdc4/Makefile' failed
make[1]: *** [build/libgit2-428e18f8d4765b8ad6cf4022080a81ab16f6fdc4/Makefile] Error 1
Makefile:81: recipe for target 'julia-deps' failed
make: *** [julia-deps] Error 2

@tkelman tkelman merged commit dcffef0 into JuliaLang:master May 13, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
docs This change adds or pertains to documentation system:arm ARMv7 and AArch64
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants