samples/static_lib: Linking with a static library
This sample shows how to integrate a static libray into a Zephyr application. A hello_world application and a small library are included. Origin: Original Jira: ZEP-366 Change-Id: Idab38402b47042c3f9369b3a8e433d07d5fa4535 Signed-off-by: Flavio Santes <flavio.santes@intel.com>
This commit is contained in:
parent
c8d9b6b5e3
commit
b2383406cc
10 changed files with 225 additions and 0 deletions
38
samples/static_lib/Makefile
Normal file
38
samples/static_lib/Makefile
Normal file
|
@ -0,0 +1,38 @@
|
|||
#
|
||||
# Copyright (c) 2016 Intel Corporation
|
||||
#
|
||||
# Licensed 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.
|
||||
#
|
||||
|
||||
MYLIB = mylib/lib/libmylib.a
|
||||
|
||||
all:
|
||||
make clean
|
||||
make mylib
|
||||
make hello_world
|
||||
|
||||
hello_world: $(MYLIB)
|
||||
make -C hello_world
|
||||
|
||||
$(MYLIB):
|
||||
make -C mylib
|
||||
|
||||
run:
|
||||
make -C hello_world qemu
|
||||
|
||||
pristine:
|
||||
make -C mylib clean
|
||||
make -C hello_world pristine
|
||||
|
||||
clean:
|
||||
make pristine
|
30
samples/static_lib/README
Normal file
30
samples/static_lib/README
Normal file
|
@ -0,0 +1,30 @@
|
|||
Linking with a static library
|
||||
#############################
|
||||
|
||||
This sample shows how to link a static library to a Zephyr application.
|
||||
A sample library is also included.
|
||||
|
||||
Read mylib/Makefile to discover how to use the Zephyr's toolchain
|
||||
to build a static library.
|
||||
|
||||
If the library's source code is available, perhaps it could be more
|
||||
easier to integrate that source code to your application than creating
|
||||
the static library.
|
||||
|
||||
|
||||
Build instructions
|
||||
==================
|
||||
|
||||
1. It is assumed that ZEPHYR_GCC_VARIANT and ZEPHYR_SDK_INSTALL_DIR
|
||||
variables are already set. See:
|
||||
|
||||
https://www.zephyrproject.org/doc/getting_started/getting_started.html
|
||||
|
||||
2. source $ZEPHYR/zephyr-env.sh
|
||||
|
||||
Where $ZEPHYR points to the directory that contains the zephyr
|
||||
repository.
|
||||
|
||||
3. make
|
||||
|
||||
4. make run
|
3
samples/static_lib/hello_world/Kbuild
Normal file
3
samples/static_lib/hello_world/Kbuild
Normal file
|
@ -0,0 +1,3 @@
|
|||
subdir-ccflags-y += -I$(SOURCE_DIR)/../mylib/include
|
||||
|
||||
obj-y += src/
|
25
samples/static_lib/hello_world/Makefile
Normal file
25
samples/static_lib/hello_world/Makefile
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Copyright (c) 2016 Intel Corporation
|
||||
#
|
||||
# Licensed 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.
|
||||
#
|
||||
|
||||
KERNEL_TYPE = nano
|
||||
BOARD = qemu_x86
|
||||
CONF_FILE = prj.conf
|
||||
|
||||
export SOURCE_DIR = $(ZEPHYR_BASE)/samples/static_lib/hello_world
|
||||
export LDFLAGS_zephyr += -L$(CURDIR)/../mylib/lib
|
||||
export ALL_LIBS += mylib
|
||||
|
||||
include ${ZEPHYR_BASE}/Makefile.inc
|
1
samples/static_lib/hello_world/prj.conf
Normal file
1
samples/static_lib/hello_world/prj.conf
Normal file
|
@ -0,0 +1 @@
|
|||
CONFIG_STDOUT_CONSOLE=y
|
17
samples/static_lib/hello_world/src/Makefile
Normal file
17
samples/static_lib/hello_world/src/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
#
|
||||
# Copyright (c) 2016 Intel Corporation
|
||||
#
|
||||
# Licensed 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.
|
||||
#
|
||||
|
||||
obj-y += main.o
|
29
samples/static_lib/hello_world/src/main.c
Normal file
29
samples/static_lib/hello_world/src/main.c
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* hello world example: calling functions from a static library */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2016 Intel Corporation
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
#include <zephyr.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <mylib.h>
|
||||
|
||||
void main(void)
|
||||
{
|
||||
printf("Hello World!\n");
|
||||
mylib_hello_world();
|
||||
}
|
||||
|
36
samples/static_lib/mylib/Makefile
Normal file
36
samples/static_lib/mylib/Makefile
Normal file
|
@ -0,0 +1,36 @@
|
|||
#
|
||||
# Copyright (c) 2016 Intel Corporation
|
||||
#
|
||||
# Licensed 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.
|
||||
#
|
||||
|
||||
include $(ZEPHYR_BASE)/scripts/Makefile.toolchain.$(ZEPHYR_GCC_VARIANT)
|
||||
|
||||
# This Makefile is like a replacement of the $(ZEPHYR_BASE)/Makefile
|
||||
# for libraries. So, we need to define ARCH here.
|
||||
ARCH ?= x86
|
||||
|
||||
CROSS_COMPILE = $(CROSS_COMPILE_$(ARCH))
|
||||
TOOLCHAIN_CFLAGS = $(TOOLCHAIN_CFLAGS_$(ARCH))
|
||||
|
||||
CC = $(CROSS_COMPILE)gcc
|
||||
AR = $(CROSS_COMPILE)ar
|
||||
|
||||
all:
|
||||
mkdir -p obj lib
|
||||
$(CC) -c $(TOOLCHAIN_CFLAGS) -Iinclude src/mylib.c -o obj/mylib.o
|
||||
$(AR) -rcs lib/libmylib.a obj/mylib.o
|
||||
|
||||
clean:
|
||||
rm -rf obj lib
|
||||
|
22
samples/static_lib/mylib/include/mylib.h
Normal file
22
samples/static_lib/mylib/include/mylib.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Copyright (c) 2016 Intel Corporation
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
#ifndef _MYLIB_H_
|
||||
#define _MYLIB_H_
|
||||
|
||||
int mylib_hello_world(void);
|
||||
|
||||
#endif
|
24
samples/static_lib/mylib/src/mylib.c
Normal file
24
samples/static_lib/mylib/src/mylib.c
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (c) 2016 Intel Corporation
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
#include "mylib.h"
|
||||
#include <stdio.h>
|
||||
|
||||
int mylib_hello_world(void)
|
||||
{
|
||||
printf("mylib says: Hello World!");
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue