From 97e24a7ffcf12072eb5f0c397c569c6b0de8b6a0 Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Fri, 30 Jun 2023 10:51:09 +0100 Subject: [PATCH 1/3] unixPB: Install capstone 4 from repositories or source --- .../roles/Common/vars/Debian.yml | 1 + .../roles/Common/vars/Fedora.yml | 1 + .../roles/Common/vars/Ubuntu.yml | 1 + .../roles/capstone/tasks/main.yml | 64 +++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml diff --git a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Debian.yml b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Debian.yml index ef99fa7a66..a8135251bd 100644 --- a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Debian.yml +++ b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Debian.yml @@ -17,6 +17,7 @@ Build_Tool_Packages: - gcc - gettext - libasound2-dev + - libcapstone-dev - libcups2-dev - libcurl4-openssl-dev - libdwarf-dev # OpenJ9 diff --git a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Fedora.yml b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Fedora.yml index cc4a282e75..db55c7ec21 100644 --- a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Fedora.yml +++ b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Fedora.yml @@ -11,6 +11,7 @@ Build_Tool_Packages: - bison # OpenJ9 - bzip2 - ca-certificates + - capstone-devel - cpio - curl - cups-devel diff --git a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Ubuntu.yml b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Ubuntu.yml index 2b44b2f6bf..b1872426ba 100644 --- a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Ubuntu.yml +++ b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/Common/vars/Ubuntu.yml @@ -19,6 +19,7 @@ Build_Tool_Packages: - git - gnupg - libasound2-dev + - libcapstone-dev - libcups2-dev - libcurl4-openssl-dev - libdwarf-dev # OpenJ9 diff --git a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml new file mode 100644 index 0000000000..90811bee40 --- /dev/null +++ b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml @@ -0,0 +1,64 @@ +--- +################### +# OpenSSL v1.1.1 # +################### +# Required by OpenJ9 for out-of-process JIT compilation (aka JITaaS) +# Currently only used by the alternate openj9 branch at https://github.com/eclipse/openj9/tree/jitaas + +# Note: some systems have already OpenSSL 1.1.1 instaled (as system) +# do not install 1.1.1b on them + +- name: Set capstone version + set_fact: + capstone_version: 4.0.2 + tags: capstone_source + +# check if it is installed in custom location or as system + +- name: Test if capstone 4 is installed + shell: test -f /usr/local/lib/libcapstone.so.4 || test -f /usr/lib/libcapstone.so.4 + when: + - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "SLES") + - capstone_installed.rc != 0 + register: capstone_installed + changed_when: false + failed_when: false + tags: capstone_source + +- name: Download capstone {{ capstone_version }} + get_url: + url: https://github.com/capstone-engine/capstone/archive/{{ capstone_version }}.tar.gz + dest: /tmp/capstone-{{ capstone_version }}.tar.gz + force: no + mode: 0644 + when: + - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "SLES") + - capstone_installed.rc != 0 + tags: capstone_source + +- name: Extract capstone {{ capstone_version }} + unarchive: + src: /tmp/capstone-{{ capstone_version }}.tar.gz + dest: /tmp + copy: False + when: + - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "SLES") + - capstone_installed.rc != 0 + tags: capstone_source + +- name: Build and install capstone {{ capstone_version }} + shell: cd /tmp/capstone-{{ capstone_version }}} && ./make.sh && PREFIX=/usr/local ./make.sh install + when: + - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "Ubuntu" or ansible_distribution == "SLES") + - capstone_installed.rc != 0 + tags: capstone_source + +- name: Remove downloaded packages for capstone {{ capstone_version }} + file: + path: /tmp/capstone-{{ capstone_version }}.tar.gz + state: absent + failed_when: false + when: + - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "Ubuntu" or ansible_distribution == "SLES") + - capstone_installed.rc != 0 + tags: capstone_source From 9419d4b857480587d9974c84d32044cba2cf7119 Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Fri, 30 Jun 2023 14:07:40 +0100 Subject: [PATCH 2/3] Add checksums to capstone download Signed-off-by: Stewart X Addison --- .../AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml index 90811bee40..f343f69e43 100644 --- a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml +++ b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml @@ -30,7 +30,8 @@ url: https://github.com/capstone-engine/capstone/archive/{{ capstone_version }}.tar.gz dest: /tmp/capstone-{{ capstone_version }}.tar.gz force: no - mode: 0644 + mode: 0440 + checksum: sha512:7f93534517307b737422a8825b66b2a1f3e1cca2049465d60ab12595940154aaf843ba40ed348fce58de58b990c19a0caef289060eb72898cb008a88c470970e when: - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "SLES") - capstone_installed.rc != 0 From c56b4b948af1b4bb4623a50214dfad23f100fe0f Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Mon, 3 Jul 2023 16:17:34 +0100 Subject: [PATCH 3/3] Only build correct capstone support for the machine --- .../AdoptOpenJDK_Unix_Playbook/main.yml | 2 + .../roles/capstone/tasks/main.yml | 46 +++++++++++++------ 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/main.yml b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/main.yml index 7ac31394a2..71fce01c35 100644 --- a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/main.yml +++ b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/main.yml @@ -78,6 +78,8 @@ - role: cmake # OpenJ9 / OpenJFX when: ansible_distribution != "Solaris" # Compile fails on Solaris tags: [build_tools, build_tools_openj9, build_tools_openjfx] + - role: capstone + tags: [build_tools] - role: ccache when: ansible_distribution != "Solaris" # Compile fails on Solaris - role: nasm # OpenJ9 diff --git a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml index f343f69e43..9edb8b7271 100644 --- a/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml +++ b/ansible/playbooks/AdoptOpenJDK_Unix_Playbook/roles/capstone/tasks/main.yml @@ -1,12 +1,10 @@ --- -################### -# OpenSSL v1.1.1 # -################### -# Required by OpenJ9 for out-of-process JIT compilation (aka JITaaS) -# Currently only used by the alternate openj9 branch at https://github.com/eclipse/openj9/tree/jitaas - -# Note: some systems have already OpenSSL 1.1.1 instaled (as system) -# do not install 1.1.1b on them +########################## +# Install capstone 4.0.2 # +########################## +# Required to build with hsdis disassembler support. +# Note that at present this is only supported in the openjdk codebase +# on x64 and aarch64, but this installs on all archs except RISC-V - name: Set capstone version set_fact: @@ -18,8 +16,7 @@ - name: Test if capstone 4 is installed shell: test -f /usr/local/lib/libcapstone.so.4 || test -f /usr/lib/libcapstone.so.4 when: - - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "SLES") - - capstone_installed.rc != 0 + - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "Ubuntu" or ansible_distribution == "SLES") register: capstone_installed changed_when: false failed_when: false @@ -33,8 +30,9 @@ mode: 0440 checksum: sha512:7f93534517307b737422a8825b66b2a1f3e1cca2049465d60ab12595940154aaf843ba40ed348fce58de58b990c19a0caef289060eb72898cb008a88c470970e when: - - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "SLES") + - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "Ubuntu" or ansible_distribution == "SLES") - capstone_installed.rc != 0 + - (ansible_architecture != "riscv64") tags: capstone_source - name: Extract capstone {{ capstone_version }} @@ -43,15 +41,37 @@ dest: /tmp copy: False when: - - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "SLES") + - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "Ubuntu" or ansible_distribution == "SLES") - capstone_installed.rc != 0 + - (ansible_architecture != "riscv64") tags: capstone_source +- name: Set architecture variable for x64 + set_fact: capstone_architecture=x86 + when: ansible_architecture == "x86_64" + +- name: Set architecture variable for arm32 + set_fact: capstone_architecture=arm + when: ansible_architecture == "armv7l" + +- name: Set architecture variable for aarch64 + set_fact: capstone_architecture=aarch64 + when: ansible_architecture == "aarch64" + +- name: Set architecture variable for ppc64le + set_fact: capstone_architecture=powerpc + when: ansible_architecture == "ppc64le" + +- name: Set architecture variable for s390x + set_fact: capstone_architecture=systemz + when: ansible_architecture == "s390x" + - name: Build and install capstone {{ capstone_version }} - shell: cd /tmp/capstone-{{ capstone_version }}} && ./make.sh && PREFIX=/usr/local ./make.sh install + shell: cd /tmp/capstone-{{ capstone_version }} && CAPSTONE_ARCHS={{ capstone_architecture }} ./make.sh && PREFIX=/usr/local ./make.sh install when: - (ansible_distribution == "RedHat" or ansible_distribution == "CentOS" or ansible_distribution == "Ubuntu" or ansible_distribution == "SLES") - capstone_installed.rc != 0 + - (ansible_architecture != "riscv64") tags: capstone_source - name: Remove downloaded packages for capstone {{ capstone_version }}