Skip to content

Commit 378a7a3

Browse files
authored
Initial refactor to allow implementations as object libraries (#3642)
* Initial refactor to allow implementations as object libraries * Initial review fixes * Fixing linux builds * Formatting * sp * Removing commented-out code * Fixing UT_AUTO_HELPER regression * CI fixes * Review fixes
1 parent f440784 commit 378a7a3

46 files changed

Lines changed: 1254 additions & 677 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Fw/Fpy/StatementArgBuffer.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef FW_STATEMENT_BUFFER_HPP
22
#define FW_STATEMENT_BUFFER_HPP
33

4-
#include <config/FpConfig.hpp>
4+
#include <Fw/FPrimeBasicTypes.hpp>
55
#include <Fw/Types/Serializable.hpp>
66
#include <Fw/Types/SerIds.hpp>
77

Fw/Types/CMakeLists.txt

Lines changed: 49 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,60 @@
11
####
22
# F prime CMakeLists.txt:
3-
#
4-
# SOURCE_FILES: combined list of source and autocoding files
5-
# MOD_DEPS: (optional) module dependencies
6-
#
7-
# Note: using PROJECT_NAME as EXECUTABLE_NAME
83
####
9-
10-
set(SOURCE_FILES
11-
"${CMAKE_CURRENT_LIST_DIR}/Assert.cpp"
12-
"${CMAKE_CURRENT_LIST_DIR}/MallocAllocator.cpp"
13-
"${CMAKE_CURRENT_LIST_DIR}/MemAllocator.cpp"
14-
"${CMAKE_CURRENT_LIST_DIR}/PolyType.cpp"
15-
"${CMAKE_CURRENT_LIST_DIR}/SerialBuffer.cpp"
16-
"${CMAKE_CURRENT_LIST_DIR}/Serializable.cpp"
17-
"${CMAKE_CURRENT_LIST_DIR}/StringBase.cpp"
18-
"${CMAKE_CURRENT_LIST_DIR}/StringUtils.cpp"
19-
"${CMAKE_CURRENT_LIST_DIR}/StringToNumber.cpp"
20-
"${CMAKE_CURRENT_LIST_DIR}/Types.fpp"
4+
register_fprime_module(
5+
Fw_Types
6+
SOURCES
7+
"${CMAKE_CURRENT_LIST_DIR}/Assert.cpp"
8+
"${CMAKE_CURRENT_LIST_DIR}/MallocAllocator.cpp"
9+
"${CMAKE_CURRENT_LIST_DIR}/MemAllocator.cpp"
10+
"${CMAKE_CURRENT_LIST_DIR}/PolyType.cpp"
11+
"${CMAKE_CURRENT_LIST_DIR}/SerialBuffer.cpp"
12+
"${CMAKE_CURRENT_LIST_DIR}/Serializable.cpp"
13+
"${CMAKE_CURRENT_LIST_DIR}/StringBase.cpp"
14+
"${CMAKE_CURRENT_LIST_DIR}/StringUtils.cpp"
15+
"${CMAKE_CURRENT_LIST_DIR}/StringToNumber.cpp"
16+
AUTOCODER_INPUTS
17+
"${CMAKE_CURRENT_LIST_DIR}/Types.fpp"
18+
DEPENDS
19+
__fprime_config # Only module that should ever list __fprime_config in DEPENDS. Use Fw_Types instead.
20+
REQUIRES_IMPLEMENTATIONS
21+
Fw_StringFormat
2122
)
22-
set(MOD_DEPS
23-
__fprime_config
23+
24+
register_fprime_implementation(
25+
Fw_StringFormat_snprintf
26+
IMPLEMENTS
27+
Fw_StringFormat
28+
DEPENDS
29+
Fw_Types
30+
SOURCES
31+
"${CMAKE_CURRENT_LIST_DIR}/snprintf_format.cpp"
2432
)
25-
register_fprime_module()
26-
require_fprime_implementation("Fw_StringFormat")
33+
2734
### UTs ###
28-
set(UT_SOURCE_FILES
29-
"${CMAKE_CURRENT_LIST_DIR}/test/ut/ExternalSerializeBufferTest.cpp"
30-
"${CMAKE_CURRENT_LIST_DIR}/test/ut/AssertTypesTest.cpp"
31-
"${CMAKE_CURRENT_LIST_DIR}/test/ut/TypesTest.cpp"
32-
)
33-
set(UT_MOD_DEPS
34-
Os
35+
register_fprime_ut(
36+
Fw_Types_ut_exe
37+
SOURCES
38+
"${CMAKE_CURRENT_LIST_DIR}/test/ut/ExternalSerializeBufferTest.cpp"
39+
"${CMAKE_CURRENT_LIST_DIR}/test/ut/AssertTypesTest.cpp"
40+
"${CMAKE_CURRENT_LIST_DIR}/test/ut/TypesTest.cpp"
41+
DEPENDS
42+
Os
3543
)
36-
register_fprime_ut()
37-
set (UT_TARGET_NAME "${FPRIME_CURRENT_MODULE}_ut_exe")
38-
if (TARGET "${UT_TARGET_NAME}")
39-
target_compile_options("${UT_TARGET_NAME}" PRIVATE -Wno-conversion)
44+
if (TARGET Fw_Types_ut_exe)
45+
target_compile_options(Fw_Types_ut_exe PRIVATE -Wno-conversion)
4046
endif()
4147

48+
register_fprime_ut(
49+
Fw_StringFormat_snprintf_ut_exe
50+
SOURCES
51+
"${CMAKE_CURRENT_LIST_DIR}/test/ut/SnPrintfFormatTest.cpp"
52+
DEPENDS
53+
Fw_Types
54+
CHOOSES_IMPLEMENTATIONS
55+
Fw_StringFormat_snprintf
56+
)
57+
58+
4259
# Non-test directory
4360
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/GTest")
44-
45-
# Create an empty interface library and use it to register an implementation
46-
add_library(snprintf-format ${VALID_EMPTY})
47-
# Must suppress empty library warnings
48-
target_compile_options(snprintf-format PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Wno-unused-const-variable>)
49-
register_fprime_implementation(Fw_StringFormat snprintf-format "${CMAKE_CURRENT_LIST_DIR}/snprintf_format.cpp")

Fw/Types/format.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ enum class FormatStatus {
3939
//! \param formatString: format string to fill
4040
//! \param ...: variable arguments inputs
4141
//! \return: SUCCESS on successful formatting, OVERFLOWED on overflow, and something else on any error
42-
FormatStatus stringFormat(char* destination, const FwSizeType maximumSize, const char* formatString, ...);
42+
FormatStatus stringFormat(char* destination, const FwSizeType maximumSize, const char* formatString, ...);
4343

4444
//! \brief format a c-string
4545
//!
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#include <gtest/gtest.h>
2+
#include "Fw/Types/format.hpp"
3+
#include <cstdio>
4+
5+
TEST(Nominal, snprintf_format) {
6+
char buffer_test[100];
7+
char buffer_real[100];
8+
const char* test_format_string = "Hello %s";
9+
const char* test_string = "World";
10+
11+
Fw::FormatStatus status = Fw::stringFormat(buffer_test, sizeof(buffer_test), test_format_string, test_string);
12+
EXPECT_EQ(status, Fw::FormatStatus::SUCCESS);
13+
snprintf(buffer_real, sizeof(buffer_real), test_format_string, test_string);
14+
EXPECT_STREQ(buffer_test, buffer_real);
15+
}
16+
17+
int main(int argc, char** argv) {
18+
::testing::InitGoogleTest(&argc, argv);
19+
return RUN_ALL_TESTS();
20+
}

Os/CMakeLists.txt

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,28 @@
1818
function(add_named_os_module NAMES)
1919
# Get first element of list
2020
list(GET NAMES 0 FIRST_ITEM)
21-
set(OS_MODULE_NAME "Os_${FIRST_ITEM}_Common")
21+
set(OS_MODULE_NAME "Os_${FIRST_ITEM}")
2222
# Clear variables
23-
set(SOURCE_FILES)
24-
set(SOURCE_HEADERS)
23+
set(SOURCE_INPUTS)
24+
set(HEADER_INPUTS)
2525
# Add files for each name supplied
2626
foreach (NAME IN LISTS NAMES)
27-
list(APPEND SOURCE_FILES "${CMAKE_CURRENT_LIST_DIR}/${NAME}.cpp")
28-
list(APPEND SOURCE_HEADERS "${CMAKE_CURRENT_LIST_DIR}/${NAME}.hpp")
27+
list(APPEND SOURCE_INPUTS "${CMAKE_CURRENT_LIST_DIR}/${NAME}.cpp")
28+
list(APPEND HEADER_INPUTS "${CMAKE_CURRENT_LIST_DIR}/${NAME}.hpp")
2929
endforeach ()
3030
# Set up module
31-
set(MOD_DEPS Fw_Types ${ARGN})
32-
require_fprime_implementation("Os_${FIRST_ITEM}")
33-
register_fprime_module("${OS_MODULE_NAME}")
34-
add_dependencies(Os "${OS_MODULE_NAME}")
35-
target_link_libraries(Os PUBLIC "${OS_MODULE_NAME}")
31+
register_fprime_module(
32+
"${OS_MODULE_NAME}"
33+
REQUIRES_IMPLEMENTATIONS
34+
"Os_${FIRST_ITEM}"
35+
SOURCES
36+
${SOURCE_INPUTS}
37+
HEADERS
38+
${HEADER_INPUTS}
39+
DEPENDS
40+
Fw_Types ${ARGN}
41+
)
42+
fprime_target_dependencies(Os PUBLIC "${OS_MODULE_NAME}")
3643
endfunction()
3744

3845
####
@@ -66,36 +73,35 @@ function(add_fprime_supplied_os_module NAMES SUFFIX)
6673
# Setup variables
6774
set(OS_MODULE_NAME "Os_${FIRST_ITEM}_${SUFFIX}")
6875
# Clear variables
69-
set(SOURCE_FILES)
70-
set(SOURCE_HEADERS)
76+
set(SOURCE_INPUTS)
77+
set(HEADERS_INPUTS)
7178
# Add files for each name supplied
7279
foreach (NAME IN LISTS NAMES)
73-
list(APPEND SOURCE_FILES "${CMAKE_CURRENT_LIST_DIR}/${NAME}.cpp")
74-
list(APPEND SOURCE_HEADERS "${CMAKE_CURRENT_LIST_DIR}/${NAME}.hpp")
80+
list(APPEND SOURCE_INPUTS "${CMAKE_CURRENT_LIST_DIR}/${NAME}.cpp")
81+
list(APPEND HEADERS_INPUTS "${CMAKE_CURRENT_LIST_DIR}/${NAME}.hpp")
7582
endforeach ()
7683
# Set up module
77-
set(MOD_DEPS "Os_${FIRST_ITEM}_Common" ${ARGN})
78-
register_fprime_module("${OS_MODULE_NAME}")
79-
register_fprime_implementation("Os_${FIRST_ITEM}" "${OS_MODULE_NAME}" "${CMAKE_CURRENT_LIST_DIR}/Default${FIRST_ITEM}.cpp")
80-
endfunction()
81-
82-
####
83-
# WARNING: not for use outside of fprime/Os
84-
#
85-
# Adds a test for OSAL layer. Helper to allow multiple tests per file.
86-
#
87-
# NAME: Name of test
88-
# UT_SOURCE_FILES: list of source files
89-
# IMPLEMENTATION_PAIRS: a list of pairs of implementation choices. e.g. "Os_File\;Os_File_Posix;Os_Task\;Os_Task_Stub"
90-
# pairs are represented with internal escaped list separators.
91-
# ARGN: extra MOD_DEPS to add
92-
####
93-
function(add_fprime_os_test NAME UT_SOURCE_FILES IMPLEMENTATION_PAIRS)
94-
set(UT_MOD_DEPS Os STest ${ARGN})
95-
foreach (PAIR IN LISTS IMPLEMENTATION_PAIRS)
96-
choose_fprime_implementation(${PAIR})
97-
endforeach ()
98-
register_fprime_ut("${NAME}")
84+
register_fprime_module(
85+
"${OS_MODULE_NAME}_Implementation"
86+
SOURCES
87+
${SOURCE_INPUTS}
88+
HEADERS
89+
${HEADER_INPUTS}
90+
DEPENDS
91+
Fw_Types
92+
"Os_${FIRST_ITEM}"
93+
${ARGN}
94+
)
95+
register_fprime_implementation(
96+
"${OS_MODULE_NAME}"
97+
SOURCES
98+
"${CMAKE_CURRENT_LIST_DIR}/Default${FIRST_ITEM}.cpp"
99+
IMPLEMENTS
100+
"Os_${FIRST_ITEM}"
101+
DEPENDS
102+
Fw_Types
103+
"${OS_MODULE_NAME}_Implementation"
104+
)
99105
endfunction()
100106

101107
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Models")
@@ -105,23 +111,24 @@ add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Generic")
105111
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Linux")
106112
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Darwin")
107113

108-
# Basic source files used in every OSAL layer. Contains common code and helpers.
109-
set(SOURCE_FILES
110-
"${CMAKE_CURRENT_LIST_DIR}/ValidateFileCommon.cpp"
111-
"${CMAKE_CURRENT_LIST_DIR}/ValidatedFile.cpp"
112-
"${CMAKE_CURRENT_LIST_DIR}/IntervalTimer.cpp"
113-
"${CMAKE_CURRENT_LIST_DIR}/Types.fpp"
114-
"${CMAKE_CURRENT_LIST_DIR}/Os.cpp"
115-
)
116-
set(SOURCE_HEADERS
117-
"${CMAKE_CURRENT_LIST_DIR}/ValidatedFile.hpp"
118-
"${CMAKE_CURRENT_LIST_DIR}/Os.hpp"
114+
register_fprime_module(
115+
Os
116+
AUTOCODER_INPUTS
117+
"${CMAKE_CURRENT_LIST_DIR}/Types.fpp"
118+
SOURCES
119+
"${CMAKE_CURRENT_LIST_DIR}/ValidateFileCommon.cpp"
120+
"${CMAKE_CURRENT_LIST_DIR}/ValidatedFile.cpp"
121+
"${CMAKE_CURRENT_LIST_DIR}/IntervalTimer.cpp"
122+
"${CMAKE_CURRENT_LIST_DIR}/Os.cpp"
123+
HEADERS
124+
"${CMAKE_CURRENT_LIST_DIR}/ValidatedFile.hpp"
125+
"${CMAKE_CURRENT_LIST_DIR}/Os.hpp"
126+
DEPENDS
127+
Fw_Types
119128
)
120-
set(MOD_DEPS Fw_Types)
121-
register_fprime_module()
122129

123130
add_named_os_module(Console Fw_Logger)
124-
add_named_os_module("File;FileSystem;Directory" Utils/Hash)
131+
add_named_os_module("File;FileSystem;Directory" Utils_Hash)
125132
add_named_os_module(Task ${CMAKE_THREAD_LIBS_INIT})
126133
add_named_os_module("Mutex;Condition")
127134
add_named_os_module(Queue)

Os/Darwin/CMakeLists.txt

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,30 @@ register_os_implementation(Memory Darwin)
1414
# -----------------------------------------
1515
### Os/Darwin/Cpu Section
1616
# -----------------------------------------
17-
set(UT_SOURCE_FILES
17+
register_fprime_ut(
18+
DarwinCpuTest
19+
SOURCES
1820
"${CMAKE_CURRENT_LIST_DIR}/../test/ut/cpu/CommonCpuTests.cpp"
1921
"${CMAKE_CURRENT_LIST_DIR}/test/ut/DarwinCpuTests.cpp"
22+
CHOOSES_IMPLEMENTATIONS
23+
Os_Cpu_Darwin
24+
DEPENDS
25+
Fw_Types
26+
Fw_Time
27+
STest
2028
)
21-
add_fprime_os_test(DarwinCpuTest "${UT_SOURCE_FILES}" "Os_Cpu\;Os_Cpu_Darwin")
2229
# -----------------------------------------
2330
### Os/Darwin/Memory Section
2431
# -----------------------------------------
25-
set(UT_SOURCE_FILES
32+
register_fprime_ut(
33+
DarwinMemoryTest
34+
SOURCES
2635
"${CMAKE_CURRENT_LIST_DIR}/../test/ut/memory/CommonMemoryTests.cpp"
2736
"${CMAKE_CURRENT_LIST_DIR}/test/ut/DarwinMemoryTests.cpp"
28-
)
29-
add_fprime_os_test(DarwinMemoryTest "${UT_SOURCE_FILES}" "Os_Cpu\;Os_Memory_Darwin")
37+
CHOOSES_IMPLEMENTATIONS
38+
Os_Memory_Darwin
39+
DEPENDS
40+
Fw_Types
41+
Fw_Time
42+
STest
43+
)

Os/Generic/CMakeLists.txt

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,41 @@ add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Types")
22
add_custom_target("${FPRIME_CURRENT_MODULE}")
33

44
#### Os/Generic/Queue Section ####
5-
set(SOURCE_FILES
6-
"${CMAKE_CURRENT_LIST_DIR}/PriorityQueue.cpp"
7-
)
8-
set(MOD_DEPS
5+
register_fprime_module(
6+
Os_Generic_PriorityQueue_Implementation
7+
SOURCES
8+
"${CMAKE_CURRENT_LIST_DIR}/PriorityQueue.cpp"
9+
HEADERS
10+
"${CMAKE_CURRENT_LIST_DIR}/PriorityQueue.hpp"
11+
DEPENDS
12+
Fw_Types
913
Os_Generic_Types
1014
)
11-
set(HEADER_FILES
12-
"${CMAKE_CURRENT_LIST_DIR}/PriorityQueue.hpp"
15+
register_fprime_implementation(
16+
Os_Generic_PriorityQueue
17+
SOURCES
18+
"${CMAKE_CURRENT_LIST_DIR}/DefaultPriorityQueue.cpp"
19+
IMPLEMENTS
20+
Os_Queue
21+
DEPENDS
22+
Fw_Types
23+
Os_Generic_PriorityQueue_Implementation
1324
)
14-
register_fprime_module(Os_Generic_PriorityQueue)
15-
register_fprime_implementation(Os/Queue Os_Generic_PriorityQueue "${CMAKE_CURRENT_LIST_DIR}/DefaultPriorityQueue.cpp")
1625

17-
set(UT_SOURCE_FILES
18-
"${CMAKE_CURRENT_LIST_DIR}/test/ut/PriorityQueueTests.cpp"
19-
"${CMAKE_CURRENT_LIST_DIR}/../test/ut/queue/CommonTests.cpp"
20-
"${CMAKE_CURRENT_LIST_DIR}/../test/ut/queue/QueueRules.cpp"
21-
)
22-
set(UT_MOD_DEPS
23-
Fw_Time
24-
Os
25-
STest
26+
register_fprime_ut(
27+
PriorityQueueTest
28+
SOURCES
29+
"${CMAKE_CURRENT_LIST_DIR}/test/ut/PriorityQueueTests.cpp"
30+
"${CMAKE_CURRENT_LIST_DIR}/../test/ut/queue/CommonTests.cpp"
31+
"${CMAKE_CURRENT_LIST_DIR}/../test/ut/queue/QueueRules.cpp"
32+
DEPENDS
33+
Fw_Types
34+
Fw_Time
35+
Os
36+
STest
37+
CHOOSES_IMPLEMENTATIONS
38+
Os_Generic_PriorityQueue
2639
)
27-
choose_fprime_implementation(Os/Queue Os_Generic_PriorityQueue)
28-
register_fprime_ut(PriorityQueueTest)
2940
if (TARGET PriorityQueueTest)
3041
target_compile_options(PriorityQueueTest PRIVATE -Wno-conversion)
3142
target_include_directories(PriorityQueueTest PRIVATE "${CMAKE_CURRENT_LIST_DIR}/test/ut")

0 commit comments

Comments
 (0)