Kbuild: Build minimal libc as a static library.

This commit changes the way libc is built.
Instead of building a hierarchy of objects linked into the
microkernel, libc minimal is built as a static library and
linked against the microkernel binary.
The location of the libc is configurable with the variable
KLIBC_DIR. This gives the flexibility to build against a
different libc other than minimal.

Change-Id: I9c0b6a684a9f3b407861aa387727c45eceb269c4
Signed-off-by: Juan Manuel Cruz <juan.m.cruz.alcaraz@linux.intel.com>
This commit is contained in:
Juan Manuel Cruz 2015-05-11 19:19:37 -05:00 committed by Anas Nashif
parent 5fbb5f6420
commit de1cec29d6
8 changed files with 10 additions and 75 deletions

View file

@ -7,7 +7,7 @@ PATCHLEVEL = 0
SUBLEVEL = 0 SUBLEVEL = 0
NAME = Tiny Mountain NAME = Tiny Mountain
export SOURCE_DIR PROJECT VPFILE export SOURCE_DIR PROJECT VPFILE KLIBC_DIR
# *DOCUMENTATION* # *DOCUMENTATION*
# To see a list of typical targets execute "make help" # To see a list of typical targets execute "make help"
@ -575,8 +575,10 @@ scripts: scripts_basic include/config/auto.conf include/config/tristate.conf \
$(Q)$(MAKE) $(build)=$(@) $(Q)$(MAKE) $(build)=$(@)
# Objects we will link into tinymountain / subdirs we need to visit # Objects we will link into tinymountain / subdirs we need to visit
core-y := arch/ kernel/ misc/ lib/ net/ KLIBC_DIR := lib/libc/minimal
core-y := arch/ kernel/ misc/ net/
bsp-y := drivers/ bsp-y := drivers/
libs-y := $(KLIBC_DIR)/
ifneq ($(strip $(PROJECT)),) ifneq ($(strip $(PROJECT)),)
core-y += $(SOURCE_DIR) core-y += $(SOURCE_DIR)

View file

@ -1 +0,0 @@
obj-y = libc/

View file

@ -1,5 +0,0 @@
#FIXME This Makefile is skipping one level of recursivity
# to avoid modifyng the file source/Makefile that
# is needed by the current build system.
obj-y = minimal/source/

View file

@ -1,60 +1,5 @@
# Makefile - Makefile to build minimal stdlib lib-y := source/stdout/fprintf.o
lib-y += source/stdout/prf.o
# lib-y += source/stdout/sprintf.o
# Copyright (c) 2014 Wind River Systems, Inc. lib-y += source/stdout/stdout_console.o
# lib-y += source/string/string.o
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3) Neither the name of Wind River Systems nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
include $(subst \,/,${VXMICRO_BASE})/make/env/defs.base
LIB_NAME = minimal
STDLIB = ${LIB_NAME}
vSTDLIB_HDR_PATH = ${vBASE}/lib/libc/${STDLIB}/include
${LIB_NAME}_INCLUDE_DIR = ${vSTDLIB_HDR_PATH}
${LIB_NAME}_KERNEL = string stdout
${LIB_NAME}_SRC = $(foreach lib,${${LIB_NAME}_${STDLIB_TYPE}},$(wildcard source/${lib}/*.c))
${LIB_NAME}_CFLAGS += ${iSECTION_GC_CFLAGS}
.PHONY: aliases
.DEFAULT_GOAL = aliases
include ${vMAKE}/target/make.library
ALIAS_DIR ?= ${vOUT_DIR}
aliases: ${ALIAS_DIR}/libc.a ${ALIAS_DIR}/libm.a
${ALIAS_DIR}/libm.a: ${ALIAS_DIR}/libc.a
$q${HOS_CopyFile} $< $@
${ALIAS_DIR}/libc.a: ${vOUT_DIR}/lib${LIB_NAME}.a
$q${HOS_CopyFile} $< $@

View file

@ -1,2 +0,0 @@
obj-y = stdout/
obj-y += string/

View file

@ -1,4 +0,0 @@
obj-y = fprintf.o
obj-y += prf.o
obj-y += sprintf.o
obj-y += stdout_console.o

View file

@ -1 +0,0 @@
obj-y = string.o

View file

@ -70,6 +70,7 @@ linker_command()
initial_link() initial_link()
{ {
${CC} -o ${1} @${2} -T ${3} ${CC} -o ${1} @${2} -T ${3}
cp ${KLIBC_DIR}/lib.a ${KLIBC_DIR}/libc.a
} }
#Generates IDT and merge them into final binary #Generates IDT and merge them into final binary