Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 238cac7

Browse files
Implements macro changes from super-repo reorg RFC.
First step of implementing https://github.com/ROCm/TheRock/blob/main/docs/rfcs/RFC0003-Build-Tree-Normalization.md. Decisions made while working: * Eliminated the separate therock.cmake and therock_subprojects.cmake files, just using the first. * Renamed `pre_hook_{name}.cmake` to `{name}_pre.cmake`. Less punctuation and a sort order that corresponds to the project name will save subtle errors due to typos. Same transformation to post_hooks. * Introduced THEROCK_CURRENT_SOURCE_DIR and THEROCK_CURRENT_BINARY_DIR for managing the super-project directory tree. Updated all macros and references to correspond. This was mostly a series of mechanical changes.
1 parent b1bdc0b commit 238cac7

Some content is hidden

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

66 files changed

+541
-579
lines changed

CMakeLists.txt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ include(therock_default_targets)
2020
include(therock_amdgpu_targets)
2121
include(therock_artifacts)
2222
include(therock_compiler_config)
23+
include(therock_directories)
2324
include(therock_external_source)
2425
include(therock_features)
2526
include(therock_subproject)
@@ -412,25 +413,25 @@ endif()
412413

413414
# Add subdirectories in dependency DAG order (which happens to be semi-alpha:
414415
# don't be fooled).
415-
add_subdirectory(third-party)
416-
add_subdirectory(base)
417-
add_subdirectory(compiler)
418-
add_subdirectory(core)
416+
therock_add_subdirectory(third-party)
417+
therock_add_subdirectory(base)
418+
therock_add_subdirectory(compiler)
419+
therock_add_subdirectory(core)
419420
# Note that rocprofiler-register is in base and is what higher level clients
420421
# depend on. The profiler itself is independent.
421-
add_subdirectory(profiler)
422-
add_subdirectory(comm-libs)
423-
add_subdirectory(math-libs)
424-
add_subdirectory(ml-libs)
425-
426-
if(THEROCK_BUILD_TESTING)
427-
add_subdirectory(examples)
428-
endif()
422+
therock_add_subdirectory(profiler)
423+
therock_add_subdirectory(comm-libs)
424+
therock_add_subdirectory(math-libs)
425+
therock_add_subdirectory(ml-libs)
429426

430427
################################################################################
431428
# Testing
432429
################################################################################
433430

