61466


元はCで書かれた、Static Library (.a)とヘッダーファイルがあり、  
これをSpresense SDKで使いたいです  
どうすれば良いでしょうか？

■(例) Static Library (.a)とヘッダーファイル  
header_file1.h  
header_file2.h  
:  
header_file5.h  
myStatic_lib.a ※ Cortex-M4 hard_float

Spresense SDKに追加する場所は、  
hellow_worldサンプル内に追加、  
Nuttx側のどこか  
または、その他  
かと思っております

Makefileを編集する力があればできるのかも。。

hello  
┝ .built  
┝ .depend  
┝ hello_main.c  
┝ hello_main.o  
┝ make.deps  
┝ make.dep  
┗ Makefile

■make.depファイル  
hello_main.o: hello_main.c \  
/Users/ _username_ /spresense/sdk/bsp/include/sdk/config.h \  
：  
/Users/ _username_ /spresense/nuttx/include/nuttx/addrenv.h  
インクルードファイルはこのあたりに追加？

■Makefile  
-include $(TOPDIR)/Make.defs  
-include $(SDKDIR)/Make.defs

CONFIG_HELLO_PRIORITY ?= SCHED_PRIORITY_DEFAULT  
CONFIG_HELLO_STACKSIZE ?= 2048

APPNAME = hello  
PRIORITY = $(CONFIG_HELLO_PRIORITY)  
STACKSIZE = $(CONFIG_HELLO_STACKSIZE)

MAINSRC = hello_main.c  
ASRCS =  
CSRCS = $(filter-out $(MAINSRC),$(wildcard *.c) $(wildcard _/_.c))  
CXXSRCS = $(wildcard *.cpp) $(wildcard _/_.cpp) $(wildcard *.cxx) $(wildcard
_/_.cxx)

CFLAGS += $(foreach inc,$(wildcard ../ _/include),-I$(inc))  
CXXFLAGS += $(foreach inc,$(wildcard ../_/include),-I$(inc))

CONFIG_HELLO_PROGNAME ?= hello$(EXEEXT)  
PROGNAME = $(CONFIG_HELLO_PROGNAME)

include $(APPDIR)/Application.mk

自分にはちょっとハードルが高そう。。


CC BY-SA 4.0
2019-12-02T13:56:32.810
61027
2020-01-05T08:18:53.207
34647
question
spresense makefile
Spresense SDKに、Static Library (.a)を追加する方法は


コンパイル済みのライブラリを取り込むときは `externals` に入れるのが良いと思います。

`externals` フォルダ以下に `xxx`
というディレクトリを新規作成して、そこにライブラリ(`libxxx.a`)とヘッダファイル(`xxx.h`)を置きます。`xxx`
は適当に読み替えてください。

> spresense/externals/xxx  
>  |-- Kconfig  
>  |-- LibIncludes.mk  
>  |-- LibTarget.mk  
>  |-- libxxx.a  
>  `-- xxx.h

Kconfig, LibIncludes.mk, LibTarget.mk ファイルを用意して、それぞれ以下のように書きます。

■ Kconfig

[code]

    config EXTERNALS_XXX
        bool "XXX Library"
        default n
    
[/code]

■ LibIncludes.mk

[code]

    ifeq ($(CONFIG_EXTERNALS_XXX),y)
    CFLAGS   += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" "$(SDKDIR)/../externals/xxx"}
    CXXFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" "$(SDKDIR)/../externals/xxx"}
    endif
    
[/code]

■ LibTarget.mk

[code]

    ifeq ($(CONFIG_EXTERNALS_XXX),y)
    EXTLIBS += lib$(DELIM)libxxx$(LIBEXT)
    XXXDIRS += $(EXTERNAL_DIR)$(DELIM)xxx
    endif
    
    lib$(DELIM)libxxx$(LIBEXT): $(XXXDIRS)$(DELIM)libxxx$(LIBEXT)
        $(Q) install $< $@
    
[/code]

SDK Configuration で Externals -> XXX Library を選択して CONFIG_EXTERNALS_XXX
を有効にしておきます。そうすれば、例えば、hello_main.c へ `#include <xxx.h>` を追加して libxxx.a
の関数を呼び出すことが可能になります。

これら `externals/mqtt` を参考にしてみました。


CC BY-SA 4.0
2019-12-16T01:32:38.653
61466
2019-12-16T01:59:21.273
2019-12-16T01:59:21.273
31378
31378
61027
answer


externalsフォルダの活用、とても参考になりました！  
externals **直下** のKconfigの編集が必要でしたので追記しておきます

> spresense/externals  
>  |-- Kconfig

■ Kconfig  
下記、sourceの行を追加する。(xxxは読み替え必要)

[code]

    menu "Externals"
     : (省略)
    source "/home/*username*/spresense/externals/xxx/Kconfig"
    endmenu # Externals
    
[/code]

これで、SDK Configuration で Externals -> XXX Library がGUIで見える様になりました


CC BY-SA 4.0
2020-01-05T08:18:53.207
61980
2020-01-05T08:18:53.207
34647
61027
answer