nuttx-apps/Makefile

235 lines
7.0 KiB
Makefile
Raw Normal View History

############################################################################
# apps/Makefile
#
# 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.
#
############################################################################
export APPDIR = $(CURDIR)
include $(APPDIR)/Make.defs
include $(APPDIR)/tools/Wasm.mk
interpreters/wamr: add compile role of WebAssembly 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>
2023-03-02 04:46:37 +01:00
# The GNU make CURDIR will always be a POSIX-like path with forward slashes
# as path segment separators. This is fine for the above inclusions but
# will cause problems later for the native build. If we know that this is
# a native build, then we need to fix up the APPDIR path for subsequent
# use
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
export APPDIR = $(subst /,\,$(CURDIR))
endif
Squashed commit of the following: Merged in masayuki2009/nuttx.apps/loadable_app (pull request #148) loadable app support * apps: Introduce a build system for loadable apps for nsh. This PR consits of following changes. (NOTE: Changes to each application will be provided separately) apps/nshlib/Kconfig: Add 'option modules' to NSH_FILE_APPS so that a user can change an application configuration to tristate (y/n/m) apps/Make.defs: Override COMPILE and COMPILEXX macros to compile loadable apps. To make loadable apps, -DLOADABLE_APP is added to the flags. Also, introduce ELFLD to link a lodable app. Please note that the variable 'LOADABLE' must be defined in each application Makefile if you want to make a loadable app. apps/Application.mk: Add .build target in case of 'LOADABLE=y' which is used to link a final loadable application and install the app to apps/bin. apps/Makefile: Add SYMTABSRC and SYMTABOBJ variables for loadable apps which will be generated under the apps directory. Add make_symbols target which will be called when all applications are installed to generate symtab_app.c which is used for nsh to inform symbol information to the NuttX kernel. Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> * apps/examples/hello: Apply changes to support a lodable app. Kconfig: Change the application state from bool to tristate Make.defs: Change the condition to build. By default, the application is not selected (i.e. 'n'), so if other states (i.e. y/m) are selected, the application will be compiled. Makefile: If the application is specified to 'm', the variable 'LOADABLE' must be defined here. Also note that other variables (PRIORITY and STACKSIZE) can only be used for built-in apps. hello_main.c Add LOADABLE_APP condition to main(). Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> * apps/examples/helloxx: Apply changes to support a lodable app. Kconfig: Change the application state from bool to tristate Make.defs: Change the condition to build. By default, the application is not selected (i.e. 'n'), so if other states (i.e. y/m) are selected, the application will be compiled. Makefile: If the application is specified to 'm', the variable 'LOADABLE' must be defined here. Also note that other variables (PRIORITY and STACKSIZE) can only be used for built-in apps. helloxx_main.c Add LOADABLE_APP condition to main(). Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> Approved-by: GregoryN <gnutt@nuttx.org>
2018-08-03 20:05:01 +02:00
# Symbol table for loadable apps.
SYMTABSRC = symtab_apps.c
SYMTABOBJ = $(SYMTABSRC:.c=$(OBJEXT))
Squashed commit of the following: Merged in masayuki2009/nuttx.apps/loadable_app (pull request #148) loadable app support * apps: Introduce a build system for loadable apps for nsh. This PR consits of following changes. (NOTE: Changes to each application will be provided separately) apps/nshlib/Kconfig: Add 'option modules' to NSH_FILE_APPS so that a user can change an application configuration to tristate (y/n/m) apps/Make.defs: Override COMPILE and COMPILEXX macros to compile loadable apps. To make loadable apps, -DLOADABLE_APP is added to the flags. Also, introduce ELFLD to link a lodable app. Please note that the variable 'LOADABLE' must be defined in each application Makefile if you want to make a loadable app. apps/Application.mk: Add .build target in case of 'LOADABLE=y' which is used to link a final loadable application and install the app to apps/bin. apps/Makefile: Add SYMTABSRC and SYMTABOBJ variables for loadable apps which will be generated under the apps directory. Add make_symbols target which will be called when all applications are installed to generate symtab_app.c which is used for nsh to inform symbol information to the NuttX kernel. Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> * apps/examples/hello: Apply changes to support a lodable app. Kconfig: Change the application state from bool to tristate Make.defs: Change the condition to build. By default, the application is not selected (i.e. 'n'), so if other states (i.e. y/m) are selected, the application will be compiled. Makefile: If the application is specified to 'm', the variable 'LOADABLE' must be defined here. Also note that other variables (PRIORITY and STACKSIZE) can only be used for built-in apps. hello_main.c Add LOADABLE_APP condition to main(). Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> * apps/examples/helloxx: Apply changes to support a lodable app. Kconfig: Change the application state from bool to tristate Make.defs: Change the condition to build. By default, the application is not selected (i.e. 'n'), so if other states (i.e. y/m) are selected, the application will be compiled. Makefile: If the application is specified to 'm', the variable 'LOADABLE' must be defined here. Also note that other variables (PRIORITY and STACKSIZE) can only be used for built-in apps. helloxx_main.c Add LOADABLE_APP condition to main(). Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> Approved-by: GregoryN <gnutt@nuttx.org>
2018-08-03 20:05:01 +02:00
# Build targets
# We first remove libapps.a before letting the other rules add objects to it
# so that we ensure libapps.a does not contain objects from prior build
apps/build: Restore ARLOCK to improve compile speed in incremental case To solve the issue of carrying object files from previous builds, Matias changed the archiving process to re-archive libapps.a on every compilation, if libapps.a carries more object files, incremental compilation will waste too many time in re-archiving, compared with the previous implement, this is a degradation of the build system. Referring to mature engineering projects such as cmake, if there is configuration or source file changed, the best solution should be to reconfigure the environment. Revert this PR to ensure the compilation speed during incremental compilation. | commit 18137c0fec3cea30871f29238e11ea0f4e8523da | Author: Matias N <matias@protobits.dev> | Date: Sat Sep 12 00:36:23 2020 -0300 | | Fix: ensure archive files do not carry object files from prior builds | | This is the corresponding change to the one on main NuttX repo. In this | case this involves splitting the build of libapps.a into: a) building | all applications (which is safely parallelizable), b) adding each | application's object files to the archive in turns (serial by nature). | | This removes the need for the flock used to protect the parallel build. Testing: sim:nsh ------------------------------- | Patched | Current ------------------------------- |$ time make | $ time make |real 0m1.270s | real 0m1.728s |user 0m0.971s | user 0m1.276s |sys 0m0.363s | sys 0m0.530s ------------------------------- Private project (20+ 3rd library needs archive to libapps.a) ------------------------------- | Patched | Current ------------------------------- |$ time make | $ time make |real 0m21.181s | real 0m39.721s |user 0m14.638s | user 0m24.837s |sys 0m6.919s | sys 0m14.394s ------------------------------- Signed-off-by: chao an <anchao@xiaomi.com>
2023-09-11 05:54:19 +02:00
all: $(BIN)
.PHONY: import install dirlinks export .depdirs preconfig depend clean distclean
.PHONY: context clean_context context_all register register_all
.PRECIOUS: $(BIN)
$(foreach SDIR, $(CONFIGURED_APPS), $(eval $(call SDIR_template,$(SDIR),all)))
$(foreach SDIR, $(CONFIGURED_APPS), $(eval $(call SDIR_template,$(SDIR),install)))
$(foreach SDIR, $(CONFIGURED_APPS), $(eval $(call SDIR_template,$(SDIR),context)))
$(foreach SDIR, $(CONFIGURED_APPS), $(eval $(call SDIR_template,$(SDIR),register)))
$(foreach SDIR, $(CONFIGURED_APPS), $(eval $(call SDIR_template,$(SDIR),depend)))
$(foreach SDIR, $(CLEANDIRS), $(eval $(call SDIR_template,$(SDIR),clean)))
$(foreach SDIR, $(CLEANDIRS), $(eval $(call SDIR_template,$(SDIR),distclean)))
$(MKDEP): $(TOPDIR)/tools/mkdeps.c
$(HOSTCC) $(HOSTINCLUDES) $(HOSTCFLAGS) $< -o $@
$(INCDIR): $(TOPDIR)/tools/incdir.c
$(HOSTCC) $(HOSTINCLUDES) $(HOSTCFLAGS) $< -o $@
IMPORT_TOOLS = $(MKDEP) $(INCDIR)
ifeq ($(CONFIG_TOOLS_WASM_BUILD),y)
configure_wasm:
$(Q) cmake -B$(APPDIR)$(DELIM)tools$(DELIM)Wasm$(DELIM)build \
$(APPDIR)$(DELIM)tools$(DELIM)Wasm \
-DAPPDIR=$(APPDIR) -DTOPDIR=$(TOPDIR) \
-DWASI_SDK_PATH=$(WASI_SDK_PATH) \
-DKCONFIG_FILE_PATH=$(TOPDIR)$(DELIM).config
context_wasm: configure_wasm
$(Q) cmake --build $(APPDIR)$(DELIM)tools$(DELIM)Wasm$(DELIM)build
else
context_wasm:
endif
# In the KERNEL build, we must build and install all of the modules. No
# symbol table is needed
ifeq ($(CONFIG_BUILD_KERNEL),y)
install: $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_install)
$(BIN): $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_all)
.import: $(BIN)
$(Q) install libapps.a $(APPDIR)$(DELIM)import$(DELIM)libs
$(Q) $(MAKE) install
import: $(IMPORT_TOOLS)
$(Q) $(MAKE) context TOPDIR="$(APPDIR)$(DELIM)import"
$(Q) $(MAKE) register TOPDIR="$(APPDIR)$(DELIM)import"
$(Q) $(MAKE) depend TOPDIR="$(APPDIR)$(DELIM)import"
$(Q) $(MAKE) .import TOPDIR="$(APPDIR)$(DELIM)import"
else
# In FLAT and protected modes, the modules have already been created. A
# symbol table is required.
ifeq ($(CONFIG_MODULES),)
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
$(BIN): $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_all)
else
$(BIN): $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_all)
$(call LINK_WASM)
endif
else
$(SYMTABSRC): $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_all)
$(Q) $(MAKE) install
$(Q) $(APPDIR)$(DELIM)tools$(DELIM)mksymtab.sh $(BINDIR) >$@.tmp
$(Q) $(call TESTANDREPLACEFILE, $@.tmp, $@)
ifneq ($(CONFIG_ARM_TOOLCHAIN_GHS),y)
$(SYMTABOBJ): %$(OBJEXT): %.c
$(call COMPILE, $<, $@, -fno-lto -fno-builtin)
else
$(SYMTABOBJ): %$(OBJEXT): %.c
$(call COMPILE, $<, $@, -Onolink)
endif
$(BIN): $(SYMTABOBJ)
apps/build: Restore ARLOCK to improve compile speed in incremental case To solve the issue of carrying object files from previous builds, Matias changed the archiving process to re-archive libapps.a on every compilation, if libapps.a carries more object files, incremental compilation will waste too many time in re-archiving, compared with the previous implement, this is a degradation of the build system. Referring to mature engineering projects such as cmake, if there is configuration or source file changed, the best solution should be to reconfigure the environment. Revert this PR to ensure the compilation speed during incremental compilation. | commit 18137c0fec3cea30871f29238e11ea0f4e8523da | Author: Matias N <matias@protobits.dev> | Date: Sat Sep 12 00:36:23 2020 -0300 | | Fix: ensure archive files do not carry object files from prior builds | | This is the corresponding change to the one on main NuttX repo. In this | case this involves splitting the build of libapps.a into: a) building | all applications (which is safely parallelizable), b) adding each | application's object files to the archive in turns (serial by nature). | | This removes the need for the flock used to protect the parallel build. Testing: sim:nsh ------------------------------- | Patched | Current ------------------------------- |$ time make | $ time make |real 0m1.270s | real 0m1.728s |user 0m0.971s | user 0m1.276s |sys 0m0.363s | sys 0m0.530s ------------------------------- Private project (20+ 3rd library needs archive to libapps.a) ------------------------------- | Patched | Current ------------------------------- |$ time make | $ time make |real 0m21.181s | real 0m39.721s |user 0m14.638s | user 0m24.837s |sys 0m6.919s | sys 0m14.394s ------------------------------- Signed-off-by: chao an <anchao@xiaomi.com>
2023-09-11 05:54:19 +02:00
$(call ARLOCK, $(call CONVERT_PATH,$(BIN)), $^)
$(call LINK_WASM)
endif # !CONFIG_MODULES
install: $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_install)
# Link nuttx
HEAD_OBJ += $(wildcard $(APPDIR)$(DELIM)import$(DELIM)startup$(DELIM)*$(OBJEXT))
HEAD_OBJ += $(wildcard $(APPDIR)$(DELIM)builtin$(DELIM)*$(OBJEXT))
.import: $(BIN) install
$(Q) echo "LD: nuttx"
$(Q) $(LD) --entry=__start $(LDFLAGS) $(LDLIBPATH) $(EXTRA_LIBPATHS) \
-L$(APPDIR)$(DELIM)import$(DELIM)scripts -T$(LDNAME) \
-o nuttx$(EXEEXT) $(HEAD_OBJ) $(EXTRA_OBJS) $(LDSTARTGROUP) \
$(BIN) $(LDLIBS) $(EXTRA_LIBS) $(LDENDGROUP)
ifeq ($(CONFIG_INTELHEX_BINARY),y)
$(Q) echo "CP: nuttx.hex"
$(Q) $(OBJCOPY) $(OBJCOPYARGS) -O ihex nuttx$(EXEEXT) nuttx.hex
endif
ifeq ($(CONFIG_RAW_BINARY),y)
$(Q) echo "CP: nuttx.bin"
$(Q) $(OBJCOPY) $(OBJCOPYARGS) -O binary nuttx$(EXEEXT) nuttx.bin
endif
$(call POSTBUILD, $(APPDIR))
2014-09-05 15:38:25 +02:00
import: $(IMPORT_TOOLS)
$(Q) $(MAKE) context TOPDIR="$(APPDIR)$(DELIM)import"
$(Q) $(MAKE) register TOPDIR="$(APPDIR)$(DELIM)import"
$(Q) $(MAKE) depend TOPDIR="$(APPDIR)$(DELIM)import"
$(Q) $(MAKE) .import TOPDIR="$(APPDIR)$(DELIM)import"
endif # CONFIG_BUILD_KERNEL
dirlinks:
$(Q) $(MAKE) -C platform dirlinks
context_all: $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_context)
register_all: $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_register)
staging:
$(Q) mkdir -p $@
context: | staging
$(Q) $(MAKE) context_all
$(Q) $(MAKE) register_all
$(Q) $(MAKE) context_wasm
2016-06-08 16:56:20 +02:00
Kconfig:
$(foreach SDIR, $(CONFIGDIRS), $(call MAKE_template,$(SDIR),preconfig))
$(Q) $(MKKCONFIG)
2016-06-07 16:43:21 +02:00
preconfig: Kconfig
export:
ifneq ($(EXPORTDIR),)
$(Q) mkdir -p "${EXPORTDIR}"$(DELIM)registry || exit 1;
ifneq ($(CONFIG_BUILD_KERNEL),y)
ifneq ($(BUILTIN_REGISTRY),)
for f in "${BUILTIN_REGISTRY}"$(DELIM)*.bdat "${BUILTIN_REGISTRY}"$(DELIM)*.pdat ; do \
if [ -f "$${f}" ]; then \
cp -f "$${f}" "${EXPORTDIR}"$(DELIM)registry ; \
fi \
done
endif
endif
endif
.depdirs: $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_depend)
.depend: Makefile .depdirs
$(Q) touch $@
depend: .depend
clean_context:
$(Q) $(MAKE) -C platform clean_context
$(Q) $(MAKE) -C builtin clean_context
clean: $(foreach SDIR, $(CLEANDIRS), $(SDIR)_clean)
Squashed commit of the following: Merged in masayuki2009/nuttx.apps/loadable_app (pull request #148) loadable app support * apps: Introduce a build system for loadable apps for nsh. This PR consits of following changes. (NOTE: Changes to each application will be provided separately) apps/nshlib/Kconfig: Add 'option modules' to NSH_FILE_APPS so that a user can change an application configuration to tristate (y/n/m) apps/Make.defs: Override COMPILE and COMPILEXX macros to compile loadable apps. To make loadable apps, -DLOADABLE_APP is added to the flags. Also, introduce ELFLD to link a lodable app. Please note that the variable 'LOADABLE' must be defined in each application Makefile if you want to make a loadable app. apps/Application.mk: Add .build target in case of 'LOADABLE=y' which is used to link a final loadable application and install the app to apps/bin. apps/Makefile: Add SYMTABSRC and SYMTABOBJ variables for loadable apps which will be generated under the apps directory. Add make_symbols target which will be called when all applications are installed to generate symtab_app.c which is used for nsh to inform symbol information to the NuttX kernel. Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> * apps/examples/hello: Apply changes to support a lodable app. Kconfig: Change the application state from bool to tristate Make.defs: Change the condition to build. By default, the application is not selected (i.e. 'n'), so if other states (i.e. y/m) are selected, the application will be compiled. Makefile: If the application is specified to 'm', the variable 'LOADABLE' must be defined here. Also note that other variables (PRIORITY and STACKSIZE) can only be used for built-in apps. hello_main.c Add LOADABLE_APP condition to main(). Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> * apps/examples/helloxx: Apply changes to support a lodable app. Kconfig: Change the application state from bool to tristate Make.defs: Change the condition to build. By default, the application is not selected (i.e. 'n'), so if other states (i.e. y/m) are selected, the application will be compiled. Makefile: If the application is specified to 'm', the variable 'LOADABLE' must be defined here. Also note that other variables (PRIORITY and STACKSIZE) can only be used for built-in apps. helloxx_main.c Add LOADABLE_APP condition to main(). Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> Approved-by: GregoryN <gnutt@nuttx.org>
2018-08-03 20:05:01 +02:00
$(call DELFILE, $(SYMTABSRC))
$(call DELFILE, $(SYMTABOBJ))
$(call DELFILE, $(BIN))
$(call DELFILE, Kconfig)
$(call DELDIR, $(BINDIR))
$(call CLEAN)
distclean: $(foreach SDIR, $(CLEANDIRS), $(SDIR)_distclean)
apps/build: Restore ARLOCK to improve compile speed in incremental case To solve the issue of carrying object files from previous builds, Matias changed the archiving process to re-archive libapps.a on every compilation, if libapps.a carries more object files, incremental compilation will waste too many time in re-archiving, compared with the previous implement, this is a degradation of the build system. Referring to mature engineering projects such as cmake, if there is configuration or source file changed, the best solution should be to reconfigure the environment. Revert this PR to ensure the compilation speed during incremental compilation. | commit 18137c0fec3cea30871f29238e11ea0f4e8523da | Author: Matias N <matias@protobits.dev> | Date: Sat Sep 12 00:36:23 2020 -0300 | | Fix: ensure archive files do not carry object files from prior builds | | This is the corresponding change to the one on main NuttX repo. In this | case this involves splitting the build of libapps.a into: a) building | all applications (which is safely parallelizable), b) adding each | application's object files to the archive in turns (serial by nature). | | This removes the need for the flock used to protect the parallel build. Testing: sim:nsh ------------------------------- | Patched | Current ------------------------------- |$ time make | $ time make |real 0m1.270s | real 0m1.728s |user 0m0.971s | user 0m1.276s |sys 0m0.363s | sys 0m0.530s ------------------------------- Private project (20+ 3rd library needs archive to libapps.a) ------------------------------- | Patched | Current ------------------------------- |$ time make | $ time make |real 0m21.181s | real 0m39.721s |user 0m14.638s | user 0m24.837s |sys 0m6.919s | sys 0m14.394s ------------------------------- Signed-off-by: chao an <anchao@xiaomi.com>
2023-09-11 05:54:19 +02:00
$(call DELFILE, *.lock)
$(call DELFILE, .depend)
Squashed commit of the following: Merged in masayuki2009/nuttx.apps/loadable_app (pull request #148) loadable app support * apps: Introduce a build system for loadable apps for nsh. This PR consits of following changes. (NOTE: Changes to each application will be provided separately) apps/nshlib/Kconfig: Add 'option modules' to NSH_FILE_APPS so that a user can change an application configuration to tristate (y/n/m) apps/Make.defs: Override COMPILE and COMPILEXX macros to compile loadable apps. To make loadable apps, -DLOADABLE_APP is added to the flags. Also, introduce ELFLD to link a lodable app. Please note that the variable 'LOADABLE' must be defined in each application Makefile if you want to make a loadable app. apps/Application.mk: Add .build target in case of 'LOADABLE=y' which is used to link a final loadable application and install the app to apps/bin. apps/Makefile: Add SYMTABSRC and SYMTABOBJ variables for loadable apps which will be generated under the apps directory. Add make_symbols target which will be called when all applications are installed to generate symtab_app.c which is used for nsh to inform symbol information to the NuttX kernel. Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> * apps/examples/hello: Apply changes to support a lodable app. Kconfig: Change the application state from bool to tristate Make.defs: Change the condition to build. By default, the application is not selected (i.e. 'n'), so if other states (i.e. y/m) are selected, the application will be compiled. Makefile: If the application is specified to 'm', the variable 'LOADABLE' must be defined here. Also note that other variables (PRIORITY and STACKSIZE) can only be used for built-in apps. hello_main.c Add LOADABLE_APP condition to main(). Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> * apps/examples/helloxx: Apply changes to support a lodable app. Kconfig: Change the application state from bool to tristate Make.defs: Change the condition to build. By default, the application is not selected (i.e. 'n'), so if other states (i.e. y/m) are selected, the application will be compiled. Makefile: If the application is specified to 'm', the variable 'LOADABLE' must be defined here. Also note that other variables (PRIORITY and STACKSIZE) can only be used for built-in apps. helloxx_main.c Add LOADABLE_APP condition to main(). Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com> Approved-by: GregoryN <gnutt@nuttx.org>
2018-08-03 20:05:01 +02:00
$(call DELFILE, $(SYMTABSRC))
$(call DELFILE, $(SYMTABOBJ))
$(call DELFILE, $(BIN))
$(call DELFILE, Kconfig)
$(call DELDIR, $(BINDIR))
$(call DELDIR, staging)
interpreters/wamr: add compile role of WebAssembly 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>
2023-03-02 04:46:37 +01:00
$(call DELDIR, wasm)
$(call DELDIR, $(APPDIR)$(DELIM)tools$(DELIM)Wasm$(DELIM)build)
$(call CLEAN)