1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-11-29 07:24:13 +01:00
LibrePilot/Makefile
stac a43f579265 Add AHRS firmware build to the "all" target + misc
Add the AHRS firmware to the "all" target since it is once again
compiling successfully.

Fix reinstall of QT SDK, Create placeholder for uavobjects.
Reinstall of the QT SDK prompted to remove the read-only license
file.  Use rm -rf to avoid the prompt.

The uavobjects target now creates a directory in the build tree.
This will eventually hold the generated .c/.h/.cpp/.py files that
are generated from the UAVObjects xml files.

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@621 ebee16cc-31ac-478f-84a7-5cbb03baadba
2010-05-14 04:31:52 +00:00

227 lines
7.0 KiB
Makefile

# Set up some macros for common directories within the tree
ROOT_DIR=$(CURDIR)
TOOLS_DIR=$(ROOT_DIR)/tools
BUILD_DIR=$(ROOT_DIR)/build
DL_DIR=$(ROOT_DIR)/downloads
# Set up misc host tools
RM=rm
.PHONY: areyousureyoushouldberunningthis
areyousureyoushouldberunningthis:
@echo
@echo " This Makefile is somewhat experimental and will probably only work on Linux right now."
@echo " If you're sure you want to be using this, you may wish to try the following targets:"
@echo
@echo " [Tool Installers]"
@echo " qt_sdk_install - Install the QT v4.6.2 tools"
@echo " arm_sdk_install - Install the Code Sourcery ARM gcc toolchain"
@echo " openocd_install - Install the OpenOCD JTAG daemon"
@echo
@echo " [Big Hammer]"
@echo " all - Generate UAVObjects, build openpilot firmware and gcs"
@echo " all_clean - Remove your build directory ($(BUILD_DIR))"
@echo
@echo " [Firmware]"
@echo " openpilot - Build firmware for the OpenPilot board"
@echo " openpilot_clean - Delete all build output for the OpenPilot firmware"
@echo " openpilot_program - Program the firmware onto the OpenPilot board"
@echo " ahrs - Build firmware for the AHRS board"
@echo " ahrs_clean - Delete all build output for the AHRS firmware"
@echo
@echo " [GCS and UAVObjects]"
@echo " gcs - Build the Ground Control System application"
@echo " uavobjects - Generate the gcs and openpilot source files from the UAVObject definition XML files"
@echo
@echo " Note: All tools will be installed into $(TOOLS_DIR)"
@echo " All build output will be placed in $(BUILD_DIR)"
@echo
.PHONY: all
all: uavobjects all_ground all_flight
.PHONY: all_clean
all_clean:
[ ! -d "$(BUILD_DIR)" ] || $(RM) -r "$(BUILD_DIR)"
$(DL_DIR):
mkdir -p $@
$(TOOLS_DIR):
mkdir -p $@
$(BUILD_DIR):
mkdir -p $@
###############################################################
#
# Installers for tools required by the ground and flight builds
#
# NOTE: These are not tied to the default goals
# and must be invoked manually
#
###############################################################
# Set up QT toolchain
QT_SDK_DIR := $(TOOLS_DIR)/qtsdk-2010.02
.PHONY: qt_sdk_install
qt_sdk_install: QT_SDK_URL := http://get.qt.nokia.com/qtsdk/qt-sdk-linux-x86-opensource-2010.02.bin
qt_sdk_install: QT_SDK_FILE := $(notdir $(QT_SDK_URL))
qt_sdk_install: qt_sdk_clean $(TOOLS_DIR)
# download the source only if it's newer than what we already have
wget -N -P "$(DL_DIR)" "$(QT_SDK_URL)"
#installer is an executable, make it executable and run it
chmod u+x "$(DL_DIR)/$(QT_SDK_FILE)"
"$(DL_DIR)/$(QT_SDK_FILE)" --installdir "$(QT_SDK_DIR)"
.PHONY: qt_sdk_clean
qt_sdk_clean:
[ ! -d "$(QT_SDK_DIR)" ] || $(RM) -rf $(QT_SDK_DIR)
# Set up ARM (STM32) SDK
ARM_SDK_DIR := $(TOOLS_DIR)/arm-2009q3
.PHONY: arm_sdk_install
arm_sdk_install: ARM_SDK_URL := http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
arm_sdk_install: ARM_SDK_FILE := $(notdir $(ARM_SDK_URL))
arm_sdk_install: arm_sdk_clean $(TOOLS_DIR)
# download the source only if it's newer than what we already have
wget -N -P "$(DL_DIR)" "$(ARM_SDK_URL)"
# binary only release so just extract it
tar -C $(TOOLS_DIR) -xjf "$(DL_DIR)/$(ARM_SDK_FILE)"
.PHONY: arm_sdk_clean
arm_sdk_clean:
[ ! -d "$(ARM_SDK_DIR)" ] || $(RM) -r $(ARM_SDK_DIR)
# Set up openocd tools
OPENOCD_DIR := $(TOOLS_DIR)/openocd
.PHONY: openocd_install
openocd_install: OPENOCD_URL := http://sourceforge.net/projects/openocd/files/openocd/0.4.0/openocd-0.4.0.tar.bz2/download
openocd_install: OPENOCD_FILE := openocd-0.4.0.tar.bz2
openocd_install: openocd_clean $(TOOLS_DIR)
# download the source only if it's newer than what we already have
wget -N -P "$(DL_DIR)" "$(OPENOCD_URL)"
# extract the source
[ ! -d "$(DL_DIR)/openocd-build" ] || $(RM) -r "$(DL_DIR)/openocd-build"
mkdir -p "$(DL_DIR)/openocd-build"
tar -C $(DL_DIR)/openocd-build -xjf "$(DL_DIR)/$(OPENOCD_FILE)"
# build and install
mkdir -p "$(OPENOCD_DIR)"
( \
cd $(DL_DIR)/openocd-build/openocd-0.4.0 ; \
./configure --prefix="$(OPENOCD_DIR)" --enable-ft2232_libftdi ; \
make ; \
make install ; \
)
# delete the extracted source when we're done
[ ! -d "$(DL_DIR)/openocd-build" ] || $(RM) -r "$(DL_DIR)/openocd-build"
.PHONY: openocd_clean
openocd_clean:
[ ! -d "$(OPENOCD_DIR)" ] || $(RM) -r "$(OPENOCD_DIR)"
##############################
#
# Set up paths to tools
#
##############################
ifeq ($(shell [ -d "$(QT_SDK_DIR)" ] && echo "exists"), exists)
QMAKE=$(QT_SDK_DIR)/qt/bin/qmake
else
# not installed, hope it's in the path...
QMAKE=qmake
endif
ifeq ($(shell [ -d "$(ARM_SDK_DIR)" ] && echo "exists"), exists)
ARM_SDK_PREFIX := $(ARM_SDK_DIR)/bin/arm-none-eabi-
else
# not installed, hope it's in the path...
ARM_SDK_PREFIX ?= arm-none-eabi-
endif
ifeq ($(shell [ -d "$(OPENOCD_DIR)" ] && echo "exists"), exists)
OPENOCD := $(OPENOCD_DIR)/bin/openocd
else
# not installed, hope it's in the path...
OPENOCD ?= openocd
endif
##############################
#
# GCS related components
#
##############################
.PHONY: all_ground
all_ground: uavobjgenerator openpilotgcs
# Convenience target for the GCS
.PHONY: gcs
gcs: openpilotgcs
# Note: openpilotgcs should depend on uavobjects directly since it uses
# the generated uavobject files. This is commented out since the
# uavobjgenerator tool always regenerates its output files
# triggering unnecessary rebuilds of the elf file.
.PHONY: openpilotgcs
openpilotgcs: #uavobjects
mkdir -p $(BUILD_DIR)/$@
( cd $(BUILD_DIR)/$@ ; \
$(QMAKE) $(ROOT_DIR)/ground/openpilotgcs.pro -spec linux-g++ -r CONFIG+=debug ; \
make -w ; \
)
.PHONY: uavobjgenerator
uavobjgenerator:
mkdir -p $(BUILD_DIR)/$@
( cd $(BUILD_DIR)/$@ ; \
$(QMAKE) $(ROOT_DIR)/ground/src/libs/uavobjgenerator/uavobjgenerator.pro -spec linux-g++ -r CONFIG+=debug ; \
make -w ; \
)
.PHONY: uavobjects
uavobjects: uavobjgenerator
mkdir -p $(BUILD_DIR)/$@
"$(BUILD_DIR)/uavobjgenerator/uavobjgenerator" "$(ROOT_DIR)/"
##############################
#
# Flight related components
#
##############################
.PHONY: all_flight
all_flight: openpilot_elf ahrs_elf
.PHONY: openpilot
openpilot: openpilot_elf
# Note: openpilot_* should depend on uavobjects directly since it uses
# the generated uavobject files. This is commented out since the
# uavobjgenerator tool always regenerates its output files
# triggering unnecessary rebuilds of the elf file.
openpilot_%: #uavobjects
mkdir -p $(BUILD_DIR)/openpilot
make OUTDIR="$(BUILD_DIR)/openpilot" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" -C $(ROOT_DIR)/flight/OpenPilot $*
.PHONY: ahrs
ahrs: ahrs_elf
ahrs_%:
mkdir -p $(BUILD_DIR)/ahrs
make OUTDIR="$(BUILD_DIR)/ahrs" TCHAIN_PREFIX="$(ARM_SDK_PREFIX)" REMOVE_CMD="$(RM)" OOCD_EXE="$(OPENOCD)" -C $(ROOT_DIR)/flight/AHRS $*