Enhance wasm loading with LoadArgs and support module names (#3265)
- Add new API wasm_runtime_load_ex() in wasm_export.h and wasm_module_new_ex in wasm_c_api.h - Put aot_create_perf_map() into a separated file aot_perf_map.c - In perf.map, function names include user specified module name - Enhance the script to help flamegraph generations
This commit is contained in:
42
samples/linux-perf/wasm/CMakeLists.txt
Normal file
42
samples/linux-perf/wasm/CMakeLists.txt
Normal file
@ -0,0 +1,42 @@
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
cmake_minimum_required (VERSION 3.14)
|
||||
|
||||
project(linux_perf_sample_wasm)
|
||||
|
||||
include(CMakePrintHelpers)
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../cmake)
|
||||
find_package(WAMRC REQUIRED)
|
||||
|
||||
################ wasm ################
|
||||
add_executable(fib_wasm fib.c)
|
||||
set_target_properties(fib_wasm PROPERTIES SUFFIX .wasm)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/fib_wasm.wasm DESTINATION . RENAME fib1.wasm)
|
||||
|
||||
add_executable(ackermann_wasm ackermann.c)
|
||||
set_target_properties(ackermann_wasm PROPERTIES SUFFIX .wasm)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ackermann_wasm.wasm DESTINATION . RENAME ackermann1.wasm)
|
||||
|
||||
|
||||
################ aot ################
|
||||
add_custom_target(fib_aot
|
||||
ALL
|
||||
COMMAND ${WAMRC_BIN} --enable-linux-perf -o fib2.aot fib_wasm.wasm
|
||||
DEPENDS fib_wasm
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/fib2.aot DESTINATION .)
|
||||
|
||||
add_custom_target(ackermann_aot
|
||||
ALL
|
||||
COMMAND ${WAMRC_BIN} --enable-linux-perf -o ackermann2.aot ackermann_wasm.wasm
|
||||
DEPENDS ackermann_wasm
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ackermann2.aot DESTINATION .)
|
||||
38
samples/linux-perf/wasm/ackermann.c
Normal file
38
samples/linux-perf/wasm/ackermann.c
Normal file
@ -0,0 +1,38 @@
|
||||
#include <stdio.h>
|
||||
|
||||
// Ackermann function
|
||||
unsigned long
|
||||
ackermann(unsigned long m, unsigned long n)
|
||||
{
|
||||
if (m == 0) {
|
||||
return n + 1;
|
||||
}
|
||||
else if (n == 0) {
|
||||
return ackermann(m - 1, 1);
|
||||
}
|
||||
else {
|
||||
return ackermann(m - 1, ackermann(m, n - 1));
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((export_name("run"))) int
|
||||
run(int m, int n)
|
||||
{
|
||||
int result = ackermann(m, n);
|
||||
printf("ackermann(%d, %d)=%d\n", m, n, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
unsigned long m, n, result;
|
||||
|
||||
// Example usage:
|
||||
m = 3;
|
||||
n = 2;
|
||||
result = ackermann(m, n);
|
||||
printf("Ackermann(%lu, %lu) = %lu\n", m, n, result);
|
||||
|
||||
return 0;
|
||||
}
|
||||
32
samples/linux-perf/wasm/fib.c
Normal file
32
samples/linux-perf/wasm/fib.c
Normal file
@ -0,0 +1,32 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int
|
||||
fibonacci(int n)
|
||||
{
|
||||
if (n <= 0)
|
||||
return 0;
|
||||
|
||||
if (n == 1)
|
||||
return 1;
|
||||
|
||||
return fibonacci(n - 1) + fibonacci(n - 2);
|
||||
}
|
||||
|
||||
__attribute__((export_name("run"))) int
|
||||
run(int n)
|
||||
{
|
||||
int result = fibonacci(n);
|
||||
printf("fibonacci(%d)=%d\n", n, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int n = atoi(argv[1]);
|
||||
|
||||
printf("fibonacci(%d)=%d\n", n, fibonacci(n));
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user