nuttx-apps/Makefile

219 lines
6.7 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
all:
$(RM) $(BIN)
$(MAKE) $(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)
# 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)
$(Q) for app in ${CONFIGURED_APPS}; do \
$(MAKE) -C "$${app}" archive ; \
done
.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_BUILD_LOADABLE),)
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
$(BIN): $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_all)
$(Q) for %%G in ($(CONFIGURED_APPS)) do ( $(MAKE) -C %%G archive )
else
$(BIN): $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_all)
$(Q) for app in ${CONFIGURED_APPS}; do \
$(MAKE) -C "$${app}" archive ; \
done
$(call LINK_WASM)
endif
else
$(SYMTABSRC): $(foreach SDIR, $(CONFIGURED_APPS), $(SDIR)_all)
$(Q) for app in ${CONFIGURED_APPS}; do \
$(MAKE) -C "$${app}" archive ; \
done
$(Q) $(MAKE) install
$(Q) $(APPDIR)$(DELIM)tools$(DELIM)mksymtab.sh $(BINDIR) >$@.tmp
$(Q) $(call TESTANDREPLACEFILE, $@.tmp, $@)
$(SYMTABOBJ): %$(OBJEXT): %.c
$(call COMPILE, $<, $@, -fno-lto -fno-builtin)
$(BIN): $(SYMTABOBJ)
$(call ARCHIVE_ADD, $(call CONVERT_PATH,$(BIN)), $^)
$(call LINK_WASM)
endif # !CONFIG_BUILD_LOADABLE
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
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)
$(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))
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 CLEAN)