diff --git a/roles/separate_build_node/defaults/main/common.yml b/roles/separate_build_node/defaults/main/common.yml index 52b5817..b019604 100644 --- a/roles/separate_build_node/defaults/main/common.yml +++ b/roles/separate_build_node/defaults/main/common.yml @@ -17,4 +17,17 @@ working_directories: - "{{ base_work_dir }}/castor/build_node" - "{{ base_work_dir }}/castor/build_node/mock_configs" - "{{ final_conf_dir }}" +# s390x builds requirements from source without build isolation: +# grpcio 1.58 setup.py needs pkg_resources (removed in setuptools 81), +# git deps with PEP 621 metadata need setuptools>=61 (system one is 53 +# and satisfies a bare "<81" via --system-site-packages) +build_node_s390x_build_requirements: + - "setuptools>=61,<81" + - "cython<3" + - "wheel" +build_node_s390x_pip_environment: + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL: "1" + GRPC_PYTHON_BUILD_SYSTEM_ZLIB: "1" + GRPC_PYTHON_BUILD_SYSTEM_CARES: "1" + GRPC_PYTHON_BUILD_EXT_COMPILER_JOBS: "1" ... diff --git a/roles/separate_build_node/defaults/main/dnf.yml b/roles/separate_build_node/defaults/main/dnf.yml index 6936131..26101b0 100644 --- a/roles/separate_build_node/defaults/main/dnf.yml +++ b/roles/separate_build_node/defaults/main/dnf.yml @@ -32,4 +32,10 @@ build_node_dnf_packages: - "ubu-keyring" - "xmlsec1-openssl-devel" - "rsyslog-logrotate" +# s390x has no prebuilt wheels for some requirements (e.g. grpcio), +# they are compiled against these system libraries +build_node_s390x_dnf_packages: + - "c-ares-devel" + - "openssl-devel" + - "zlib-devel" ... diff --git a/roles/separate_build_node/tasks/create_env.yml b/roles/separate_build_node/tasks/create_env.yml index 2ae930b..33f66e5 100644 --- a/roles/separate_build_node/tasks/create_env.yml +++ b/roles/separate_build_node/tasks/create_env.yml @@ -49,12 +49,24 @@ become_user: "{{ service_user }}" ansible.builtin.command: "{{ build_node_venv_directory }}/bin/pip install --upgrade pip" +- name: Install s390x build requirements into virtualenv + become: yes + become_user: "{{ service_user }}" + ansible.builtin.pip: + name: "{{ build_node_s390x_build_requirements }}" + virtualenv: "{{ build_node_venv_directory }}" + when: ansible_facts['architecture'] == 's390x' + tags: + - update-env + - name: Install requirements into virtualenv become: yes become_user: "{{ service_user }}" ansible.builtin.pip: requirements: "{{ build_node_requirements_path }}" virtualenv: "{{ build_node_venv_directory }}" + extra_args: "{{ '--no-build-isolation' if ansible_facts['architecture'] == 's390x' else omit }}" + environment: "{{ build_node_s390x_pip_environment if ansible_facts['architecture'] == 's390x' else {} }}" tags: - update-env ... diff --git a/roles/separate_build_node/tasks/dnf.yml b/roles/separate_build_node/tasks/dnf.yml index 39841e1..afef204 100644 --- a/roles/separate_build_node/tasks/dnf.yml +++ b/roles/separate_build_node/tasks/dnf.yml @@ -35,4 +35,13 @@ - buildnode - "{{ powertools_repository_name }}" update_cache: yes + +- name: Install s390x build dependencies for Python packages + become: yes + ansible.builtin.dnf: + name: "{{ build_node_s390x_dnf_packages }}" + state: latest + enablerepo: + - "{{ powertools_repository_name }}" + when: ansible_facts['architecture'] == 's390x' ...