build: fetch dependencies for Brite, Click and Openflow

Signed-off-by: Gabriel Ferreira <gabrielcarvfer@gmail.com>
This commit is contained in:
Gabriel Ferreira
2023-02-03 22:28:16 -03:00
parent f16d0b4200
commit 7193cce35b
7 changed files with 116 additions and 2 deletions

View File

@@ -55,6 +55,9 @@ option(NS3_NETANIM "Build netanim" OFF)
option(NS3_ENABLE_BUILD_VERSION "Embed version info into libraries" OFF)
option(NS3_CCACHE "Use Ccache to speed up recompilation" ON)
option(NS3_FAST_LINKERS "Use Mold or LLD to speed up linking if available" ON)
option(NS3_FETCH_OPTIONAL_COMPONENTS
"Fetch Brite, Click and Openflow dependencies" OFF
)
option(NS3_GSL "Build with GSL support" ON)
option(NS3_GTK3 "Build with GTK3 support" ON)
option(NS3_LINK_TIME_OPTIMIZATION "Build with link-time optimization" OFF)

View File

@@ -0,0 +1,75 @@
include(ExternalProject)
ExternalProject_Add(
brite_dep
URL https://code.nsnam.org/BRITE/archive/30338f4f63b9.zip
URL_HASH MD5=b36ecf8f6b5f2cfae936ba1f1bfcff5c
PREFIX brite_dep
BUILD_IN_SOURCE TRUE
CONFIGURE_COMMAND make
BUILD_COMMAND make
INSTALL_COMMAND make install PREFIX=${CMAKE_OUTPUT_DIRECTORY}
)
ExternalProject_Add(
click_dep
GIT_REPOSITORY https://github.com/kohler/click.git
GIT_TAG 9197a594b1c314264935106297aff08d97cbe7ee
PREFIX click_dep
BUILD_IN_SOURCE TRUE
UPDATE_DISCONNECTED TRUE
CONFIGURE_COMMAND ./configure --disable-linuxmodule --enable-nsclick
--enable-wifi --prefix ${CMAKE_OUTPUT_DIRECTORY}
BUILD_COMMAND make -j${NumThreads}
INSTALL_COMMAND make install
)
ExternalProject_Add(
openflow_dep
URL https://code.nsnam.org/openflow/archive/d45e7d184151.zip
URL_HASH MD5=a068cdaec5523586921b2f1f81f10916
PREFIX openflow_dep
BUILD_IN_SOURCE TRUE
CONFIGURE_COMMAND ./waf configure --prefix ${CMAKE_OUTPUT_DIRECTORY}
BUILD_COMMAND ./waf build
INSTALL_COMMAND ./waf install
)
install(
DIRECTORY ${CMAKE_OUTPUT_DIRECTORY}/include/openflow
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
USE_SOURCE_PERMISSIONS
PATTERN "openflow/*"
)
find_file(
BOOST_STATIC_ASSERT
NAMES static_assert.hpp
PATH_SUFFIXES boost
HINTS /usr/local
)
get_filename_component(boost_dir ${BOOST_STATIC_ASSERT} DIRECTORY)
install(
DIRECTORY ${boost_dir}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
USE_SOURCE_PERMISSIONS
PATTERN "boost/*"
)
install(
DIRECTORY ${CMAKE_OUTPUT_DIRECTORY}/lib/
DESTINATION ${CMAKE_INSTALL_LIBDIR}
USE_SOURCE_PERMISSIONS
PATTERN "lib/*"
)
macro(add_dependency_to_optional_modules_dependencies)
add_dependencies(${libbrite} brite_dep)
add_dependencies(${libclick} click_dep)
add_dependencies(${libopenflow} openflow_dep)
if(NOT ${XCODE})
add_dependencies(${libbrite}-obj brite_dep)
add_dependencies(${libclick}-obj click_dep)
add_dependencies(${libopenflow}-obj openflow_dep)
endif()
endmacro()

View File

@@ -141,6 +141,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_OUTPUT_DIRECTORY})
set(CMAKE_HEADER_OUTPUT_DIRECTORY ${CMAKE_OUTPUT_DIRECTORY}/include/ns3)
set(THIRD_PARTY_DIRECTORY ${PROJECT_SOURCE_DIR}/3rd-party)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
link_directories(${CMAKE_OUTPUT_DIRECTORY}/lib)
# Get installation folder default values for each platform and include package
# configuration macro
@@ -1471,6 +1472,12 @@ macro(process_options)
)
add_subdirectory(${netanim_SOURCE_DIR} ${netanim_BINARY_DIR})
endif()
if(${NS3_FETCH_OPTIONAL_COMPONENTS})
include(
build-support/custom-modules/ns3-fetch-optional-modules-dependencies.cmake
)
endif()
endmacro()
function(set_runtime_outputdirectory target_name output_directory target_prefix)

View File

@@ -87,3 +87,7 @@ if(${NS3_MONOLIB})
add_dependencies(timeTraceReport ${lib-ns3-monolib})
endif()
endif()
if(${NS3_FETCH_OPTIONAL_COMPONENTS})
add_dependency_to_optional_modules_dependencies()
endif()

View File

@@ -18,8 +18,10 @@ find_external_library(
if((NOT
brite_FOUND)
OR (NOT
${brite_FOUND})
AND (NOT
${brite_FOUND})
AND (NOT
${NS3_FETCH_OPTIONAL_COMPONENTS})
)
message(
${HIGHLIGHTED_STATUS}
@@ -28,6 +30,12 @@ if((NOT
return()
endif()
if(${NS3_FETCH_OPTIONAL_COMPONENTS})
set(brite_LIBRARIES
brite
)
endif()
# Only process module if include folder and library have been found
include_directories(${brite_INCLUDE_DIRS})
set(NS3_BRITE

View File

@@ -23,6 +23,8 @@ if((NOT
click_FOUND)
AND (NOT
${click_FOUND})
AND (NOT
${NS3_FETCH_OPTIONAL_COMPONENTS})
)
message(
${HIGHLIGHTED_STATUS}
@@ -31,6 +33,13 @@ if((NOT
return()
endif()
if(${NS3_FETCH_OPTIONAL_COMPONENTS})
set(click_LIBRARIES
click
nsclick
)
endif()
include_directories(${click_INCLUDE_DIRS})
set(NS3_CLICK
"ON"

View File

@@ -20,6 +20,8 @@ if((NOT
openflow_FOUND)
AND (NOT
${openflow_FOUND})
AND (NOT
${NS3_FETCH_OPTIONAL_COMPONENTS})
)
message(
${HIGHLIGHTED_STATUS}
@@ -28,6 +30,12 @@ if((NOT
return()
endif()
if(${NS3_FETCH_OPTIONAL_COMPONENTS})
set(openflow_LIBRARIES
openflow
)
endif()
check_include_file_cxx(
boost/static_assert.hpp
BOOST_STATIC_ASSERT