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

Add more complete linux build instructions #101631

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

agocke
Copy link
Member

@agocke agocke commented Apr 26, 2024

I'm trying to make it slightly easier to install the needed requirements, and add some validation if a user hasn't installed the requirements.

Also, I validated that these instructions still work for Ubuntu 24.04 and have noted that other installs are only community-supported.

I'm trying to make it slightly easier to install the needed requirements, and add some validation if a user hasn't installed the requirements.

Also, I validated that these instructions still work for Ubuntu 24.04 and have noted that other installs are only community-supported.
@dotnet-issue-labeler dotnet-issue-labeler bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Apr 26, 2024
@am11
Copy link
Member

am11 commented Apr 26, 2024

I'm using eng/install-native-dependencies.sh in Debian/Ubuntu, Alpine and macOS. It works well. Do we need another mechanism; another list to maintain?

eng/native/build-commons.sh Outdated Show resolved Hide resolved
@jkotas jkotas added area-Infrastructure and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Apr 27, 2024
Copy link
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@agocke
Copy link
Member Author

agocke commented Apr 29, 2024

I'm using eng/install-native-dependencies.sh in Debian/Ubuntu, Alpine and macOS. It works well. Do we need another mechanism; another list to maintain?

I didn't know about that entry point. I'm happy to integrate with that.

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@am11
Copy link
Member

am11 commented Apr 29, 2024

I'm happy to integrate with that.

I think it would be good to just point to the (self-documenting) helper script. On fresh machine (baremetal, cloud VM, CI, container) it installs the prereqs in a few second enough to build all default subsets.

# replace 'ubuntu' with 'alpine' without changing the steps
$ docker run --rm -v$(pwd):/runtime -w /runtime --platform linux/arm64/v8 ubuntu sh -c '
	eng/install-native-dependencies.sh;
	./build.sh -c Release'

@agocke
Copy link
Member Author

agocke commented Apr 29, 2024

I think it would be good to just point to the (self-documenting) helper script

I'm fine with this but the lists are currently inconsistent.

Our docs:

build-essential
clang
cmake
curl
git
libicu-dev
libkrb5-dev
liblttng-ust-dev
libssl-dev
lld
lldb
llvm
ninja-build
python-is-python3
zlib1g-dev

Script

build-essential
clang
cmake
gettext
libicu-dev
libkrb5-dev
liblldb-dev
liblttng-ust-dev
libssl-dev
libunwind8-dev
lldb
llvm
locales
zlib1g-dev

Diff:

build-essential
clang
cmake
-curl
-git
+gettext
libicu-dev
libkrb5-dev
+liblldb-dev
liblttng-ust-dev
libssl-dev
-lld
+libunwind8-dev
lldb
llvm
-ninja-build
-python-is-python3
+locales
zlib1g-dev

Thoughts? I personally think ninja-build should be in there even if it's not strictly necessary.

@am11
Copy link
Member

am11 commented Apr 29, 2024

Yup, agreed.

  • ninja-build can be added in both debian and alpine (it has the same package name).
  • curl and python3 on debian, and python3 on alpine are implicitly installed (but we can explicitly specify them)
  • lld can be added in both debian and alpine.
  • git is not strictly needed (but can be added).

@agocke
Copy link
Member Author

agocke commented Apr 30, 2024

OK, I took the most conservative approach of just taking the union, since I'm not sure what's actually necessary.

Also, docs have been updated to point to the shell script.

@@ -39,6 +39,9 @@ check_prereqs()
# We try again with the PKG_CONFIG_PATH in place, if pkg-config still can't find OpenSSL, exit with an error, cmake won't find OpenSSL either
pkg-config openssl || { echo >&2 "Please install openssl before running this script, see https://github.com/dotnet/runtime/blob/main/docs/workflow/requirements/macos-requirements.md"; exit 1; }
fi
elif [[ "$__HostOS" == "linux" ]]; then
# Check presence of cmake on the path
command -v cmake 2>/dev/null || { echo >&2 "Please install cmake before running this script, see https://github.com/dotnet/runtime/blob/main/docs/workflow/requirements/linux-requirements.md"; exit 1; }
Copy link
Member

Choose a reason for hiding this comment

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

We are already testing it in gen-buildsys.sh. Also why is this linux only?

. /etc/os-release
fi

if [ "$ID" = "debian" ] || [ "$ID_LIKE" = "debian" ]; then
apt update

apt install -y build-essential gettext locales cmake llvm clang lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev \
libssl-dev libkrb5-dev zlib1g-dev
xargs apt-get install -y < eng/debian-reqs.txt
Copy link
Member

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 what we discussed? Please keep this simple script as it was, add the missing deps and link in the docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants