You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Migrating applications to Arm-based architectures is increasingly common across cloud, data center, and edge environments. Arm-powered servers and instances, available in AWS, Gooogle Cloud Platform, Microsoft Azure, Alibaba Cloud and Oracle Cloud Infrastructure (OCI), deliver significant performance-per-watt advantages and compelling cost-efficiency.
13
+
Migrating applications to Arm-based architectures is increasingly common across cloud, data center, and edge environments. Arm-powered servers and instances, available from AWS, Google Cloud Platform, Microsoft Azure, Alibaba Cloud, and Oracle Cloud Infrastructure (OCI), offer significant performance-per-watt advantages and compelling costefficiency.
14
14
15
-
However, porting workloads to from one CPU architecture or another, can often require more than just recompilation. While many applications transition smoothly, others contain architecture-specific code or dependencies – developed originally for x86 – that can lead to build failures, runtime errors, or performance degradation on Arm systems.
15
+
However, porting workloads from one CPU architecture to anotheroften requires more than simple recompilation. While many applications transition smoothly, others contain architecture-specific code or dependencies – originally developed for x86 – that can lead to build failures, runtime errors, or performance degradation on Arm systems.
16
16
17
-
Common challenges include detecting:
18
-
* Hardcoded x86 SIMD intrinsics
19
-
* Inline assembly
20
-
* Platform-specific system calls
21
-
* Unsupported compiler flags
22
-
* Non-portable build scripts or logic
17
+
Common challenges include issues with:
18
+
* Hardcoded x86 SIMD intrinsics.
19
+
* Inline assembly.
20
+
* Platform-specific system calls.
21
+
* Unsupported compiler flags.
22
+
* Non-portable build scripts or logic.
23
23
24
24
In large or legacy codebases, these issues are often buried in third-party libraries or auto-generated components, making manual inspection slow and unreliable.
25
25
26
-
### Automated Analysis for Portability
27
-
To address these challenges, static code analysis tools play a critical role. Tools specifically designed for portability analysis enable developers to scan local codebases or remote repositories (e.g., GitHub) —and pinpoint architecture-specific constructs before attempting compilation or deployment on Arm. By surfacing portability concerns early in the development cycle, code scanning reduces time-to-first-build and helps prevent complex failures later.
26
+
### Automated analysis for portability
27
+
To address these challenges, static code analysis tools play a critical role. Tools specifically designed for portability analysis enable developers to scan local codebases or remote repositories (such as GitHub) and pinpoint architecture-specific constructs before attempting compilation or deployment on Arm. By surfacing portability issues early in the development cycle, code scanning reduces time-to-first-build and helps prevent complex failures later on.
28
28
29
-
In this learning path, you will learn about `migrate-ease`, a tool which allows developers to move beyond trial-and-error debugging to port their code to Arm. It provides clear, actionable insights into potential portability issues, detecting problematic patterns across many mainstream programming languages. These insights, combined with targeted refactoring, accelerate the process of making code portable, maintainable, and production-ready on Arm.
29
+
In this Learning Path, you'll use `migrate-ease`, a tool that helps developers move beyond trial-and-error debugging when porting their code to Arm. It provides clear, actionable insights into potential portability issues by detecting problematic patterns across widely used programming languages. These insights - combined with targeted refactoring - accelerate the process of making code portable, maintainable, and production-ready on Arm.
title: "Supported Programming Languages and Common Issues Identified"
3
+
title: "Migrate-ease and supported programming languages"
4
4
5
5
weight: 3
6
6
@@ -10,51 +10,51 @@ layout: "learningpathall"
10
10
11
11
### What is migrate-ease?
12
12
13
-
[Migrate-ease](https://github.com/migrate-ease/) is a fork of [Porting advisor](https://github.com/arm-hpc/porting-advisor), an open-source project developed by Arm. Migrate-ease is maintained by the [OpenAnolis](https://github.com/openanolis) Arm Working Group.
13
+
[`Migrate-ease`](https://github.com/migrate-ease/) is a fork of [Porting Advisor](https://github.com/arm-hpc/porting-advisor), an open-source project developed by the Arm High Performance Computing Group. It is maintained by the [OpenAnolis](https://github.com/openanolis) Arm Working Group.
14
14
15
15
16
-
It is designed to analyze codebases specifically for `x86_64` architectures and offers tailored suggestions to facilitate the migration process to aarch64.
17
-
At present, this tool only supports codebase migration to Linux. The tool can be run on Arm or `x86_64` Linux machines. The tool does not modify any code, it inspects your code and provides recommendations.
18
-
It does not provide API level recommendations, and it does not send any data back to OpenAnolis.
16
+
`Migrate-ease` is designed to analyze codebases targeting `x86_64` architectures and offers tailored suggestions to facilitate migration to AArch64. The tool currently only supports migration to Linux-based environments and can be run on either `x86_64` or Arm AArch64 Linux machines.
19
17
20
-
### List of Supported Programming Languages
18
+
`Migrate-ease` is a read-only tool - it does not modify your code. It analyzes your source tree and provides architecture-specific recommendations. It does not provide API-level guidance, and it does not transmit data back to OpenAnolis.
21
19
22
-
This tool scans all files in a source tree, regardless of whether they are included by the build system or not. Currently, the tool supports the following languages/dependencies and the types of checks available for each launguage are shown:
20
+
### Supported programming languages and checks
23
21
24
-
#### C, C++
25
-
- Inline assembly with no corresponding aarch64 inline assembly
26
-
- Assembly code with no corresponding aarch64 assembly code
27
-
- Use of architecture specific intrinsic
28
-
- Use of architecture specific compilation options
29
-
- Preprocessor errors that trigger when compiling on aarch64
30
-
- Compiler specific code guarded by compiler specific pre-defined macros
31
-
- Missing aarch64 architecture detection in Makefile, Config.guess scripts
32
-
- Linking against libraries that are not available on the aarch64 architecture
22
+
The tool scans all files in a source tree, whether or not they are included by the build system. The following programming languages and dependency types are supported. For each language, the types of portability checks performed are listed.
23
+
24
+
#### C and C++
25
+
- Inline assembly with no corresponding AArch64 implementation.
26
+
- Architecture-specific assembly code.
27
+
- Use of architecture-specific intrinsics.
28
+
- Architecture-specific compilation options.
29
+
- Preprocessor errors triggered when compiling on AArch64.
30
+
- Compiler-specific code guarded by compiler-specific macros.
31
+
- Missing AArch64 detection logic in Makefile or `config.guess` scripts.
32
+
- Linking against libraries not available on AArch64.
33
33
34
34
#### Go
35
-
- Inline assembly with no corresponding aarch64 inline assembly
36
-
-Assembly code with no corresponding aarch64 assembly code
37
-
- Use of architecturespecific intrinsic
38
-
- Linking against libraries that are not available on the aarch64 architecture
35
+
- Inline assembly with no corresponding AArch64 implementation.
36
+
-Architecture-specific assembly code.
37
+
- Use of architecture-specific intrinsics.
38
+
- Linking against libraries unavailable on AArch64.
39
39
40
40
#### Python
41
-
- Inline assembly with no corresponding aarch64 inline assembly
42
-
- Use of architecturespecific intrinsic
43
-
-Linking against libraries that are not available on the aarch64 architecture
44
-
-Use of architecture specific packages
41
+
- Inline assembly with no corresponding AArch64 implementation.
42
+
- Use of architecture-specific intrinsics.
43
+
-Use of architecture-specific packages.
44
+
-Linking against libraries unavailable on AArch64.
45
45
46
46
#### Rust
47
-
- Inline assembly with no corresponding aarch64 inline assembly
48
-
- Use of architecturespecific intrinsic
49
-
- Linking against libraries that are not available on the aarch64 architecture
47
+
- Inline assembly with no corresponding AArch64 implementation.
48
+
- Use of architecture-specific intrinsics.
49
+
- Linking against libraries unavailable on AArch64.
50
50
51
51
#### Java
52
-
- JAR scanning
53
-
-Dependency versions in `pom.xml` file
54
-
-A feature to detect native calls in Java source code
55
-
-Compatible version recommendations
52
+
- JAR dependency scanning.
53
+
-Version checks in `pom.xml` file.
54
+
-Detection of native method calls in Java source code.
55
+
-Recommendations for compatible versions.
56
56
57
57
#### Dockerfile
58
-
- Use of architecturespecific plugin
59
-
-The base image that dockerfile is based on does not support aarch64
[migrate-ease](https://github.com/migrate-ease/migrate-ease) is an open-source project designed to analyze codebases specifically for `x86_64` architectures and offers tailored suggestions aimed at facilitating the migration process to AArch64. This tool streamlines the transition, ensuring a smooth and efficient evolution of your software to leverage the benefits of aarch64 architecture.
14
-
15
-
## Pre-requisites
16
-
Before you use `migrate-ease`, certain pre-requisites need to be installed:
10
+
## Set up your environment
11
+
Before using `migrate-ease`, install the following system dependencies:
At the root directory of migrate-ease, create and activate a python virtual environment:
30
+
Create and activate a Python virtual environment:
38
31
```bash
39
32
python3 -m venv .venv
40
33
source .venv/bin/activate
41
34
```
42
35
43
-
Install the python packages dependencies and set the environment variable to point to it:
36
+
Install the required packages and set the environment variable:
44
37
```bash
45
38
pip3 install -r requirements.txt
46
39
export PYTHONPATH=`pwd`
47
40
```
48
41
49
42
## Usage
50
43
51
-
You are now ready to use `migrate-ease`on your source code. You can use the tool either from the command-line or using a Web GUI.
44
+
You can use `migrate-ease` from the command-line or through a Web GUI.
52
45
53
46
### Command-line usage
54
-
55
-
From the command-line, you can use the tool to scan your local codebases with different programming languages. The result from the code analysis is sent to console by default.
47
+
48
+
You can scan local codebases written in a supported programming languages. By default, scan results from the code analysis are sent to the console.
@@ -86,23 +79,23 @@ There are more parameters for user to control the scan functionality. To see thi
86
79
```bash
87
80
python3 -m {scanner_name} -h
88
81
```
89
-
Replace {scanner_name} with either cpp, docker, go, java, python or rust.
82
+
Replace {scanner_name} with either cpp, docker, go, java, Python or rust.
90
83
91
-
### As Web UI
92
-
Migrate-ease also provides a Web UI that supports scanning a git repo with cpp, docker, go, java, python and rust scanners in one time.
84
+
### GUI
85
+
Migrate-ease also provides a Web UI that supports scanning a git repo with cpp, docker, go, java, Python and rust scanners in one time.
93
86
To start the web server, simply run:
94
87
```
95
88
python3 web/server.py
96
89
```
97
90
98
-
Once that is successfully done, you can access a web server hosted at http://localhost:8080
91
+
Once the server is running, you can access a web server hosted at http://localhost:8080
99
92
100
-
The web UI looks as following:
101
-

93
+
The web UI looks like this:
94
+

102
95
103
-
A git repo URL is required, and you can specify certain branch name to scan. Once the necessary information is filled, user can click "START SCAN" button to proceed project scanning.
96
+
A git repo URL is required, and you can specify certain branch name to scan. Once the necessary information is filled, you can click the **START SCAN** button to proceed project scanning.
104
97
105
-
Scanning progress will be shown in the console pane. Once all jobs are done, user will see a web page as following:
106
-

98
+
Scanning progress is then shown in the console pane. Once all the jobs are done, you will see a web page like this:
99
+

107
100
108
-
You can download the result by clicking the "download" icon or view the result by clicking the "eye" icon.
101
+
You can download the result by clicking the symbolic download icon button, or view the result by clicking the icon which looks like an eye.
0 commit comments