hosted build working
This commit is contained in:
parent
63cb824623
commit
acc5fdeab9
431
Makefile-Hosted
Normal file
431
Makefile-Hosted
Normal file
@ -0,0 +1,431 @@
|
|||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Makefile for SOURCE OBSW
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# User-modifiable options
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Fundamentals on the build process of C/C++ Software:
|
||||||
|
# https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html
|
||||||
|
|
||||||
|
# Make documentation: https://www.gnu.org/software/make/manual/make.pdf
|
||||||
|
# Online: https://www.gnu.org/software/make/manual/make.html
|
||||||
|
# General rules: http://make.mad-scientist.net/papers/rules-of-makefiles/#rule3
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
CUSTOM_DEFINES :=
|
||||||
|
|
||||||
|
# Chip & board used for compilation
|
||||||
|
# (can be overriden by adding CHIP=chip and BOARD=board to the command-line)
|
||||||
|
BOARD_FILE_ROOT = hosted
|
||||||
|
BOARD = host
|
||||||
|
OS_FSFW = host
|
||||||
|
CUSTOM_DEFINES += -D$(OS_FSFW)
|
||||||
|
|
||||||
|
# Copied from stackoverflow, can be used to differentiate between Windows
|
||||||
|
# and Linux
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
CUSTOM_DEFINES += -DWIN32
|
||||||
|
ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
|
||||||
|
CUSTOM_DEFINES += -DAMD64
|
||||||
|
else
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
|
||||||
|
CUSTOM_DEFINES += -DAMD64
|
||||||
|
endif
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE),x86)
|
||||||
|
CUSTOM_DEFINES += -DIA32
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
UNAME_S := $(shell uname -s)
|
||||||
|
ifeq ($(UNAME_S),Linux)
|
||||||
|
DETECTED_OS = LINUX
|
||||||
|
CUSTOM_DEFINES += -DLINUX
|
||||||
|
endif
|
||||||
|
ifeq ($(UNAME_S),Darwin)
|
||||||
|
CUSTOM_DEFINES += -DOSX
|
||||||
|
endif
|
||||||
|
UNAME_P := $(shell uname -p)
|
||||||
|
ifeq ($(UNAME_P),x86_64)
|
||||||
|
CUSTOM_DEFINES += -DAMD64
|
||||||
|
endif
|
||||||
|
ifneq ($(filter %86,$(UNAME_P)),)
|
||||||
|
CUSTOM_DEFINES += -DIA32
|
||||||
|
endif
|
||||||
|
ifneq ($(filter arm%,$(UNAME_P)),)
|
||||||
|
CUSTOM_DEFINES += -DARM
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# General folder paths
|
||||||
|
FRAMEWORK_PATH = fsfw
|
||||||
|
MISSION_PATH = mission
|
||||||
|
CONFIG_PATH = $(BOARD_FILE_ROOT)/config
|
||||||
|
TEST_PATH = test
|
||||||
|
UNITTEST_PATH = unittest
|
||||||
|
|
||||||
|
# Board specific paths
|
||||||
|
BSP_PATH = $(BOARD_FILE_ROOT)
|
||||||
|
BOARDTEST_PATH = $(BOARD_FILE_ROOT)/boardtest
|
||||||
|
|
||||||
|
# Output file basename
|
||||||
|
BASENAME = sourceobsw
|
||||||
|
BINARY_NAME = $(BASENAME)-$(BOARD)
|
||||||
|
# Output files will be put in this directory inside
|
||||||
|
OUTPUT_FOLDER = $(OS_FSFW)
|
||||||
|
|
||||||
|
# Default debug output
|
||||||
|
DEBUG_LEVEL = -g3
|
||||||
|
|
||||||
|
# Optimization level. -O0 default, -Os for size, -O3 for speed and size.
|
||||||
|
OPTIMIZATION = -O0
|
||||||
|
|
||||||
|
ifdef GCOV
|
||||||
|
CUSTOM_DEFINES += -DGCOV
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Output directories
|
||||||
|
BUILDPATH = _bin
|
||||||
|
DEPENDPATH = _dep
|
||||||
|
OBJECTPATH = _obj
|
||||||
|
ifeq ($(MAKECMDGOALS),release)
|
||||||
|
BUILD_FOLDER = mission
|
||||||
|
else
|
||||||
|
BUILD_FOLDER = devel
|
||||||
|
endif
|
||||||
|
|
||||||
|
DEPENDDIR = $(DEPENDPATH)/$(OUTPUT_FOLDER)/$(BUILD_FOLDER)
|
||||||
|
OBJDIR = $(OBJECTPATH)/$(OUTPUT_FOLDER)/$(BUILD_FOLDER)
|
||||||
|
BINDIR = $(BUILDPATH)/$(OUTPUT_FOLDER)/$(BUILD_FOLDER)
|
||||||
|
|
||||||
|
CLEANDEP = $(DEPENDPATH)/$(OUTPUT_FOLDER)
|
||||||
|
CLEANOBJ = $(OBJECTPATH)/$(OUTPUT_FOLDER)
|
||||||
|
CLEANBIN = $(BUILDPATH)/$(OUTPUT_FOLDER)
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Tools and Includes
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Tool suffix when cross-compiling
|
||||||
|
CROSS_COMPILE =
|
||||||
|
|
||||||
|
# C Compiler
|
||||||
|
CC = $(CROSS_COMPILE)gcc
|
||||||
|
|
||||||
|
# C++ compiler
|
||||||
|
CXX = $(CROSS_COMPILE)g++
|
||||||
|
|
||||||
|
# Additional Tools
|
||||||
|
SIZE = $(CROSS_COMPILE)size
|
||||||
|
STRIP = $(CROSS_COMPILE)strip
|
||||||
|
CP = $(CROSS_COMPILE)objcopy
|
||||||
|
|
||||||
|
HEXCOPY = $(CP) -O ihex
|
||||||
|
BINCOPY = $(CP) -O binary
|
||||||
|
# files to be compiled, will be filled in by include makefiles
|
||||||
|
# := assignment here is neccessary as initialization so that the +=
|
||||||
|
# operator can be used in the submakefiles to achieve immediate evaluation.
|
||||||
|
# See: http://make.mad-scientist.net/evaluation-and-expansion/
|
||||||
|
CSRC :=
|
||||||
|
CXXSRC :=
|
||||||
|
ASRC :=
|
||||||
|
INCLUDES :=
|
||||||
|
|
||||||
|
# Directories where $(directoryname).mk files should be included from
|
||||||
|
SUBDIRS := $(FRAMEWORK_PATH) $(TEST_PATH) $(BSP_PATH) \
|
||||||
|
$(CONFIG_PATH) $(MISSION_PATH)
|
||||||
|
# $(MISSION_PATH) $(CONFIG_PATH)
|
||||||
|
# INCLUDES += framework/test/catch2
|
||||||
|
|
||||||
|
# ETL library include.
|
||||||
|
ETL_PATH = etl/include
|
||||||
|
I_INCLUDES += -I$(ETL_PATH)
|
||||||
|
|
||||||
|
I_INCLUDES += $(addprefix -I, $(INCLUDES))
|
||||||
|
|
||||||
|
# This is a hack from http://make.mad-scientist.net/the-eval-function/
|
||||||
|
#
|
||||||
|
# The problem is, that included makefiles should be aware of their relative path
|
||||||
|
# but not need to guess or hardcode it. So we set $(CURRENTPATH) for them. If
|
||||||
|
# we do this globally and the included makefiles want to include other makefiles as
|
||||||
|
# well, they would overwrite $(CURRENTPATH), screwing the include after them.
|
||||||
|
#
|
||||||
|
# By using a for-loop with an eval'd macro, we can generate the code to include all
|
||||||
|
# sub-makefiles (with the correct $(CURRENTPATH) set) before actually evaluating
|
||||||
|
# (and by this possibly changing $(CURRENTPATH)) them.
|
||||||
|
#
|
||||||
|
# This works recursively, if an included makefile wants to include, it can safely set
|
||||||
|
# $(SUBDIRS) (which has already been evaluated here) and do
|
||||||
|
# "$(foreach S,$(SUBDIRS),$(eval $(INCLUDE_FILE)))"
|
||||||
|
# $(SUBDIRS) must be relative to the project root, so to include subdir foo, set
|
||||||
|
# $(SUBDIRS) = $(CURRENTPATH)/foo.
|
||||||
|
define INCLUDE_FILE
|
||||||
|
CURRENTPATH := $S
|
||||||
|
include $(S)/$(notdir $S).mk
|
||||||
|
endef
|
||||||
|
$(foreach S,$(SUBDIRS),$(eval $(INCLUDE_FILE)))
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Source Files
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Additional source files which were not includes by other .mk
|
||||||
|
# files are added here.
|
||||||
|
# To help Makefile find source files, the source location paths
|
||||||
|
# can be added by using the VPATH variable
|
||||||
|
# See: https://www.gnu.org/software/make/manual/html_node/General-Search.html
|
||||||
|
# It is recommended to only use VPATH to add source locations
|
||||||
|
# See: http://make.mad-scientist.net/papers/how-not-to-use-vpath/
|
||||||
|
|
||||||
|
# Please ensure that no files are included by both .mk file and here !
|
||||||
|
|
||||||
|
# VPATH += mission/pus/
|
||||||
|
|
||||||
|
ifeq ($(DETECTED_OS), LINUX)
|
||||||
|
CXXSRC += $(FRAMEWORK_PATH)/osal/linux/TcUnixUdpPollingTask.cpp
|
||||||
|
CXXSRC += $(FRAMEWORK_PATH)/osal/linux/TmTcUnixUdpBridge.cpp
|
||||||
|
endif
|
||||||
|
# CXXSRC += Service17Test.cpp
|
||||||
|
|
||||||
|
# All C Sources included by .mk files are assigned here
|
||||||
|
# Add the objects to sources so dependency handling works
|
||||||
|
C_OBJECTS += $(CSRC:.c=.o)
|
||||||
|
|
||||||
|
# Objects built from Assembly source files
|
||||||
|
ASM_OBJECTS = $(ASRC:.S=.o)
|
||||||
|
|
||||||
|
# Objects built from C++ source files
|
||||||
|
CXX_OBJECTS += $(CXXSRC:.cpp=.o)
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Build Configuration + Output
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
TARGET = Debug
|
||||||
|
DEBUG_MESSAGE = Off
|
||||||
|
OPTIMIZATION_MESSAGE = Off
|
||||||
|
|
||||||
|
# Define Messages
|
||||||
|
MSG_INFO = Software: Hosted EIVE OBSW.
|
||||||
|
MSG_LINKING = Linking:
|
||||||
|
MSG_COMPILING = Compiling:
|
||||||
|
MSG_ASSEMBLING = Assembling:
|
||||||
|
MSG_BINARY = Generate binary:
|
||||||
|
MSG_OPTIMIZATION = Optimization: $(OPTIMIZATION), $(OPTIMIZATION_MESSAGE)
|
||||||
|
MSG_TARGET = Target Build: $(TARGET)
|
||||||
|
MSG_DEBUG = FSFW Debugging: $(DEBUG_MESSAGE)
|
||||||
|
MSG_COMIF = TMTC Communication Interface: $(COMIF_MESSAGE)
|
||||||
|
|
||||||
|
# See: https://stackoverflow.com/questions/6687630/how-to-remove-unused-c-c-symbols-with-gcc-and-ld
|
||||||
|
# Used to throw away unused code. Reduces code size significantly !
|
||||||
|
# -Wl,--gc-sections: needs to be passed to the linker to throw aways unused code
|
||||||
|
ifdef KEEP_UNUSED_CODE
|
||||||
|
PROTOTYPE_OPTIMIZATION =
|
||||||
|
DEAD_CODE_REMOVAL =
|
||||||
|
else
|
||||||
|
PROTOTYPE_OPTIMIZATION = -ffunction-sections -fdata-sections
|
||||||
|
DEAD_CODE_REMOVAL = -Wl,--gc-sections
|
||||||
|
# Link time optimization
|
||||||
|
# See https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html for reference
|
||||||
|
# Link time is larger and size of object files can not be retrieved
|
||||||
|
# but resulting binary is smaller. Could be used in mission/deployment build
|
||||||
|
# Requires -ffunction-section in linker call
|
||||||
|
LINK_TIME_OPTIMIZATION = -flto
|
||||||
|
OPTIMIZATION += $(PROTOTYPE_OPTIMIZATION)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Dependency Flags
|
||||||
|
# These flags tell the compiler to build dependencies
|
||||||
|
# See: https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html
|
||||||
|
# Using following guide:
|
||||||
|
# http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
|
||||||
|
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPENDDIR)/$*.d
|
||||||
|
|
||||||
|
# Flags for the compiler call
|
||||||
|
# - std: Which C++ version to use. Common versions: c++11, c++14 and c++17
|
||||||
|
# - Wall: enable all warnings
|
||||||
|
# - Wextra: enable extra warnings
|
||||||
|
# - g: defines debug level
|
||||||
|
# - fmessage-length: to control the formatting algorithm for diagnostic messages;
|
||||||
|
# =0 means no line-wrapping, each error message appears on a single line
|
||||||
|
# - fno-exceptions: stops generating extra code needed to propagate exceptions,
|
||||||
|
# which can produce significant data size overhead
|
||||||
|
WARNING_FLAGS = -Wall -Wshadow=local -Wextra -Wimplicit-fallthrough=1 \
|
||||||
|
-Wno-unused-parameter
|
||||||
|
|
||||||
|
CXXDEFINES := $(CUSTOM_DEFINES)
|
||||||
|
CFLAGS +=
|
||||||
|
CXXFLAGS += -I. $(DEBUG_LEVEL) $(WARNIING_FLAGS) $(I_INCLUDES) $(DEPFLAGS) \
|
||||||
|
-fmessage-length=0 $(CXXDEFINES) $(OPTIMIZATION)
|
||||||
|
CPPFLAGS += -std=c++17 -fno-exceptions
|
||||||
|
ASFLAGS = -Wall -g $(OPTIMIZATION) $(I_INCLUDES) -D__ASSEMBLY__
|
||||||
|
|
||||||
|
# Flags for the linker call
|
||||||
|
# LINK_INCLUDES specify the path to used libraries and the linker script
|
||||||
|
# LINK_LIBRARIES link HCC and HAL library and enable float support
|
||||||
|
LDFLAGS := -g3 -pthread $(DEAD_CODE_REMOVAL) $(OPTIMIZATION)
|
||||||
|
|
||||||
|
LINK_INCLUDES :=
|
||||||
|
|
||||||
|
LINK_LIBRARIES :=
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
LINK_LIBRARIES += -lwsock32 -lws2_32
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Gnu Coverage Tools Flags
|
||||||
|
ifdef GCOV
|
||||||
|
GCOV_CXXFLAGS = -fprofile-arcs -ftest-coverage
|
||||||
|
CXXFLAGS += $(GCOV_CXXFLAGS)
|
||||||
|
GCOV_LINKER_LIBS = -lgcov -fprofile-arcs -ftest-coverage
|
||||||
|
LINK_LIBRARIES += $(GCOV_LINKER_LIBS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Rules
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Makefile rules: https://www.gnu.org/software/make/manual/html_node/Rules.html
|
||||||
|
# This is the primary section which defines the ruleset to build
|
||||||
|
# the executable from the sources.
|
||||||
|
|
||||||
|
default: all
|
||||||
|
|
||||||
|
# Cleans all files
|
||||||
|
hardclean:
|
||||||
|
-rm -rf $(BUILDPATH)
|
||||||
|
-rm -rf $(OBJECTPATH)
|
||||||
|
-rm -rf $(DEPENDPATH)
|
||||||
|
|
||||||
|
# Only clean files for current build
|
||||||
|
clean:
|
||||||
|
-rm -rf $(CLEANOBJ)
|
||||||
|
-rm -rf $(CLEANBIN)
|
||||||
|
-rm -rf $(CLEANDEP)
|
||||||
|
|
||||||
|
# Only clean binaries. Useful for changing the binary type when object files are already compiled
|
||||||
|
# so complete rebuild is not necessary
|
||||||
|
cleanbin:
|
||||||
|
-rm -rf $(BUILDPATH)/$(OUTPUT_FOLDER)
|
||||||
|
|
||||||
|
# In this section, the binaries are built for all selected memories
|
||||||
|
|
||||||
|
all: executable
|
||||||
|
|
||||||
|
# Build target configuration
|
||||||
|
release: OPTIMIZATION = -Os $(PROTOTYPE_OPTIMIZATION) $(LINK_TIME_OPTIMIZATION)
|
||||||
|
release: LINK_TIME_OPTIMIZATION = -flto
|
||||||
|
release: TARGET = Release
|
||||||
|
release: OPTIMIZATION_MESSAGE = On with Link Time Optimization
|
||||||
|
release: DEBUG_LEVEL = -g0
|
||||||
|
|
||||||
|
debug: CXXDEFINES += -DDEBUG
|
||||||
|
debug: DEBUG_MESSAGE = On
|
||||||
|
|
||||||
|
ifndef KEEP_UNUSED_CODE
|
||||||
|
debug release: OPTIMIZATION_MESSAGE = Off with unused code removal
|
||||||
|
else
|
||||||
|
debug release: OPTIMIZATION_MESSAGE = Off
|
||||||
|
endif
|
||||||
|
|
||||||
|
debug release: executable
|
||||||
|
|
||||||
|
# executable: $(BINDIR)/$(BINARY_NAME).bin
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
executable: $(BINDIR)/$(BINARY_NAME).exe
|
||||||
|
else
|
||||||
|
executable: $(BINDIR)/$(BINARY_NAME).elf
|
||||||
|
endif
|
||||||
|
@echo
|
||||||
|
@echo $(MSG_INFO)
|
||||||
|
@echo $(MSG_TARGET)
|
||||||
|
@echo $(MSG_OPTIMIZATION)
|
||||||
|
@echo $(MSG_DEBUG)
|
||||||
|
|
||||||
|
C_OBJECTS_PREFIXED = $(addprefix $(OBJDIR)/, $(C_OBJECTS))
|
||||||
|
CXX_OBJECTS_PREFIXED = $(addprefix $(OBJDIR)/, $(CXX_OBJECTS))
|
||||||
|
ASM_OBJECTS_PREFIXED = $(addprefix $(OBJDIR)/, $(ASM_OBJECTS))
|
||||||
|
ALL_OBJECTS_PREFIXED = $(ASM_OBJECTS_PREFIXED) $(C_OBJECTS_PREFIXED) \
|
||||||
|
$(CXX_OBJECTS_PREFIXED)
|
||||||
|
|
||||||
|
# Useful for debugging the Makefile
|
||||||
|
# Also see: https://www.oreilly.com/openbook/make3/book/ch12.pdf
|
||||||
|
# $$(info $${CXXDEFINES} is [${CXXDEFINES}])
|
||||||
|
# $$(info $${CXXSRC} is [${CXXSRC}])
|
||||||
|
|
||||||
|
# Automatic variables are used here extensively. Some of them
|
||||||
|
# are escaped($$) to suppress immediate evaluation. The most important ones are:
|
||||||
|
# $@: Name of Target (left side of rule)
|
||||||
|
# $<: Name of the first prerequisite (right side of rule)
|
||||||
|
# @^: List of all prerequisite, omitting duplicates
|
||||||
|
# @D: Directory and file-within-directory part of $@
|
||||||
|
|
||||||
|
# Generates binary and displays all build properties
|
||||||
|
# -p with mkdir ignores error and creates directory when needed.
|
||||||
|
|
||||||
|
# SHOW_DETAILS = 1
|
||||||
|
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
$(BINDIR)/$(BINARY_NAME).exe: $(ALL_OBJECTS_PREFIXED)
|
||||||
|
else
|
||||||
|
$(BINDIR)/$(BINARY_NAME).elf: $(ALL_OBJECTS_PREFIXED)
|
||||||
|
endif
|
||||||
|
@echo
|
||||||
|
@echo $(MSG_LINKING) Target $@
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
@$(CXX) $(LDFLAGS) $(LINK_INCLUDES) -o $@ $^ $(LINK_LIBRARIES)
|
||||||
|
ifeq ($(BUILD_FOLDER), mission)
|
||||||
|
# With Link Time Optimization, section size is not available
|
||||||
|
$(SIZE) $@
|
||||||
|
else
|
||||||
|
$(SIZE) $^ $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Build new objects for changed dependencies.
|
||||||
|
$(OBJDIR)/%.o: %.cpp
|
||||||
|
$(OBJDIR)/%.o: %.cpp $(DEPENDDIR)/%.d | $(DEPENDDIR)
|
||||||
|
@echo
|
||||||
|
@echo $(MSG_COMPILING) $<
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
ifdef SHOW_DETAILS
|
||||||
|
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
|
||||||
|
else
|
||||||
|
@$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(OBJDIR)/%.o: %.c
|
||||||
|
$(OBJDIR)/%.o: %.c $(DEPENDDIR)/%.d | $(DEPENDDIR)
|
||||||
|
@echo
|
||||||
|
@echo $(MSG_COMPILING) $<
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
ifdef SHOW_DETAILS
|
||||||
|
$(CC) $(CXXFLAGS) $(CFLAGS) -c -o $@ $<
|
||||||
|
else
|
||||||
|
@$(CC) $(CXXFLAGS) $(CFLAGS) -c -o $@ $<
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(OBJDIR)/%.o: %.S Makefile
|
||||||
|
@echo
|
||||||
|
@echo $(MSG_ASSEMBLING) $<
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
ifdef SHOW_DETAILS
|
||||||
|
$(CC) $(ASFLAGS) -c -o $@ $<
|
||||||
|
else
|
||||||
|
@$(CC) $(ASFLAGS) -c -o $@ $<
|
||||||
|
endif
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Dependency Handling
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Dependency Handling according to following guide:
|
||||||
|
# http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
|
||||||
|
$(DEPENDDIR):
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
DEPENDENCY_RELATIVE = $(CSRC:.c=.d) $(CXXSRC:.cpp=.d)
|
||||||
|
# This is the list of all dependencies
|
||||||
|
DEPFILES = $(addprefix $(DEPENDDIR)/, $(DEPENDENCY_RELATIVE))
|
||||||
|
# Create subdirectories for dependencies
|
||||||
|
$(DEPFILES):
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
# Include all dependencies
|
||||||
|
include $(wildcard $(DEPFILES))
|
||||||
|
|
||||||
|
# .PHONY tells make that these targets aren't files
|
||||||
|
.PHONY: clean sdramCfg release debug all hardclean
|
8
config/FSFWConfig.h
Normal file
8
config/FSFWConfig.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef CONFIG_FSFWCONFIG_H_
|
||||||
|
#define CONFIG_FSFWCONFIG_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* CONFIG_FSFWCONFIG_H_ */
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef CONFIG_TMTC_SUBSYSTEMIDRANGES_H_
|
#ifndef CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_
|
||||||
#define CONFIG_TMTC_SUBSYSTEMIDRANGES_H_
|
#define CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_
|
||||||
|
|
||||||
#include <fsfw/events/fwSubsystemIdRanges.h>
|
#include <fsfw/events/fwSubsystemIdRanges.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@ -31,4 +31,4 @@ enum: uint8_t {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_TMTC_SUBSYSTEMIDRANGES_H_ */
|
#endif /* CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_ */
|
2
fsfw
2
fsfw
@ -1 +1 @@
|
|||||||
Subproject commit 5340b9c58e78f2154fa8291c69bf887c252fe25f
|
Subproject commit 8017c3c4f0c273abe7032613645b59b6f5e3f1da
|
38
hosted/boardconfig/etl_profile.h
Normal file
38
hosted/boardconfig/etl_profile.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
///\file
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
The MIT License(MIT)
|
||||||
|
|
||||||
|
Embedded Template Library.
|
||||||
|
https://github.com/ETLCPP/etl
|
||||||
|
https://www.etlcpp.com
|
||||||
|
|
||||||
|
Copyright(c) 2019 jwellbelove
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files(the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions :
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
******************************************************************************/
|
||||||
|
#ifndef __ETL_PROFILE_H__
|
||||||
|
#define __ETL_PROFILE_H__
|
||||||
|
|
||||||
|
#define ETL_CHECK_PUSH_POP
|
||||||
|
|
||||||
|
#define ETL_CPP11_SUPPORTED 1
|
||||||
|
#define ETL_NO_NULLPTR_SUPPORT 0
|
||||||
|
|
||||||
|
#endif
|
14
hosted/boardconfig/gcov.h
Normal file
14
hosted/boardconfig/gcov.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef LINUX_GCOV_H_
|
||||||
|
#define LINUX_GCOV_H_
|
||||||
|
#include <fsfw/serviceinterface/ServiceInterfaceStream.h>
|
||||||
|
|
||||||
|
#ifdef GCOV
|
||||||
|
extern "C" void __gcov_flush();
|
||||||
|
#else
|
||||||
|
void __gcov_flush() {
|
||||||
|
sif::info << "GCC GCOV: Please supply GCOV=1 in Makefile if "
|
||||||
|
"coverage information is desired.\n" << std::flush;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* LINUX_GCOV_H_ */
|
14
hosted/boardconfig/print.c
Normal file
14
hosted/boardconfig/print.c
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include "print.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void printChar(const char* character, bool errStream) {
|
||||||
|
if(errStream) {
|
||||||
|
putc(*character, stderr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
putc(*character, stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
8
hosted/boardconfig/print.h
Normal file
8
hosted/boardconfig/print.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef HOSTED_BOARDCONFIG_PRINT_H_
|
||||||
|
#define HOSTED_BOARDCONFIG_PRINT_H_
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
void printChar(const char* character, bool errStream);
|
||||||
|
|
||||||
|
#endif /* HOSTED_BOARDCONFIG_PRINT_H_ */
|
9
hosted/config/FSFWConfig.h
Normal file
9
hosted/config/FSFWConfig.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#ifndef CONFIG_FSFWCONFIG_H_
|
||||||
|
#define CONFIG_FSFWCONFIG_H_
|
||||||
|
|
||||||
|
//! When using the newlib nano library, C99 support for stdio facilities
|
||||||
|
//! will not be provided. This define should be set to 1 if this is the case.
|
||||||
|
#define FSFW_NO_C99_IO 0
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* CONFIG_FSFWCONFIG_H_ */
|
14
hosted/config/OBSWConfig.h
Normal file
14
hosted/config/OBSWConfig.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* @brief This file can be used to add preprocessor define for conditional
|
||||||
|
* code inclusion exclusion or various other project constants and
|
||||||
|
* properties in one place.
|
||||||
|
*/
|
||||||
|
#ifndef CONFIG_OBSWCONFIG_H_
|
||||||
|
#define CONFIG_OBSWCONFIG_H_
|
||||||
|
|
||||||
|
#define ADD_TEST_FOLDER 1
|
||||||
|
|
||||||
|
// Define not used yet, PUS stack and TMTC tasks are always started
|
||||||
|
#define ADD_PUS_STACK 1
|
||||||
|
|
||||||
|
#endif /* CONFIG_OBSWCONFIG_H_ */
|
15
hosted/config/config.mk
Normal file
15
hosted/config/config.mk
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/cdatapool/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/ipc/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/objects/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/pollingsequence/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/events/*.cpp)
|
||||||
|
|
||||||
|
INCLUDES += $(CURRENTPATH)
|
||||||
|
INCLUDES += $(CURRENTPATH)/objects
|
||||||
|
INCLUDES += $(CURRENTPATH)/ipc
|
||||||
|
INCLUDES += $(CURRENTPATH)/pollingsequence
|
||||||
|
INCLUDES += $(CURRENTPATH)/returnvalues
|
||||||
|
INCLUDES += $(CURRENTPATH)/tmtc
|
||||||
|
INCLUDES += $(CURRENTPATH)/events
|
||||||
|
INCLUDES += $(CURRENTPATH)/devices
|
||||||
|
INCLUDES += $(CURRENTPATH)/cdatapool
|
34
hosted/config/events/subsystemIdRanges.h
Normal file
34
hosted/config/events/subsystemIdRanges.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#ifndef CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_
|
||||||
|
#define CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_
|
||||||
|
|
||||||
|
#include <fsfw/events/fwSubsystemIdRanges.h>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These IDs are part of the ID for an event thrown by a subsystem.
|
||||||
|
* Numbers 0-80 are reserved for FSFW Subsystem IDs (framework/events/)
|
||||||
|
*/
|
||||||
|
namespace SUBSYSTEM_ID {
|
||||||
|
enum: uint8_t {
|
||||||
|
SUBSYSTE_ID_START = FW_SUBSYSTEM_ID_RANGE,
|
||||||
|
/**
|
||||||
|
* 80-105: PUS Services
|
||||||
|
*/
|
||||||
|
PUS_SERVICE_2 = 82,
|
||||||
|
PUS_SERVICE_3 = 83,
|
||||||
|
PUS_SERVICE_5 = 85,
|
||||||
|
PUS_SERVICE_6 = 86,
|
||||||
|
PUS_SERVICE_8 = 88,
|
||||||
|
PUS_SERVICE_23 = 91,
|
||||||
|
DUMMY_DEVICE = 90,
|
||||||
|
/**
|
||||||
|
* 105-115: AOCS
|
||||||
|
*/
|
||||||
|
GPS_DEVICE = 105,
|
||||||
|
|
||||||
|
SPI_COM_IF = 128,
|
||||||
|
I2C_COM_IF = 138
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_ */
|
11
hosted/config/ipc/MissionMessageTypes.cpp
Normal file
11
hosted/config/ipc/MissionMessageTypes.cpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "MissionMessageTypes.h"
|
||||||
|
#include <fsfw/ipc/CommandMessage.h>
|
||||||
|
|
||||||
|
void messagetypes::clearMissionMessage(CommandMessage* message) {
|
||||||
|
switch(message->getMessageType()) {
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
22
hosted/config/ipc/MissionMessageTypes.h
Normal file
22
hosted/config/ipc/MissionMessageTypes.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef CONFIG_IPC_MISSIONMESSAGETYPES_H_
|
||||||
|
#define CONFIG_IPC_MISSIONMESSAGETYPES_H_
|
||||||
|
|
||||||
|
#include <fsfw/ipc/FwMessageTypes.h>
|
||||||
|
|
||||||
|
class CommandMessage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom command messages are specified here.
|
||||||
|
* Most messages needed to use FSFW are already located in
|
||||||
|
* <fsfw/ipc/FwMessageTypes.h>
|
||||||
|
* @param message Generic Command Message
|
||||||
|
*/
|
||||||
|
namespace messagetypes{
|
||||||
|
enum MESSAGE_TYPE {
|
||||||
|
MISSION_MESSAGE_TYPE_START = FW_MESSAGES_COUNT,
|
||||||
|
};
|
||||||
|
|
||||||
|
void clearMissionMessage(CommandMessage* message);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_IPC_MISSIONMESSAGETYPES_H_ */
|
9
hosted/config/version.h
Normal file
9
hosted/config/version.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#ifndef CONFIG_VERSION_H_
|
||||||
|
#define CONFIG_VERSION_H_
|
||||||
|
|
||||||
|
#define SW_VERSION 0
|
||||||
|
#define SW_SUBVERSION 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* CONFIG_VERSION_H_ */
|
7
hosted/hosted.mk
Normal file
7
hosted/hosted.mk
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# add main and others
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/*.cpp)
|
||||||
|
CSRC += $(wildcard $(CURRENTPATH)/*.c)
|
||||||
|
|
||||||
|
CSRC += $(wildcard $(CURRENTPATH)/boardconfig/*.c)
|
||||||
|
|
||||||
|
INCLUDES += $(CURRENTPATH)/boardconfig
|
31
hosted/main.cpp
Normal file
31
hosted/main.cpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#include <mission/core/InitMission.h>
|
||||||
|
#include <fsfw/tasks/TaskFactory.h>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <version.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is the main program for the hosted build. It can be run for
|
||||||
|
* Linux and Windows.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
std::cout << "-- EIVE OBSW --" << std::endl;
|
||||||
|
std::cout << "-- Compiled for Linux " << " --" << std::endl;
|
||||||
|
std::cout << "-- Software version v" << SW_VERSION << "." << SW_SUBVERSION
|
||||||
|
<< " -- " << std::endl;
|
||||||
|
std::cout << "-- " << __DATE__ << " " << __TIME__ << " --" << std::endl;
|
||||||
|
|
||||||
|
InitMission::initMission();
|
||||||
|
|
||||||
|
for(;;) {
|
||||||
|
// suspend main thread by sleeping it.
|
||||||
|
TaskFactory::delayTask(5000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -22,8 +22,10 @@
|
|||||||
#include <fsfw/pus/Service9TimeManagement.h>
|
#include <fsfw/pus/Service9TimeManagement.h>
|
||||||
#include <fsfw/pus/Service17Test.h>
|
#include <fsfw/pus/Service17Test.h>
|
||||||
#include <fsfw/pus/CService200ModeCommanding.h>
|
#include <fsfw/pus/CService200ModeCommanding.h>
|
||||||
|
#ifdef LINUX
|
||||||
#include <fsfw/osal/linux/TcUnixUdpPollingTask.h>
|
#include <fsfw/osal/linux/TcUnixUdpPollingTask.h>
|
||||||
#include <fsfw/osal/linux/TmTcUnixUdpBridge.h>
|
#include <fsfw/osal/linux/TmTcUnixUdpBridge.h>
|
||||||
|
#endif
|
||||||
#include <fsfw/tmtcpacket/pus/TmPacketStored.h>
|
#include <fsfw/tmtcpacket/pus/TmPacketStored.h>
|
||||||
|
|
||||||
|
|
||||||
@ -92,10 +94,12 @@ void ObjectFactory::produce(){
|
|||||||
|
|
||||||
/* TMTC Reception via UDP socket */
|
/* TMTC Reception via UDP socket */
|
||||||
new TmFunnel(objects::TM_FUNNEL);
|
new TmFunnel(objects::TM_FUNNEL);
|
||||||
|
#ifdef LINUX
|
||||||
new TmTcUnixUdpBridge(objects::UDP_BRIDGE,
|
new TmTcUnixUdpBridge(objects::UDP_BRIDGE,
|
||||||
objects::CCSDS_PACKET_DISTRIBUTOR,
|
objects::CCSDS_PACKET_DISTRIBUTOR,
|
||||||
objects::TM_STORE, objects::TC_STORE);
|
objects::TM_STORE, objects::TC_STORE);
|
||||||
new TcUnixUdpPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE);
|
new TcUnixUdpPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* PUS stack */
|
/* PUS stack */
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
#include "logicalAddresses.h"
|
|
||||||
#include "apid.h"
|
|
||||||
|
|
||||||
#include <test/testtasks/TestTask.h>
|
#include <test/testtasks/TestTask.h>
|
||||||
#include <test/testtasks/PusTcInjector.h>
|
#include <test/testtasks/PusTcInjector.h>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user