Compare commits

...

8 Commits

Author SHA1 Message Date
jammar1
58bbdbbc44
Merge c40d2f8494 into d053f5534a 2025-05-06 14:14:15 +01:00
dependabot[bot]
d053f5534a
build(deps): Bump github/codeql-action from 3.28.15 to 3.28.17 (#4243)
Some checks are pending
compilation on SGX / build_iwasm (-DWAMR_DISABLE_HW_BOUND_CHECK=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux-sgx) (push) Waiting to run
compilation on SGX / build_iwasm (-DWAMR_DISABLE_HW_BOUND_CHECK=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux-sgx) (push) Waiting to run
compilation on SGX / run_samples_file (-DWAMR_BUILD_SGX_IPFS=1, $AOT_BUILD_OPTIONS, ${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-22.04, linux-sgx) (push) Blocked by required conditions
compilation on SGX / run_samples_file (-DWAMR_BUILD_SGX_IPFS=1, $CLASSIC_INTERP_BUILD_OPTIONS, ${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-22.04, linux-sgx) (push) Blocked by required conditions
compilation on SGX / run_samples_file (-DWAMR_BUILD_SGX_IPFS=1, $FAST_INTERP_BUILD_OPTIONS, ${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-22.04, linux-sgx) (push) Blocked by required conditions
compilation on SGX / run_samples_file (-DWAMR_BUILD_SGX_IPFS=1, $FAST_JIT_BUILD_OPTIONS, ${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-22.04, linux-sgx) (push) Blocked by required conditions
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-22.04, aot, $DEFAULT_TEST_OPTIONS) (push) Blocked by required conditions
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-22.04, aot, $SIMD_TEST_OPTIONS) (push) Blocked by required conditions
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-22.04, aot, $XIP_TEST_OPTIONS) (push) Blocked by required conditions
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-22.04, classic-interp, $DEFAULT_TEST_OPTIONS) (push) Blocked by required conditions
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-22.04, fast-jit, $DEFAULT_TEST_OPTIONS) (push) Blocked by required conditions
compilation on windows-latest / build (-DWAMR_BUILD_AOT=0) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_INTERP=0) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_BUILD_CUSTOM_NAME_SECTION=1) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_BUILD_DEBUG_INTERP=1) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_BUILD_LIBC_UVWASI=0 -DWAMR_BUILD_LIBC_WASI=1) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_BUILD_LIB_PTHREAD=1) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_BUILD_LIB_WASI_THREADS=1) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_BUILD_REF_TYPES=1) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_BUILD_SIMD=1) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_BUILD_TAIL_CALL=1) (push) Waiting to run
compilation on windows-latest / build (-DWAMR_DISABLE_HW_BOUND_CHECK=1) (push) Waiting to run
compilation on windows-latest / test (classic-interp, $DEFAULT_TEST_OPTIONS) (push) Blocked by required conditions
compilation on windows-latest / test (classic-interp, $MULTI_MODULES_TEST_OPTIONS) (push) Blocked by required conditions
compilation on windows-latest / test (classic-interp, $THREADS_TEST_OPTIONS) (push) Blocked by required conditions
compilation on windows-latest / test (classic-interp, $WASI_TEST_OPTIONS) (push) Blocked by required conditions
compilation on windows-latest / test (fast-interp, $DEFAULT_TEST_OPTIONS) (push) Blocked by required conditions
compilation on windows-latest / test (fast-interp, $MULTI_MODULES_TEST_OPTIONS) (push) Blocked by required conditions
compilation on windows-latest / test (fast-interp, $THREADS_TEST_OPTIONS) (push) Blocked by required conditions
compilation on windows-latest / test (fast-interp, $WASI_TEST_OPTIONS) (push) Blocked by required conditions
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.15 to 3.28.17.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Commits](https://github.com/github/codeql-action/compare/v3.28.15...v3.28.17)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 11:16:45 +08:00
YAMAMOTO Takashi
4735956eeb
fix return types of our 64-bit clz/ctz/popcount intrinsics (#4238)
the corresponding LLVM intrinsics' return types are same as
their first argument. eg. i64 for llvm.cttz.i64.
cf. https://llvm.org/docs/LangRef.html#llvm-cttz-intrinsic

this commit changes the return types of our versions of the
intrinsics to match llvm versions as our aot compiler,
specifically __call_llvm_intrinsic, assumes.

strictly speaking, this is a potential AOT ABI change.
however, I suppose it isn't a problem for many of 64-bit ABIs
out there, where (lower half of) a 64-bit register is used to
return a 32-bit value anyway.  (for such ABIs, this commit
would fix the upper 32-bit value of the register.)
2025-05-06 10:15:00 +08:00
liang.he
5910e5cd21
Use --target to pass a triple in wamrc (#4199)
Provide a triple string in the format of <arch>-<vendor>-<os>-<abi>
via --target.
2025-05-06 06:56:06 +08:00
Huang Qi
5bdbba0dbe
platform/nuttx: Fix dcache operation in os_dcache_flush (#4225)
Replace up_invalidate_dcache_all() with up_flush_dcache_all() in
os_dcache_flush() to properly flush the data cache instead of just
invalidating it. This ensures that any modified data in the cache
is written back to memory before execution.

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-05-06 06:55:53 +08:00
YAMAMOTO Takashi
382aa9e6c3
run_clang_format_diff: mention homebrew for clang-format installation (#4237) 2025-05-06 06:55:42 +08:00
YAMAMOTO Takashi
3232bdf2f7
teach aot emitter/loader about .srodata and .srodata.cst* sections (#4240)
LLVM 19 and later started to use srodata ("small read only data")
sections for RISCV.  cf. https://github.com/llvm/llvm-project/pull/82214
this commit makes our aot emitter/loader deal with those sections.

an alternative would be to disable small data sections completely by
setting the "SmallDataLimit" module attribute to zero. however, i feel
this commit is more straightforward and consisitent as we are already
dealing with sdata sections.
2025-05-06 06:55:35 +08:00
James Marsh
c40d2f8494 Update version to 2.3.0 2025-04-01 11:04:36 +01:00
13 changed files with 209 additions and 22 deletions

View File

@ -53,7 +53,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3.28.15
uses: github/codeql-action/init@v3.28.17
with:
languages: ${{ matrix.language }}
@ -70,7 +70,7 @@ jobs:
- run: |
./.github/scripts/codeql_buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3.28.15
uses: github/codeql-action/analyze@v3.28.17
with:
category: "/language:${{matrix.language}}"
upload: false
@ -99,7 +99,7 @@ jobs:
output: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif
- name: Upload CodeQL results to code scanning
uses: github/codeql-action/upload-sarif@v3.28.15
uses: github/codeql-action/upload-sarif@v3.28.17
with:
sarif_file: ${{ steps.step1.outputs.sarif-output }}
category: "/language:${{matrix.language}}"

View File

@ -60,6 +60,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@4c3e5362829f0b0bb62ff5f6c938d7f95574c306
uses: github/codeql-action/upload-sarif@5eb3ed6614230b1931d5c08df9e096e4ba524f21
with:
sarif_file: results.sarif

View File

@ -1,3 +1,152 @@
## WAMR-2.3.0
### Breaking changes
### New features
- Merge dev/simd for fast-interp (#4131)
- Merge pull request #4033 from g0djan/godjan/iterate_callstack
### Bug fixes
- fix(ios): Remove `float-abi` flag (#3889)
- Fix out of bounds issues after memory.grow on non-aot non-threads builds (#3872)
- Fix out of bounds issue in is_native_addr_in_shared_heap function (#3886)
- Fix mmap flags for AOT loader on non-Linux SGX platforms (#3890)
- fix(uwp): Gate NTSTATUS definition behind WINAPI_PARTITION_DESKTOP for UWP builds
- Fix linked global initialization in multimodule (#3905)
- Correct the table index calculation in aot_instantiation (#3903)
- Fix a leak in wasm_loader_emit_br_info (#3900)
- Check possible integer overflow in aot memory boundary check (#3920)
- Fix CI wamr-ide error (#3913)
- Fix WASI Path Mapping Processing (#3923)
- Use plain assignment rather than bh_memcpy_s (#3924)
- Fix loader small bug (#3928)
- don't return an uninitialized trap if argv_to_results fails (#3935)
- support WASM_FUNCREF return type in argv_to_results (#3936)
- Fix incorrect assignment in win_file.c (#3939)
- Fix aot table instantiate (#3946)
- set alignment 4 when loading multi return value (#3955)
- Only access Zephyr thread stats info when it's available (#3962)
- top-level cmakefile: fix macOS build (#3968)
- Merge pull request #3987 from no1wudi/fix
- Handle a new scenario where an item is both exported and imported. (#3984)
- platform/nuttx: Flush icache/dcache properly (#4147)
- fix(runtest.py): A workaround to bypass errors that occur when deleting temporary files (#4093)
- Fix build issues when compiling WAMRC as a cross-compiler (#4112)
- include bh_platform.h (#4135)
- Fix iwasm build error when WAMR_BUILD_WASI_NN enabled (#4138)
- Merge pull request #4132 from bytecodealliance/dependabot/github_actions/github/codeql-action-3.28.11
- avoid Windows perform newline translation (#4128)
- fix: correct typos and improve comments across multiple files by codespell (#4116)
- fix: fix load aarch64 aot failed (#4114)
- wasm_loader allocates more spaces for elements (#4099)
- fix: add dispose of the debug information builder when destroying compilation context (#4105)
- build(deps): Bump github/codeql-action from 3.28.9 to 3.28.10
- build(deps): Bump actions/upload-artifact from 4.6.0 to 4.6.1
- prevent data overflow on 32 bit platform for memory.grow
- fix: when load aot init expr,no type_idx set. (#4094)
- fix(aot_emit_aot_file): prevent buffer emission for zero byte_count (#4095)
- fix(build_llvm_libraries.yml): Correct script path for build_llvm.py
- fix(unit-test): libc_builtin_test issues (#4073)
- [gc] Subtyping fix (#4075)
- fix(build_llvm.py): clean up whitespace and formatting in build script
- Unit test:type matching issue and code redundancy (#4079)
- fix(aot): ensure value_cmp does not exceed br_count in branch table compilation (#4065)
- In wasm32, fix potential conversion overflow when enlarging 65536 pages (#4064)
- Use wasm32-wasip1 instead of wasm32-wasi target for rust code (#4057)
- Update Rust target from 'wasm32-wasi' to 'wasm32-wasip1' in CI (#4050)
- Fix wasm loader check data segment count (#4039)
- Fix table index calculations in wasm_loader and wasm_mini_loader (#4004)
- Ensure __heap_base and __data_end global indices are validated against import count (#3996)
### Enhancements
- Refine looking up aot function with index (#3882)
- Wasm loader enhancement: check code size in code entry (#3892)
- Refactor AOT loader to support compatible versions (#3891)
- GlobalValueSet was moved to IRPartitionLayer recently, but we have a local definition anyway (#3899)
- Support external toolchain on Windows for aot compiler (#3911)
- Drop declarative elements on module instantiation (#3922)
- add testcases for shared heap and fix POP_MEM_OFFSET of memory64 (#3916)
- Enable ref types by default (#3894)
- Update README.md to clarify Windows toolchain support and ESP-IDF reference (#3917)
- add thread cpu time for zephyr (#3937)
- Improvements for platform thread APIs on Windows and Zephyr (#3941)
- Refactor SConscript and add file checks in iwasm.c (#3945)
- Consume the placeholders that were put when emitting table info (#3940)
- wasm_export.h: Use "default" visibility for gcc and clang (#3957)
- [fuzzing] Enable instantiation (#3958)
- use a random secret key (#3971)
- CMakeLists.txt: Do not require C++ (#3956)
- add reference type support by default for darwin to support WASI-SDK-25 (#3978)
- top-level cmake: link llvm libraries to our shared library (#3973)
- Set thread information earlier in exec_env creation (#3967)
- Break aot_create_comp_data into small functions
- Optimize memory initialization handling in AOT loader (#3983)
- nuttx: remove the up_x API for kernel build (#4154)
- Merge pull request #4124 from swankjesse/WAMR_BUILD_GC_HEAP_SIZE_DEFAULT
- Move the default heap size initialization
- Expose WAMR_BUILD_GC_HEAP_SIZE_DEFAULT as a CMake option
- log warning instaed of assertion (#4119)
- feat: use C linkage in aot_comp_option.h for C++ embeding (#4106)
- cr suggestions
- Copy read only API behind a flag instead of using user defined callback
- Cmake improvements (#4076)
- feat: add support for EXTERNREF value type and enable AOT validator in fuzz tests (#4083)
- build_llvm.py: Allow to build xtensa target on non-xtensa host
- Add a conditional check for the macro __STDC_VERSION__ (#4080)
- [fuzzing] execute every exported function (#3959)
- Update memory allocation functions to use allocator user data (#4043)
- Cleanup check_version_h workflow by removing unnecessary outputs and permissions
- Add workflow to confirm version.h is in sync and integrate it into Android compilation workflow
- Add version.h and update versioning documentation for embedded platforms
- Remove deprecated version.h file and update versioning documentation
- Refactor versioning documentation and adopt semantic versioning guidelines
- Add versioning information for libraries and executables across multiple platforms
- Add versioning support and update CMake configuration
- initial
- Show wasm proposals status during compilation and execution (#3989)
- add a validator for aot module (#3995)
- Synchronize the GC spec tests to the commit from December 9. 2024. (#4022)
- Refine getting const offsets in wasm loader of fast-interp (#4012)
- fixes for compiling on windows (#4026)
- .github: Add shared lib builds (#3975)
- Refine read leb int wasm loader of fast interpreter (#4017)
- Enable shrunk memory by default and add related configurations (#4008)
- Add documentation regarding security issues and the status of Wasm proposals (#3972)
- Improve stack consistency by ensuring sufficient space for dummy offsets (#4011)
- Check whether related table has funcref elem in opcode call_indirect (#3999)
- [fuzzing] Use software bound-check during fuzzing (#4003)
- Add an example of how to embed WAMR in Zephyr user mode (#3998)
- Error message improvement (#4000)
### Others
- Exclude fuzz test python and npm packages in scoreboard scan (#3871)
- build(deps): bump github/codeql-action from 3.26.13 to 3.27.0 (#3888)
- Bump AOT_CURRENT_VERSION for WAMR 2.x (gc, memory64) (#3880)
- build(deps): bump github/codeql-action from 3.27.0 to 3.27.1 (#3902)
- build(deps): bump github/codeql-action from 3.27.1 to 3.27.4 (#3912)
- build(deps): bump github/codeql-action from 3.27.4 to 3.27.5 (#3931)
- build(deps): bump github/codeql-action from 3.27.5 to 3.27.6
- build(deps): Bump github/codeql-action from 3.27.6 to 3.27.9 (#3960)
- Add Tianlong into code owners (#3970)
- build(deps): Bump actions/upload-artifact from 4.4.3 to 4.5.0 (#3981)
- build(deps): Bump github/codeql-action from 3.27.9 to 3.28.0 (#3982)
- docs: Update build instructions suggestions for using Valgrind (#4164)
- test: temporarily skip 'skip-stack-guard-page' test case until issue is resolved
- build(deps): Bump actions/upload-artifact from 4.6.1 to 4.6.2 (#4159)
- build(deps): Bump github/codeql-action from 3.28.11 to 3.28.12 (#4160)
- Update NuttX and NuttX Apps references to releases/12.9 in workflow f… (#4148)
- build(deps): Bump esbuild, @vitejs/plugin-react and vite (#4149)
- build(deps): Bump github/codeql-action from 3.28.10 to 3.28.11
- Restore the doc heading.
- build(deps): Bump ossf/scorecard-action from 2.4.0 to 2.4.1
- build(deps): Bump github/codeql-action from 3.28.8 to 3.28.9 (#4074)
- build(deps): Bump github/codeql-action from 3.28.5 to 3.28.8
- build(deps): Bump github/codeql-action from 3.28.1 to 3.28.5
- build(deps): Bump github/codeql-action from 3.28.0 to 3.28.1 (#4020)
- build(deps): Bump actions/upload-artifact from 4.5.0 to 4.6.0 (#4021)
---
## WAMR-2.2.0
### Breaking changes

View File

@ -7,7 +7,7 @@ if(NOT WAMR_ROOT_DIR)
endif()
set(WAMR_VERSION_MAJOR 2)
set(WAMR_VERSION_MINOR 2)
set(WAMR_VERSION_MINOR 3)
set(WAMR_VERSION_PATCH 0)
message("-- WAMR version: ${WAMR_VERSION_MAJOR}.${WAMR_VERSION_MINOR}.${WAMR_VERSION_PATCH}")

View File

@ -98,9 +98,19 @@ def run_clang_format_diff(root: Path, commits: str) -> bool:
code before committing the PR, or it might fail to pass the CI check:
1. Install clang-format-14.0.0
Normally we can install it by `sudo apt-get install clang-format-14`,
or download the package from https://github.com/llvm/llvm-project/releases
and install it
You can download the package from
https://github.com/llvm/llvm-project/releases
and install it.
For Debian/Ubuntu, we can probably use
`sudo apt-get install clang-format-14`.
Homebrew has it as a part of llvm@14.
```shell
brew install llvm@14
/usr/local/opt/llvm@14/bin/clang-format
```
2. Format the C/C++ source file
``` shell

View File

@ -194,7 +194,7 @@ aot_intrinsic_clz_i32(uint32 type)
return num;
}
uint32
uint64
aot_intrinsic_clz_i64(uint64 type)
{
uint32 num = 0;
@ -220,7 +220,7 @@ aot_intrinsic_ctz_i32(uint32 type)
return num;
}
uint32
uint64
aot_intrinsic_ctz_i64(uint64 type)
{
uint32 num = 0;
@ -244,7 +244,7 @@ aot_intrinsic_popcnt_i32(uint32 u)
return ret;
}
uint32
uint64
aot_intrinsic_popcnt_i64(uint64 u)
{
uint32 ret = 0;

View File

@ -186,19 +186,19 @@ aot_intrinsic_fmax_f64(float64 a, float64 b);
uint32
aot_intrinsic_clz_i32(uint32 type);
uint32
uint64
aot_intrinsic_clz_i64(uint64 type);
uint32
aot_intrinsic_ctz_i32(uint32 type);
uint32
uint64
aot_intrinsic_ctz_i64(uint64 type);
uint32
aot_intrinsic_popcnt_i32(uint32 u);
uint32
uint64
aot_intrinsic_popcnt_i64(uint64 u);
float32

View File

@ -3189,10 +3189,12 @@ do_text_relocation(AOTModule *module, AOTRelocationGroup *group,
symbol_addr = module->code;
}
else if (!strcmp(symbol, ".data") || !strcmp(symbol, ".sdata")
|| !strcmp(symbol, ".rdata")
|| !strcmp(symbol, ".rodata")
|| !strcmp(symbol, ".rdata") || !strcmp(symbol, ".rodata")
|| !strcmp(symbol, ".srodata")
/* ".rodata.cst4/8/16/.." */
|| !strncmp(symbol, ".rodata.cst", strlen(".rodata.cst"))
/* ".srodata.cst4/8/16/.." */
|| !strncmp(symbol, ".srodata.cst", strlen(".srodata.cst"))
/* ".rodata.strn.m" */
|| !strncmp(symbol, ".rodata.str", strlen(".rodata.str"))
|| !strcmp(symbol, AOT_STACK_SIZES_SECTION_NAME)

View File

@ -3270,8 +3270,17 @@ is_data_section(AOTObjectData *obj_data, LLVMSectionIteratorRef sec_itr,
return (!strcmp(section_name, ".data") || !strcmp(section_name, ".sdata")
|| !strcmp(section_name, ".rodata")
#if LLVM_VERSION_MAJOR >= 19
/* https://github.com/llvm/llvm-project/pull/82214 */
|| !strcmp(section_name, ".srodata")
#endif
/* ".rodata.cst4/8/16/.." */
|| !strncmp(section_name, ".rodata.cst", strlen(".rodata.cst"))
#if LLVM_VERSION_MAJOR >= 19
/* https://github.com/llvm/llvm-project/pull/82214
* ".srodata.cst4/8/16/.." */
|| !strncmp(section_name, ".srodata.cst", strlen(".srodata.cst"))
#endif
/* ".rodata.strn.m" */
|| !strncmp(section_name, ".rodata.str", strlen(".rodata.str"))
|| (!strcmp(section_name, ".rdata")

View File

@ -2742,10 +2742,23 @@ aot_create_comp_context(const AOTCompData *comp_data, aot_comp_option_t option)
}
else {
/* Create LLVM target machine */
arch = option->target_arch;
abi = option->target_abi;
cpu = option->target_cpu;
features = option->cpu_features;
if (!option->target_arch || !strstr(option->target_arch, "-")) {
/* Retrieve the target triple based on user input */
triple = NULL;
arch = option->target_arch;
abi = option->target_abi;
cpu = option->target_cpu;
features = option->cpu_features;
}
else {
/* Form a target triple */
triple = option->target_arch;
arch = NULL;
abi = NULL;
cpu = NULL;
features = NULL;
}
opt_level = option->opt_level;
size_level = option->size_level;
@ -2986,6 +2999,7 @@ aot_create_comp_context(const AOTCompData *comp_data, aot_comp_option_t option)
aot_set_last_error(buf);
goto fail;
}
LOG_VERBOSE("triple: %s => normailized: %s", triple, triple_norm);
if (!cpu)
cpu = "";
}

View File

@ -118,7 +118,7 @@ os_dcache_flush()
up_textheap_data_sync();
#endif
#ifndef CONFIG_BUILD_KERNEL
up_invalidate_dcache_all();
up_flush_dcache_all();
#endif
}

View File

@ -17,7 +17,7 @@
/* clang-format off */
#define WAMR_VERSION_MAJOR 2
#define WAMR_VERSION_MINOR 2
#define WAMR_VERSION_MINOR 3
#define WAMR_VERSION_PATCH 0
/* clang-format on */

View File

@ -116,6 +116,9 @@ print_help()
printf(" Default is host arch, e.g. x86_64\n");
printf(" <sub> = for ex. on arm or thumb: v5, v6m, v7a, v7m, etc.\n");
printf(" Use --target=help to list supported targets\n");
printf(" Or, provide a triple in the format of <arch>-<vendor>-<os>-<abi>.\n");
printf(" By doing this, --target-abi, --cpu, and --cpu-features will be ignored.\n");
printf(" The triple will only be normalized without any further verification.\n");
printf(" --target-abi=<abi> Set the target ABI, e.g. gnu, eabi, gnueabihf, msvc, etc.\n");
printf(" Default is gnu if target isn't riscv64 or riscv32\n");
printf(" For target riscv64 and riscv32, default is lp64d and ilp32d\n");