[BUILD] Add build system module makefiles, add README how to use it.
This commit is contained in:
parent
09fcb14f74
commit
78eff1210e
75
mk/README
Normal file
75
mk/README
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
-------------------------------------------------------------------------------
|
||||||
|
README
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
This directory contains makefile modular support files, that can be used in
|
||||||
|
your project.
|
||||||
|
|
||||||
|
Each module is packaged with two inclusion makefiles, <module>-config.mk and
|
||||||
|
<module>-rules.mk. The first one defines some new variables for the make, or
|
||||||
|
appends values to the existing variables for the make. The second defines rules
|
||||||
|
for support building.
|
||||||
|
|
||||||
|
So in your project, the <module>-config.mk should be included at some place,
|
||||||
|
where you are defining variables (near the beginning of the file), and file
|
||||||
|
<module>-rules.mk should be included in the rules part of makefile (somewhere
|
||||||
|
near to the end of file).
|
||||||
|
|
||||||
|
Example makefile using gcc compiler module:
|
||||||
|
|
||||||
|
>>>>>>
|
||||||
|
OBJS += foo.o bar.o
|
||||||
|
|
||||||
|
CFLAGS += -O0 -g
|
||||||
|
CPPFLAGS += -MD -MP $(@F).d
|
||||||
|
CPPFLAGS += $(DEFS)
|
||||||
|
CPPFLAGS += $(INCS)
|
||||||
|
LDFLAGS += --static --nostartfiles
|
||||||
|
LDLIBS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group
|
||||||
|
# parameters for gcc module
|
||||||
|
PREFIX = arm-elf
|
||||||
|
|
||||||
|
include $(OPENCM3_DIR)/mk/gcc-config.mk
|
||||||
|
|
||||||
|
.PHONY: clean all
|
||||||
|
|
||||||
|
all: binary.images
|
||||||
|
|
||||||
|
%.images: %.elf %.hex
|
||||||
|
|
||||||
|
include $(OPENCM3_DIR)/mk/gcc-rules.mk
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(Q)$(RM) -rf binary.* *.o *.d
|
||||||
|
|
||||||
|
-include $(OBJS:.o=.d)
|
||||||
|
<<<<<<
|
||||||
|
|
||||||
|
|
||||||
|
MODULES
|
||||||
|
=======
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
gcc
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
This module adds an extended support for GCC toolchain. This adds rules,
|
||||||
|
neccessary for compiling C and C++ files into elf binary, and rules for
|
||||||
|
generation of bin, hex, or srec output files for flashing.
|
||||||
|
|
||||||
|
Variables to control the build process (should be set in your makefile):
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
CFLAGS C compiler flags
|
||||||
|
CXXFLAGS C++ compiler flags
|
||||||
|
CPPFLAGS C preprocessor flags (used for C and for C++ compiler)
|
||||||
|
LDFLAGS Linker flags
|
||||||
|
ARCH_FLAGS Architecture specification flags (-mcpu, -march etc )
|
||||||
|
|
||||||
|
Variables to tell gcc about project dependencies and input files
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
LDSCRIPT Linker script file name (can be generated or fixed)
|
||||||
|
LIBDEPS Array of library filenames that shoud be rebuilt if needed
|
||||||
|
LDLIBS Array of libraries to be linked with (array of -l<libname>)
|
||||||
|
OBJS Array of object files to be built
|
37
mk/gcc-config.mk
Normal file
37
mk/gcc-config.mk
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
##
|
||||||
|
## This file is part of the libopencm3 project.
|
||||||
|
##
|
||||||
|
## Copyright (C) 2014 Frantisek Burian <BuFran@seznam.cz>
|
||||||
|
##
|
||||||
|
## This library is free software: you can redistribute it and/or modify
|
||||||
|
## it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
## the Free Software Foundation, either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This library is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU Lesser General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU Lesser General Public License
|
||||||
|
## along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
##
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# The support makefile for GCC compiler toolchain, the rules part.
|
||||||
|
#
|
||||||
|
# please read mk/README for specification how to use this file in your project
|
||||||
|
|
||||||
|
|
||||||
|
PREFIX ?= arm-none-eabi
|
||||||
|
#PREFIX ?= arm-elf
|
||||||
|
|
||||||
|
CC := $(PREFIX)-gcc
|
||||||
|
CXX := $(PREFIX)-g++
|
||||||
|
LD := $(PREFIX)-gcc
|
||||||
|
AR := $(PREFIX)-ar
|
||||||
|
AS := $(PREFIX)-as
|
||||||
|
OBJCOPY := $(PREFIX)-objcopy
|
||||||
|
OBJDUMP := $(PREFIX)-objdump
|
||||||
|
GDB := $(PREFIX)-gdb
|
||||||
|
SIZE := $(PREFIX)-size
|
56
mk/gcc-rules.mk
Normal file
56
mk/gcc-rules.mk
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
##
|
||||||
|
## This file is part of the libopencm3 project.
|
||||||
|
##
|
||||||
|
## Copyright (C) 2014 Frantisek Burian <BuFran@seznam.cz>
|
||||||
|
##
|
||||||
|
## This library is free software: you can redistribute it and/or modify
|
||||||
|
## it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
## the Free Software Foundation, either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This library is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU Lesser General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU Lesser General Public License
|
||||||
|
## along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
##
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# The support makefile for GCC compiler toolchain, the rules part.
|
||||||
|
#
|
||||||
|
# please read mk/README for specification how to use this file in your project
|
||||||
|
#
|
||||||
|
|
||||||
|
%.bin: %.elf
|
||||||
|
@printf " OBJCOPY $@\n"
|
||||||
|
$(Q)$(OBJCOPY) -Obinary $< $@
|
||||||
|
|
||||||
|
%.hex: %.elf
|
||||||
|
@printf " OBJCOPY $@\n"
|
||||||
|
$(Q)$(OBJCOPY) -Oihex $< $@
|
||||||
|
|
||||||
|
%.srec: %.elf
|
||||||
|
@printf " OBJCOPY $@\n"
|
||||||
|
$(Q)$(OBJCOPY) -Osrec $< $@
|
||||||
|
|
||||||
|
%.list: %.elf
|
||||||
|
@printf " OBJDUMP $@\n"
|
||||||
|
$(Q)$(OBJDUMP) -S $< > $@
|
||||||
|
|
||||||
|
%.elf: $(OBJS) $(LDSCRIPT) $(LIBDEPS)
|
||||||
|
@printf " LD $(*).elf\n"
|
||||||
|
$(Q)$(LD) $(OBJS) $(LDLIBS) $(LDFLAGS) -T$(LDSCRIPT) $(ARCH_FLAGS) -o $@
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
@printf " CC $<\n"
|
||||||
|
$(Q)$(CC) $(CFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
%.o: %.cxx
|
||||||
|
@printf " CXX $<\n"
|
||||||
|
$(Q)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
%.o: %.cpp
|
||||||
|
@printf " CXX $(*).cpp\n"
|
||||||
|
$(Q)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $@ -c $<
|
Loading…
x
Reference in New Issue
Block a user