Hi Sami,
Thought it would be a lot of trouble (if even possible), but it is actually doable and not that hard. Not properly tested.
```
Index: build-support/custom-modules/ns3-executables.cmake
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-support/custom-modules/ns3-executables.cmake b/build-support/custom-modules/ns3-executables.cmake
--- a/build-support/custom-modules/ns3-executables.cmake
(revision f6ffa1e0fddad897d4c82b4cc999e2c6262768ce)
+++ b/build-support/custom-modules/ns3-executables.cmake
(date 1732801860137)
@@ -137,6 +137,11 @@
)
endif()
+ # Handle ns-3-external-contrib/module (which will have output binaries mapped to contrib/module)
+ if (${BEXEC_EXECUTABLE_DIRECTORY_PATH} MATCHES "ns-3-external-contrib")
+ string(REGEX REPLACE ".*ns-3-external-contrib" "${PROJECT_SOURCE_DIR}/contrib" BEXEC_EXECUTABLE_DIRECTORY_PATH "${BEXEC_EXECUTABLE_DIRECTORY_PATH}")
+ endif()
+
set_runtime_outputdirectory(
"${BEXEC_EXECNAME}" "${BEXEC_EXECUTABLE_DIRECTORY_PATH}/"
"${BEXEC_EXECNAME_PREFIX}"
Index: CMakeLists.txt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
(revision f6ffa1e0fddad897d4c82b4cc999e2c6262768ce)
+++ b/CMakeLists.txt
(date 1732801335237)
@@ -121,6 +121,12 @@
# Scan contribution libraries
subdirlist(contrib_libs_to_build ${CMAKE_CURRENT_SOURCE_DIR}/contrib)
+# Scan for additional contribution libraries OUTSIDE the ns-3 source directory, in the ns-3-external-contrib directory
+if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../ns-3-external-contrib)
+ subdirlist(external_contrib_libs_to_build ${CMAKE_CURRENT_SOURCE_DIR}/../ns-3-external-contrib)
+ set(contrib_libs_to_build ${contrib_libs_to_build} ${external_contrib_libs_to_build})
+endif()
+
# Before filtering, we need to load settings from .ns3rc
parse_ns3rc(
ns3rc_enabled_modules ns3rc_disabled_modules ns3rc_examples_enabled
Index: build-support/custom-modules/ns3-module-macros.cmake
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-support/custom-modules/ns3-module-macros.cmake b/build-support/custom-modules/ns3-module-macros.cmake
--- a/build-support/custom-modules/ns3-module-macros.cmake
(revision f6ffa1e0fddad897d4c82b4cc999e2c6262768ce)
+++ b/build-support/custom-modules/ns3-module-macros.cmake
(date 1732801860137)
@@ -356,10 +356,11 @@
set(multiValueArgs SOURCE_FILES HEADER_FILES LIBRARIES_TO_LINK)
cmake_parse_arguments("BLIB_EXAMPLE" "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+ # cmake-format: on
+
# Get path src/module or contrib/module
string(REPLACE "${PROJECT_SOURCE_DIR}/" "" FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
- # cmake-format: on
check_for_missing_libraries(
missing_dependencies "${BLIB_EXAMPLE_LIBRARIES_TO_LINK}"
)
Index: build-support/custom-modules/ns3-contributions.cmake
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-support/custom-modules/ns3-contributions.cmake b/build-support/custom-modules/ns3-contributions.cmake
--- a/build-support/custom-modules/ns3-contributions.cmake
(revision f6ffa1e0fddad897d4c82b4cc999e2c6262768ce)
+++ b/build-support/custom-modules/ns3-contributions.cmake
(date 1732800285178)
@@ -15,9 +15,13 @@
# Add contribution folders to be built
foreach(contribname ${contribution_list})
set(folder "contrib/${contribname}")
+ set(external_folder "../ns-3-external-contrib/${contribname}")
if(EXISTS ${PROJECT_SOURCE_DIR}/${folder}/CMakeLists.txt)
message(STATUS "Processing ${folder}")
add_subdirectory(${folder})
+ elseif(EXISTS ${PROJECT_SOURCE_DIR}/${external_folder}/CMakeLists.txt)
+ message(STATUS "Processing ${external_folder}")
+ add_subdirectory(${external_folder} ${PROJECT_BINARY_DIR}/contrib/${contribname})
else()
message(${HIGHLIGHTED_STATUS}
"Skipping ${folder} : it does not contain a CMakeLists.txt file"
```