aboutsummaryrefslogtreecommitdiff
path: root/makefiles/library.mk
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2013-05-20 00:26:41 +0200
committerpx4dev <px4@purgatory.org>2013-05-20 00:26:41 +0200
commit3a1c9f14f68054537657851eacb60d930c3d4221 (patch)
treea557706dca066e99935d52d2cc84ed8fa6fe4187 /makefiles/library.mk
parent504b6d12561d68874ded4c1f747c21926a065045 (diff)
downloadpx4-firmware-3a1c9f14f68054537657851eacb60d930c3d4221.tar.gz
px4-firmware-3a1c9f14f68054537657851eacb60d930c3d4221.tar.bz2
px4-firmware-3a1c9f14f68054537657851eacb60d930c3d4221.zip
Teach the PX4 build system how to handle pre-built libraries.
Diffstat (limited to 'makefiles/library.mk')
-rw-r--r--makefiles/library.mk169
1 files changed, 169 insertions, 0 deletions
diff --git a/makefiles/library.mk b/makefiles/library.mk
new file mode 100644
index 000000000..28a421fe0
--- /dev/null
+++ b/makefiles/library.mk
@@ -0,0 +1,169 @@
+#
+# Copyright (c) 2013 PX4 Development Team. All rights reserved.
+#
+# 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 PX4 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 OWNER 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.
+#
+
+#
+# Framework makefile for PX4 libraries
+#
+# This makefile is invoked by firmware.mk to build each of the linraries
+# that will subsequently be linked into the firmware image.
+#
+# Applications are built as standard ar archives. Unlike modules,
+# all public symbols in library objects are visible across the entire
+# firmware stack.
+#
+# In general, modules should be preferred to libraries when possible.
+# Libraries may also be pre-built.
+#
+# IMPORTANT NOTE:
+#
+# This makefile assumes it is being invoked in the library's output directory.
+#
+
+#
+# Variables that can be set by the library's library.mk:
+#
+#
+# SRCS (optional)
+#
+# Lists the .c, cpp and .S files that should be compiled/assembled to
+# produce the library.
+#
+# PREBUILT_LIB (optional)
+#
+# Names the prebuilt library in the source directory that should be
+# linked into the firmware.
+#
+# INCLUDE_DIRS (optional, must be appended, ignored if SRCS not set)
+#
+# The list of directories searched for include files. If non-standard
+# includes (e.g. those from another module) are required, paths to search
+# can be added here.
+#
+#
+
+#
+# Variables visible to the library's library.mk:
+#
+# CONFIG
+# BOARD
+# LIBRARY_WORK_DIR
+# LIBRARY_LIB
+# LIBRARY_MK
+# Anything set in setup.mk, board_$(BOARD).mk and the toolchain file.
+# Anything exported from config_$(CONFIG).mk
+#
+
+################################################################################
+# No user-serviceable parts below.
+################################################################################
+
+ifeq ($(LIBRARY_MK),)
+$(error No library makefile specified)
+endif
+$(info %% LIBRARY_MK = $(LIBRARY_MK))
+
+#
+# Get the board/toolchain config
+#
+include $(PX4_MK_DIR)/board_$(BOARD).mk
+
+#
+# Get the library's config
+#
+include $(LIBRARY_MK)
+LIBRARY_SRC := $(dir $(LIBRARY_MK))
+$(info % LIBRARY_NAME = $(LIBRARY_NAME))
+$(info % LIBRARY_SRC = $(LIBRARY_SRC))
+$(info % LIBRARY_LIB = $(LIBRARY_LIB))
+$(info % LIBRARY_WORK_DIR = $(LIBRARY_WORK_DIR))
+
+#
+# Things that, if they change, might affect everything
+#
+GLOBAL_DEPS += $(MAKEFILE_LIST)
+
+################################################################################
+# Build rules
+################################################################################
+
+#
+# What we're going to build
+#
+library: $(LIBRARY_LIB)
+
+ifneq ($(PREBUILT_LIB),)
+
+VPATH = $(LIBRARY_SRC)
+$(LIBRARY_LIB): $(PREBUILT_LIB) $(GLOBAL_DEPS)
+ @$(ECHO) "PREBUILT: $(PREBUILT_LIB)"
+ $(Q) $(COPY) $< $@
+
+else
+
+##
+## Object files we will generate from sources
+##
+
+OBJS = $(addsuffix .o,$(SRCS))
+
+#
+# SRCS -> OBJS rules
+#
+
+$(OBJS): $(GLOBAL_DEPS)
+
+vpath %.c $(LIBRARY_SRC)
+$(filter %.c.o,$(OBJS)): %.c.o: %.c $(GLOBAL_DEPS)
+ $(call COMPILE,$<,$@)
+
+vpath %.cpp $(LIBRARY_SRC)
+$(filter %.cpp.o,$(OBJS)): %.cpp.o: %.cpp $(GLOBAL_DEPS)
+ $(call COMPILEXX,$<,$@)
+
+vpath %.S $(LIBRARY_SRC)
+$(filter %.S.o,$(OBJS)): %.S.o: %.S $(GLOBAL_DEPS)
+ $(call ASSEMBLE,$<,$@)
+
+#
+# Built product rules
+#
+
+$(LIBRARY_LIB): $(OBJS) $(GLOBAL_DEPS)
+ $(call ARCHIVE,$@,$(OBJS))
+
+endif
+
+#
+# Utility rules
+#
+
+clean:
+ $(Q) $(REMOVE) $(LIBRARY_LIB) $(OBJS)