Skip to content

Commit e11d7f7

Browse files
committed
Add root CMakeLists.txt file
1 parent f130899 commit e11d7f7

File tree

3 files changed

+174
-5
lines changed

3 files changed

+174
-5
lines changed

CMakeLists.txt

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
cmake_minimum_required(VERSION 3.25) # ipp6 is using 3.28
2+
3+
# Version information
4+
# Read makefiles/version.mk file
5+
file(READ ${CMAKE_SOURCE_DIR}/makefiles/version.mk VERSION_CONTENT)
6+
string(REGEX REPLACE ".*NCCL_MAJOR[ ]*:=[ ]*([0-9]+).*" "\\1" NCCL_MAJOR "${VERSION_CONTENT}")
7+
string(REGEX REPLACE ".*NCCL_MINOR[ ]*:=[ ]*([0-9]+).*" "\\1" NCCL_MINOR "${VERSION_CONTENT}")
8+
string(REGEX REPLACE ".*NCCL_PATCH[ ]*:=[ ]*([0-9]+).*" "\\1" NCCL_PATCH "${VERSION_CONTENT}")
9+
string(REGEX REPLACE ".*NCCL_SUFFIX[ ]*:=[ ]*([a-zA-Z0-9]*).*" "\\1" NCCL_SUFFIX "${VERSION_CONTENT}")
10+
string(REGEX REPLACE ".*PKG_REVISION[ ]*:=[ ]*([0-9]+).*" "\\1" PKG_REVISION "${VERSION_CONTENT}")
11+
math(EXPR NCCL_VERSION_CODE "(${NCCL_MAJOR} * 10000) + (${NCCL_MINOR} * 100) + ${NCCL_PATCH}")
12+
13+
# Make version information available to C++ source files
14+
add_compile_definitions(
15+
NCCL_USE_CMAKE
16+
NCCL_MAJOR=${NCCL_MAJOR}
17+
NCCL_MINOR=${NCCL_MINOR}
18+
NCCL_PATCH=${NCCL_PATCH}
19+
NCCL_VERSION_CODE=${NCCL_VERSION_CODE}
20+
)
21+
22+
set(ENV{NCCL_USE_CMAKE} "1")
23+
24+
project(NCCL VERSION ${NCCL_MAJOR}.${NCCL_MINOR}.${NCCL_PATCH}
25+
LANGUAGES CUDA CXX C)
26+
27+
# Make CMAKE_BUILD_TYPE to release by default if not set
28+
if(NOT CMAKE_BUILD_TYPE)
29+
set(CMAKE_BUILD_TYPE "Release")
30+
endif()
31+
32+
option(VERBOSE "Enable verbose output" OFF)
33+
option(KEEP "Keep intermediate files" OFF)
34+
option(DEBUG "Enable debug build" OFF)
35+
option(ASAN "Enable Address Sanitizer" OFF)
36+
option(UBSAN "Enable Undefined Behavior Sanitizer" OFF)
37+
option(TRACE "Enable tracing" OFF)
38+
option(WERROR "Treat warnings as errors" OFF)
39+
option(PROFAPI "Enable profiling API" ON)
40+
option(NVTX "Enable NVTX" ON)
41+
option(RDMA_CORE "Enable RDMA core" OFF)
42+
option(NET_PROFILER "Enable network profiler" OFF)
43+
option(MLX5DV "Enable MLX5DV" OFF)
44+
option(MAX_EXT_NET_PLUGINS "Maximum external network plugins" 0)
45+
46+
find_package(CUDAToolkit REQUIRED)
47+
48+
# CUDA version detection
49+
string(REGEX MATCH "([0-9]+\\.[0-9]+)" CUDA_VERSION "${CUDAToolkit_VERSION}")
50+
51+
# Extract major and minor version numbers
52+
string(REGEX MATCH "([0-9]+)" CUDA_MAJOR "${CUDA_VERSION}")
53+
string(REGEX MATCH "([0-9]+)$" CUDA_MINOR "${CUDA_VERSION}")
54+
string(REGEX REPLACE ".*\\.([0-9]+)$" "\\1" CUDA_MINOR "${CUDA_VERSION}")
55+
56+
# Add CUDA version definitions after find_package
57+
add_compile_definitions(
58+
CUDA_MAJOR=${CUDA_MAJOR}
59+
CUDA_MINOR=${CUDA_MINOR}
60+
)
61+
62+
# CUDA architecture flags
63+
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES OR CMAKE_CUDA_ARCHITECTURES STREQUAL "")
64+
message(STATUS "CMAKE_CUDA_ARCHITECTURES not defined or empty, setting default values based on CUDA version")
65+
66+
if(${CUDA_MAJOR} LESS 9)
67+
set(CMAKE_CUDA_ARCHITECTURES "35;50;60;61")
68+
elseif(${CUDA_MAJOR} EQUAL 9)
69+
set(CMAKE_CUDA_ARCHITECTURES "35;50;60;61;70")
70+
elseif(${CUDA_MAJOR} EQUAL 10)
71+
set(CMAKE_CUDA_ARCHITECTURES "35;50;60;61;70")
72+
elseif(${CUDA_MAJOR} EQUAL 11)
73+
if(${CUDA_MINOR} LESS 8)
74+
set(CMAKE_CUDA_ARCHITECTURES "35;50;60;61;70;80")
75+
else()
76+
set(CMAKE_CUDA_ARCHITECTURES "35;50;60;61;70;80;90")
77+
endif()
78+
elseif(${CUDA_MAJOR} EQUAL 12)
79+
if(${CUDA_MINOR} LESS 8)
80+
set(CMAKE_CUDA_ARCHITECTURES "50;60;61;70;80;90")
81+
else()
82+
set(CMAKE_CUDA_ARCHITECTURES "50;60;61;70;80;90;100;120")
83+
endif()
84+
elseif(${CUDA_MAJOR} EQUAL 13)
85+
set(CMAKE_CUDA_ARCHITECTURES "50;60;61;70;80;90;100;110;120")
86+
else()
87+
# For future CUDA versions, include all architectures up to the latest known
88+
set(CMAKE_CUDA_ARCHITECTURES "50;60;61;70;80;90;100;110;120")
89+
endif()
90+
endif()
91+
message(STATUS "Using CUDA_ARCHITECTURES: ${CMAKE_CUDA_ARCHITECTURES}")
92+
93+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -fvisibility=hidden -Wall -Wno-unused-function -Wno-sign-compare -Wvla -g")
94+
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-extended-lambda -Xptxas -maxrregcount=96 -Xfatbin -compress-all -fPIC")
95+
96+
# Sanitizer options
97+
if(ASAN)
98+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
99+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address -static-libasan")
100+
endif()
101+
102+
if(UBSAN)
103+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
104+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -static-libubsan")
105+
endif()
106+
107+
# Additional options
108+
if(TRACE)
109+
add_definitions(-DENABLE_TRACE)
110+
endif()
111+
112+
if(NOT NVTX)
113+
add_definitions(-DNVTX_DISABLE)
114+
endif()
115+
116+
if(WERROR)
117+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
118+
endif()
119+
120+
if(PROFAPI)
121+
add_definitions(-DPROFAPI)
122+
endif()
123+
124+
set(EXTRA_LIBS)
125+
126+
# RDMA and MLX5DV are Linux-specific features
127+
if(RDMA_CORE)
128+
add_definitions(-DNCCL_BUILD_RDMA_CORE=1)
129+
find_library(VERBS_LIBRARY NAMES verbs)
130+
if(VERBS_LIBRARY)
131+
list(APPEND EXTRA_LIBS ${VERBS_LIBRARY})
132+
endif()
133+
endif()
134+
135+
if(MLX5DV)
136+
add_definitions(-DNCCL_BUILD_MLX5DV=1)
137+
find_library(MLX5_LIBRARY NAMES mlx5)
138+
if(MLX5_LIBRARY)
139+
list(APPEND EXTRA_LIBS ${MLX5_LIBRARY})
140+
endif()
141+
endif()
142+
143+
if(NET_PROFILER)
144+
add_definitions(-DNCCL_ENABLE_NET_PROFILING=1)
145+
endif()
146+
147+
if(MAX_EXT_NET_PLUGINS GREATER 0)
148+
add_definitions(-DNCCL_NET_MAX_PLUGINS=${MAX_EXT_NET_PLUGINS})
149+
endif()
150+
151+
# Library dependencies
152+
find_library(RT_LIBRARY NAMES rt)
153+
if(RT_LIBRARY)
154+
list(APPEND EXTRA_LIBS ${RT_LIBRARY})
155+
endif()
156+
157+
# Debug/Release specific flags
158+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0")
159+
set(CMAKE_CUDA_FLAGS_DEBUG "${CMAKE_CUDA_FLAGS} -O0 -G -g")
160+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O3")
161+
set(CMAKE_CUDA_FLAGS_RELEASE "${CMAKE_CUDA_FLAGS} -O3")
162+
163+
add_subdirectory(ext-net)
164+
add_subdirectory(ext-profiler/example)
165+
add_subdirectory(ext-tuner/example)
166+
add_subdirectory(src)

