Skip to content

Commit bfb366e

Browse files
committed
Cross platform test module build.
1 parent bbf145a commit bfb366e

File tree

6 files changed

+129
-8
lines changed

6 files changed

+129
-8
lines changed

tests/CMakeLists.txt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ if (NOT GTest_FOUND)
2020
FetchContent_MakeAvailable(googletest)
2121
endif()
2222

23+
#=============================================================================#
24+
# Test Module
25+
#=============================================================================#
26+
27+
add_subdirectory(test_module)
28+
2329
#=============================================================================#
2430
# Test Executable
2531
#=============================================================================#
@@ -60,13 +66,5 @@ if(MSVC)
6066
)
6167
endif()
6268

63-
add_custom_command(
64-
TARGET flow_core_tests
65-
POST_BUILD
66-
COMMAND ${CMAKE_COMMAND} -E copy
67-
"${CMAKE_CURRENT_SOURCE_DIR}/test_module.flowmod"
68-
"$<TARGET_FILE_DIR:flow_core_tests>/test_module.flowmod"
69-
)
70-
7169
include(GoogleTest)
7270
gtest_discover_tests(flow_core_tests)

tests/test_module.flowmod

-220 KB
Binary file not shown.

tests/test_module/CMakeLists.txt

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
3+
project(test_module VERSION 1.0.0 LANGUAGES CXX)
4+
5+
set(CMAKE_CXX_STANDARD 20)
6+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
7+
8+
if(APPLE)
9+
enable_language(OBJC)
10+
endif()
11+
12+
add_library(${PROJECT_NAME} SHARED src/register.cpp)
13+
target_compile_definitions(${PROJECT_NAME} PRIVATE TEST_MODULE_EXPORT)
14+
15+
if(MSVC)
16+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
17+
target_compile_options(${PROJECT_NAME} PRIVATE /W4)
18+
endif()
19+
20+
add_dependencies(${PROJECT_NAME} flow-core)
21+
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
22+
target_link_libraries(${PROJECT_NAME} PUBLIC flow-core)
23+
24+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
25+
set(MODULE_BINARY_DIR "linux")
26+
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # macOS uses Darwin as its kernel name
27+
set(MODULE_BINARY_DIR "macos")
28+
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
29+
set(MODULE_BINARY_DIR "windows")
30+
else()
31+
message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}")
32+
endif()
33+
34+
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(x86_64|amd64)$")
35+
set(MODULE_BINARY_DIR "${MODULE_BINARY_DIR}/x86_64")
36+
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(arm64|aarch64)$")
37+
set(MODULE_BINARY_DIR "${MODULE_BINARY_DIR}/arm64")
38+
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(i386|i686)$")
39+
set(MODULE_BINARY_DIR "${MODULE_BINARY_DIR}/x86")
40+
else()
41+
message(FATAL_ERROR "Unsupported architecture: ${CMAKE_SYSTEM_PROCESSOR}")
42+
endif()
43+
44+
45+
get_filename_component(lib_file $<TARGET_FILE:${PROJECT_NAME}> NAME)
46+
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
47+
COMMAND ${CMAKE_COMMAND} -E copy
48+
$<TARGET_FILE:${PROJECT_NAME}>
49+
$<TARGET_FILE_DIR:${PROJECT_NAME}>/${PROJECT_NAME}/${MODULE_BINARY_DIR}/${PROJECT_NAME}.${CMAKE_SHARED_LIBRARY_SUFFIX}
50+
)
51+
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
52+
COMMAND ${CMAKE_COMMAND} -E copy
53+
${CMAKE_CURRENT_SOURCE_DIR}/module.json
54+
$<TARGET_FILE_DIR:${PROJECT_NAME}>/${PROJECT_NAME}/module.json
55+
)
56+
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
57+
COMMAND ${CMAKE_COMMAND} -E copy
58+
${CMAKE_CURRENT_SOURCE_DIR}/README.md
59+
$<TARGET_FILE_DIR:${PROJECT_NAME}>/${PROJECT_NAME}/README.md
60+
)
61+
62+
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
63+
COMMAND ${CMAKE_COMMAND} -E tar cfv ${CMAKE_CURRENT_BINARY_DIR}/../${PROJECT_NAME}.flowmod --format=zip ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
64+
)

tests/test_module/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Test Flow Module
2+
3+
This repository contains a simple test module for the [Flow](https://github.com/InFlowStructure/flow-core) framework.
4+
It is intended for demonstration and testing purposes only.
5+
6+
## Features
7+
8+
- Example Flow module structure
9+
- Placeholder code for integration and testing
10+
- No production functionality
11+
12+
## License
13+
14+
This project is licensed under the MIT License.

tests/test_module/module.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"Author": "Cisco Systems, Inc.",
3+
"Description": "A test module.",
4+
"Name": "test_module",
5+
"Version": "0.0.0"
6+
}

tests/test_module/src/register.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include <flow/core/Node.hpp>
2+
#include <flow/core/NodeFactory.hpp>
3+
4+
#ifdef FLOW_WINDOWS
5+
#ifdef TEST_MODULE_EXPORT
6+
#define TEST_MODULE_API __declspec(dllexport) FLOW_CORE_CALL
7+
#else
8+
#define TEST_MODULE_API __declspec(dllimport) FLOW_CORE_CALL
9+
#endif
10+
#else
11+
#define TEST_MODULE_API
12+
#endif
13+
14+
struct TestNode : public flow::Node
15+
{
16+
explicit TestNode(const std::string& uuid_str, const std::string& name, std::shared_ptr<flow::Env> env)
17+
: Node(uuid_str, flow::TypeName_v<TestNode>, name, std::move(env))
18+
19+
{
20+
}
21+
22+
virtual void Compute() override { throw std::runtime_error("Computed TestNode successfully!"); }
23+
};
24+
25+
extern "C"
26+
{
27+
namespace test_flow
28+
{
29+
void TEST_MODULE_API RegisterModule(std::shared_ptr<flow::NodeFactory> factory)
30+
{
31+
factory->RegisterNodeClass<TestNode>("test", "Test");
32+
}
33+
34+
void TEST_MODULE_API UnregisterModule(std::shared_ptr<flow::NodeFactory> factory)
35+
{
36+
factory->UnregisterNodeClass<TestNode>("test");
37+
}
38+
} // namespace test_flow
39+
}

0 commit comments

Comments
 (0)