4f11f38c38
Add compilation rules to support WebAssembly(WASM/WAMR): 1. Compile Toolchain 1> Download WASI sdk and export the WASI_SDK_PATH path: $ wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-19/wasi-sdk-19.0-linux.tar.gz $ tar xf wasi-sdk-19.0-linux.tar.gz Put wasi-sdk-19.0 to your host WASI_SDK_PATH environment variable, like: $ export WASI_SDK_PATH=`pwd`/wasi-sdk-19.0 2> Download Wamr "wamrc" AOT compiler and export to the PATH: $ mkdir wamrc $ wget https://github.com/bytecodealliance/wasm-micro-runtime/releases/download/WAMR-1.1.2/wamrc-1.1.2-x86_64-ubuntu-20.04.tar.gz $ tar xf wamrc-1.1.2-x86_64-ubuntu-20.04.tar.gz $ export PATH=$PATH:$PWD 2. Configuring and running 1> Configuring sim/wamr and compile: nuttx$ ./tools/configure.sh sim/wamr nuttx$ make ... Wamrc Generate AoT: /home/archer/code/nuttx/n5/apps/wasm/hello.aot Wamrc Generate AoT: /home/archer/code/nuttx/n5/apps/wasm/coremark.aot LD: nuttx 2> Copy the generated wasm file(Interpreter/AoT) nuttx$ cp ../apps/wasm/hello.aot . nuttx$ cp ../apps/wasm/hello.wasm . nuttx$ cp ../apps/wasm/coremark.wasm . 3> Run iwasm nuttx$ ./nuttx NuttShell (NSH) NuttX-10.4.0 nsh> iwasm /data/hello.wasm Hello, World!! nsh> iwasm /data/hello.aot Hello, World!! nsh> iwasm /data/coremark.wasm 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 12000 Total time (secs): 12.000000 Iterations/Sec : 5.000000 Iterations : 60 Compiler version : Clang 15.0.7 Compiler flags : Using NuttX compilation options Memory location : Defined by the NuttX configuration seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0xa14c Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 5.000000 / Clang 15.0.7 Using NuttX compilation options / Defined by the NuttX configuration Co-Authored-By: Huang Qi <huangqi3@xiaomi.com> Signed-off-by: chao an <anchao@xiaomi.com>
69 lines
2.2 KiB
Makefile
69 lines
2.2 KiB
Makefile
############################################################################
|
|
# apps/interpreters/Wasm.mk
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership. The
|
|
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance with the
|
|
# License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
############################################################################
|
|
|
|
ifeq ($(WASM_BUILD),y)
|
|
ifneq ($(CONFIG_INTERPRETERS_WAMR)$(CONFIG_INTERPRETERS_WAMR3),)
|
|
|
|
WASM_INITIAL_MEMORY ?= 65536
|
|
STACKSIZE ?= $(CONFIG_DEFAULT_TASK_STACKSIZE)
|
|
PRIORITY ?= SCHED_PRIORITY_DEFAULT
|
|
|
|
# Wamr mode:
|
|
# INT: Interpreter (Default)
|
|
# AOT: Ahead-of-Time
|
|
# XIP: Execution In Place
|
|
# JIT: Just In Time
|
|
|
|
WAMR_MODE ?= INT
|
|
|
|
# WebAssembly Micro Runtime Toolchain Setting
|
|
|
|
-include $(APPDIR)$(DELIM)interpreters$(DELIM)wamr$(DELIM)Toolchain.defs
|
|
|
|
# Targets follow
|
|
|
|
.PRECIOUS: $(WBIN)
|
|
|
|
WSRCS := $(MAINSRC) $(CSRCS)
|
|
WOBJS := $(WSRCS:%.c=%.wo)
|
|
|
|
all:: $(WBIN)
|
|
|
|
$(WOBJS): %.wo : %.c
|
|
$(Q) $(WCC) $(WCFLAGS) -c $^ -o $@
|
|
|
|
$(WBIN): $(WOBJS)
|
|
$(shell mkdir -p $(APPDIR)/wasm)
|
|
$(Q) $(WAR) $@ $(filter-out $(MAINSRC:%.c=%.wo),$^)
|
|
$(foreach main,$(MAINSRC), \
|
|
$(eval mainindex=$(strip $(call GETINDEX,$(main),$(MAINSRC)))) \
|
|
$(eval dstname=$(shell echo $(main:%.c=%.wo) | sed -e 's/\//_/g')) \
|
|
$(shell cp -rf $(strip $(main:%.c=%.wo)) \
|
|
$(strip $(APPDIR)/wasm/$(word $(mainindex),$(PROGNAME))#$(WASM_INITIAL_MEMORY)#$(STACKSIZE)#$(PRIORITY)#$(WAMR_MODE)#$(dstname)) \
|
|
) \
|
|
)
|
|
|
|
clean::
|
|
$(call DELFILE, $(WOBJS))
|
|
$(call DELFILE, $(WBIN))
|
|
|
|
endif # CONFIG_INTERPRETERS_WAMR || CONFIG_INTERPRETERS_WAMR3
|
|
endif # WASM_BUILD
|