Makefile

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,22 @@
33
#
44
# See LICENSE.txt for license information
55
#
6-
.PHONY : all clean
6+
.PHONY: all clean
77

8-
default : src.build
9-
install : src.install
8+
default: src.build
9+
install: src.install
1010
BUILDDIR ?= $(abspath ./build)
1111
ABSBUILDDIR := $(abspath $(BUILDDIR))
1212
TARGETS := src pkg
1313
clean: ${TARGETS:%=%.clean}
14-
test.build: src.build
1514
LICENSE_FILES := LICENSE.txt
1615
LICENSE_TARGETS := $(LICENSE_FILES:%=$(BUILDDIR)/%)
1716
lic: $(LICENSE_TARGETS)
1817

1918
${BUILDDIR}/%.txt: %.txt
2019
@printf "Copying %-35s > %s\n" $< $@
2120
mkdir -p ${BUILDDIR}
22-
cp $< $@
21+
install -m 644 $< $@
2322

2423
src.%:
2524
${MAKE} -C src $* BUILDDIR=${ABSBUILDDIR}

ext-net/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Since all the plugins generate binary with the same name, build only one of them
2+
add_subdirectory(example)
3+
# add_subdirectory(ib_sharp)
4+
# add_subdirectory(mock)

0 commit comments

Comments
 (0)