431+
if(THEROCK_BUILD_TESTING)
432+
add_subdirectory(examples)
433+
endif()
434+
434435
if(THEROCK_BUILD_TESTING)
435436
if(NOT WIN32)
436437
add_executable(
File renamed without changes.

base/CMakeLists.txt renamed to base/therock.cmake

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ endif()
3737

3838
therock_cmake_subproject_declare(rocm-core
3939
EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/rocm-core"
40-
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rocm-core"
40+
BINARY_DIR "${THEROCK_CURRENT_BINARY_DIR}/rocm-core"
4141
USE_DIST_AMDGPU_TARGETS
4242
BACKGROUND_BUILD
4343
CMAKE_ARGS
@@ -59,7 +59,7 @@ if(NOT WIN32) # TODO(#36): Enable on Windows and/or make subproject inclusion g
5959

6060
therock_cmake_subproject_declare(rocm_smi_lib
6161
EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/rocm-smi-lib"
62-
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rocm_smi_lib"
62+
BINARY_DIR "${THEROCK_CURRENT_BINARY_DIR}/rocm_smi_lib"
6363
USE_DIST_AMDGPU_TARGETS
6464
BACKGROUND_BUILD
6565
CMAKE_ARGS
@@ -97,7 +97,7 @@ if(NOT WIN32) # TODO(#36): Enable on Windows?
9797

9898
therock_cmake_subproject_declare(rocprofiler-register
9999
EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/rocprofiler-register"
100-
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rocprofiler-register"
100+
BINARY_DIR "${THEROCK_CURRENT_BINARY_DIR}/rocprofiler-register"
101101
USE_DIST_AMDGPU_TARGETS
102102
BACKGROUND_BUILD
103103
INTERFACE_LINK_DIRS

cmake/therock_artifacts.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
# Convenience targets with a "+expunge" suffix are created to remove corresponding
2424
# files. Invoking the project level "expunge" will depend on all of them.
2525
function(therock_provide_artifact slice_name)
26+
_therock_assert_is_our_directory()
2627
cmake_parse_arguments(PARSE_ARGV 1 ARG
2728
"TARGET_NEUTRAL"
2829
"DESCRIPTOR;DISTRIBUTION"
@@ -49,7 +50,7 @@ function(therock_provide_artifact slice_name)
4950
if(NOT ARG_DESCRIPTOR)
5051
set(ARG_DESCRIPTOR "artifact.toml")
5152
endif()
52-
cmake_path(ABSOLUTE_PATH ARG_DESCRIPTOR BASE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
53+
cmake_path(ABSOLUTE_PATH ARG_DESCRIPTOR BASE_DIRECTORY "${THEROCK_CURRENT_SOURCE_DIR}")
5354

5455
if(NOT DEFINED ARG_DISTRIBUTION)
5556
set(ARG_DISTRIBUTION "rocm")

cmake/therock_directories.cmake

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Copyright Advanced Micro Devices, Inc.
2+
# SPDX-License-Identifier: MIT
3+
4+
function(therock_add_subdirectory subdir)
5+
if(NOT THEROCK_CURRENT_SOURCE_DIR)
6+
set(THEROCK_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
7+
endif()
8+
if(NOT THEROCK_CURRENT_BINARY_DIR)
9+
set(THEROCK_CURRENT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
10+
endif()
11+
12+
# Switch on absolute path.
13+
cmake_path(IS_ABSOLUTE subdir is_abs)
14+
if(is_abs)
15+
# Absolute.
16+
if(ARGC LESS 2)
17+
message(FATAL_ERROR "therock_add_subdirectory of an absolute path requires a binary dir")
18+
endif()
19+
list(GET ARGV 1 binarydir)
20+
cmake_path(ABSOLUTE_PATH binarydir
21+
BASE_DIRECTORY "${THEROCK_CURRENT_BINARY_DIR}"
22+
OUTPUT_VARIABLE THEROCK_CURRENT_BINARY_DIR)
23+
set(THEROCK_CURRENT_SOURCE_DIR "${subdir}")
24+
else()
25+
# Relative
26+
if(ARGC GREATER 1)
27+
message(FATAL_ERROR "therock_add_subdirectory with a relative path cannot contain a binary dir")
28+
endif()
29+
# Relative
30+
set(THEROCK_CURRENT_SOURCE_DIR "${THEROCK_CURRENT_SOURCE_DIR}/${subdir}")
31+
set(THEROCK_CURRENT_BINARY_DIR "${THEROCK_CURRENT_BINARY_DIR}/${subdir}")
32+
endif()
33+
34+
# Script we want to include.
35+
set(script_file "${THEROCK_CURRENT_SOURCE_DIR}/therock.cmake")
36+
if(NOT EXISTS "${script_file}")
37+
message(FATAL_ERROR "therock_add_subdirectory(${THEROCK_CURRENT_SOURCE_DIR}): therock.cmake does not exist")
38+
endif()
39+
40+
file(MAKE_DIRECTORY "${THEROCK_CURRENT_BINARY_DIR}")
41+
include("${script_file}")
42+
endfunction()
43+
44+
function(_therock_assert_is_our_directory)
45+
if(NOT THEROCK_CURRENT_SOURCE_DIR OR NOT THEROCK_CURRENT_BINARY_DIR)
46+
message(FATAL_ERROR "This function can only be called within a super-project directory added via therock_add_subdirectory()")
47+
endif()
48+
endfunction()

cmake/therock_subproject.cmake

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ endfunction()
138138
# to CMake (which the subproject depends on). Additional touch byproducts
139139
# can be generated with TOUCH.
140140
function(therock_subproject_fetch target_name)
141+
_therock_assert_is_our_directory()
141142
cmake_parse_arguments(
142143
PARSE_ARGV 1 ARG
143144
"CMAKE_PROJECT"
@@ -149,10 +150,10 @@ function(therock_subproject_fetch target_name)
149150
set(ARG_EXCLUDE_FROM_ALL TRUE)
150151
endif()
151152
if(NOT DEFINED ARG_PREFIX)
152-
set(ARG_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/${target_name}_fetch")
153+
set(ARG_PREFIX "${THEROCK_CURRENT_BINARY_DIR}/${target_name}_fetch")
153154
endif()
154155
if(NOT DEFINED ARG_SOURCE_DIR)
155-
set(ARG_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/source")
156+
set(ARG_SOURCE_DIR "${THEROCK_CURRENT_BINARY_DIR}/source")
156157
endif()
157158

158159
set(_extra)
@@ -295,6 +296,7 @@ endfunction()
295296
# Note that all transitive keywords (i.e. "INTERFACE_" prefixes) only consider
296297
# transitive deps along their RUNTIME_DEPS edges, not BUILD_DEPS.
297298
function(therock_cmake_subproject_declare target_name)
299+
_therock_assert_is_our_directory()
298300
cmake_parse_arguments(
299301
PARSE_ARGV 1 ARG
300302
"ACTIVATE;USE_DIST_AMDGPU_TAGETS;DISABLE_AMDGPU_TARGETS;EXCLUDE_FROM_ALL;BACKGROUND_BUILD;NO_MERGE_COMPILE_COMMANDS;OUTPUT_ON_FAILURE;NO_INSTALL_RPATH"
@@ -312,15 +314,15 @@ function(therock_cmake_subproject_declare target_name)
312314
if(_source_is_absolute)
313315
if(NOT ARG_BINARY_DIR)
314316
# TODO: Swap these lines once moved.
315-
set(ARG_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
317+
set(ARG_BINARY_DIR "${THEROCK_CURRENT_BINARY_DIR}")
316318
# message(FATAL_ERROR "If specifying an absolute SOURCE_DIR, BINARY_DIR must be specified")
317319
endif()
318320
else()
319321
if(NOT ARG_BINARY_DIR)
320322
set(ARG_BINARY_DIR "${ARG_EXTERNAL_SOURCE_DIR}")
321323
endif()
322-
cmake_path(ABSOLUTE_PATH ARG_EXTERNAL_SOURCE_DIR)
323-
cmake_path(ABSOLUTE_PATH ARG_BINARY_DIR BASE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
324+
cmake_path(ABSOLUTE_PATH ARG_EXTERNAL_SOURCE_DIR BASE_DIRECTORY "${THEROCK_CURRENT_SOURCE_DIR}")
325+
cmake_path(ABSOLUTE_PATH ARG_BINARY_DIR BASE_DIRECTORY "${THEROCK_CURRENT_BINARY_DIR}")
324326
endif()
325327

326328
set(_cmake_source_dir "${ARG_EXTERNAL_SOURCE_DIR}")
@@ -500,8 +502,9 @@ endfunction()
500502
# with `find_package(package_name)` at the given path relative to its install
501503
# directory.
502504
function(therock_cmake_subproject_provide_package target_name package_name relative_path)
503-
string(APPEND CMAKE_MESSAGE_INDENT " ")
504-
get_property(existing_packages GLOBAL PROPERTY THEROCK_ALL_PROVIDED_PACKAGES)
505+
_therock_assert_is_our_directory()
506+
string(APPEND CMAKE_MESSAGE_INDENT " ")
507+
get_property(existing_packages GLOBAL PROPERTY THEROCK_ALL_PROVIDED_PACKAGES)
505508
if("${package_name}" IN_LIST existing_packages)
506509
message(SEND_ERROR "Duplicate package provided by ${target_name}: ${package_name}")
507510
endif()
@@ -523,6 +526,7 @@ endfunction()
523526
# If using multi-step setup (i.e. without 'ACTIVATE' on the declare), then this
524527
# must be called once all configuration is complete.
525528
function(therock_cmake_subproject_activate target_name)
529+
_therock_assert_is_our_directory()
526530
_therock_assert_is_cmake_subproject("${target_name}")
527531

528532
# Get properties.
@@ -578,11 +582,11 @@ function(therock_cmake_subproject_activate target_name)
578582
set(_build_comment_suffix)
579583

580584
# Detect pre/post hooks.
581-
set(_pre_hook_path "${CMAKE_CURRENT_SOURCE_DIR}/pre_hook_${_logical_target_name}.cmake")
585+
set(_pre_hook_path "${THEROCK_CURRENT_SOURCE_DIR}/${_logical_target_name}_pre.cmake")
582586
if(NOT EXISTS "${_pre_hook_path}")
583587
set(_pre_hook_path)
584588
endif()
585-
set(_post_hook_path "${CMAKE_CURRENT_SOURCE_DIR}/post_hook_${_logical_target_name}.cmake")
589+
set(_post_hook_path "${THEROCK_CURRENT_SOURCE_DIR}/${_logical_target_name}_post.cmake")
586590
if(NOT EXISTS "${_post_hook_path}")
587591
set(_post_hook_path)
588592
endif()
File renamed without changes.

comm-libs/CMakeLists.txt renamed to comm-libs/therock.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ if(THEROCK_ENABLE_RCCL)
1313

1414
therock_cmake_subproject_declare(rccl
1515
EXTERNAL_SOURCE_DIR "${THEROCK_RCCL_SOURCE_DIR}"
16-
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rccl"
16+
BINARY_DIR "${THEROCK_CURRENT_BINARY_DIR}/rccl"
1717
# High latency LTO link of a single library.
1818
BACKGROUND_BUILD
1919
CMAKE_ARGS
@@ -51,7 +51,7 @@ if(THEROCK_ENABLE_RCCL)
5151
if(THEROCK_BUILD_TESTING)
5252
therock_cmake_subproject_declare(rccl-tests
5353
EXTERNAL_SOURCE_DIR "${THEROCK_RCCL_TESTS_SOURCE_DIR}"
54-
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rccl-tests"
54+
BINARY_DIR "${THEROCK_CURRENT_BINARY_DIR}/rccl-tests"
5555
BACKGROUND_BUILD
5656
CMAKE_ARGS
5757
-DHIP_PLATFORM=amd
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)