Skip to content

Commit e1cf4f5

Browse files
aus-inteligcbot
authored andcommitted
Copy clang sources to handle opencl-clang patching
1 parent 4f18eca commit e1cf4f5

File tree

5 files changed

+68
-19
lines changed

5 files changed

+68
-19
lines changed

external/llvm/llvm.cmake

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,7 @@ cmake_policy(VERSION 3.13.4)
4646

4747
include_guard(DIRECTORY)
4848

49-
set(SOURCE_MODE_NAME "Source")
50-
set(PREBUILDS_MODE_NAME "Prebuilds")
51-
52-
set(IGC_OPTION__LLVM_MODE "" CACHE STRING
53-
"LLVM mode for IGC (can be ${SOURCE_MODE_NAME}, ${PREBUILDS_MODE_NAME} or empty)"
54-
)
55-
56-
if(IGC_OPTION__LLVM_MODE AND NOT (IGC_OPTION__LLVM_MODE MATCHES "^(${SOURCE_MODE_NAME}|${PREBUILDS_MODE_NAME})$"))
57-
message(FATAL_ERROR "LLVM mode can be only ${SOURCE_MODE_NAME}, ${PREBUILDS_MODE_NAME} or empty!")
58-
endif()
59-
60-
# Get preferred version of LLVM.
61-
include(llvm_preferred_version)
62-
set(IGC_OPTION__LLVM_PREFERRED_VERSION ${DEFAULT_IGC_LLVM_VERSION} CACHE STRING "Preferred version of LLVM to use")
49+
llvm_define_mode_variable(LLVM IGC_OPTION__LLVM_MODE)
6350

6451
# Get default source dir.
6552
include(llvm_source_path)
@@ -108,7 +95,7 @@ message(STATUS "[LLVM] LLVM will be built from sources")
10895
message(STATUS "[LLVM] LLVM sources folder: ${IGC_OPTION__LLVM_SOURCES_DIR}")
10996
message(STATUS "[LLVM] LLVM sources in stock version: ${IGC_OPTION__LLVM_STOCK_SOURCES}")
11097

111-
add_subdirectory(${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_BINARY_DIR}/llvm/build)
98+
add_subdirectory(${CMAKE_CURRENT_LIST_DIR} ${IGC_LLVM_WORKSPACE}/build)
11299

113100
# Some variables are lost after LLVM subdirectory left.
114101
# Restore them for IGC usage.

external/llvm/llvm_clang_source_hook.cmake

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,45 @@
2222
#
2323
#============================ end_copyright_notice =============================
2424

25+
# Source hook for clang. IGC will try to search for clang in
26+
# find_opencl_clang script independenty of this file. All of these is
27+
# required to handle intel opencl-clang project patching scheme.
28+
# FIXME: this should be moved to opencl-clang repo.
29+
30+
include_guard(DIRECTORY)
31+
32+
llvm_define_mode_variable(Clang IGC_OPTION__CLANG_MODE)
33+
34+
# Reuse LLVM source search module. Clang should be located in the same place.
35+
include(llvm_source_path)
36+
if(DEFAULT_IGC_LLVM_SOURCES_DIR)
37+
set(DEFAULT_IGC_CLANG_SOURCES_DIR ${DEFAULT_IGC_LLVM_SOURCES_DIR}/clang)
38+
endif()
39+
40+
if(IGC_OPTION__CLANG_MODE STREQUAL SOURCE_MODE_NAME)
41+
set(IGC_OPTION__CLANG_SOURCES_DIR "${DEFAULT_IGC_CLANG_SOURCES_DIR}" CACHE PATH "Path to Clang sources")
42+
endif()
43+
44+
# In Prebuild mode there is nothing to do here for now.
45+
if(IGC_OPTION__CLANG_MODE STREQUAL PREBUILDS_MODE_NAME)
46+
return()
47+
endif()
48+
49+
# No mode was specified, start searching.
50+
if(NOT IGC_OPTION__CLANG_MODE)
51+
message(STATUS "[Clang] No mode was specified, searching for Clang")
52+
if(EXISTS "${DEFAULT_IGC_CLANG_SOURCES_DIR}")
53+
set(IGC_OPTION__CLANG_SOURCES_DIR "${DEFAULT_IGC_CLANG_SOURCES_DIR}")
54+
else()
55+
return()
56+
endif()
57+
endif()
58+
59+
set(IGC_COPIED_CLANG_DIR ${IGC_LLVM_WORKSPACE_SRC}/clang)
60+
61+
message(STATUS "[Clang] Clang will be built from sources")
62+
message(STATUS "[Clang] Copying stock Clang sources ${IGC_OPTION__CLANG_SOURCES_DIR} to ${IGC_COPIED_CLANG_DIR}")
63+
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${IGC_OPTION__CLANG_SOURCES_DIR} ${IGC_COPIED_CLANG_DIR})
64+
2565
# Just register clang as external llvm project.
26-
register_llvm_external_project(clang clang RELATIVE_TO_LLVM)
66+
register_llvm_external_project(clang ${IGC_COPIED_CLANG_DIR})

external/llvm/llvm_deps.cmake

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ include_guard(DIRECTORY)
3939

4040
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_MODULE_PATH})
4141

42+
# Get preferred version of LLVM.
43+
include(llvm_preferred_version)
44+
set(IGC_OPTION__LLVM_PREFERRED_VERSION ${DEFAULT_IGC_LLVM_VERSION} CACHE STRING "Preferred version of LLVM to use")
45+
46+
set(IGC_LLVM_WORKSPACE ${CMAKE_CURRENT_BINARY_DIR}/llvm-deps)
47+
set(IGC_LLVM_WORKSPACE_SRC ${IGC_LLVM_WORKSPACE}/src)
48+
4249
# Get useful macros for llvm hooks.
4350
include(llvm_utils)
4451

external/llvm/llvm_patch_sources.cmake

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@
2626

2727
include_guard(DIRECTORY)
2828

29-
if(NOT IGC_LLVM_SOURCE_DIR)
30-
set(IGC_LLVM_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/../src/llvm")
31-
endif()
29+
set(IGC_LLVM_SOURCE_DIR ${IGC_LLVM_WORKSPACE_SRC}/llvm)
3230

3331
# Already copied and patched. Probably...
3432
# TODO: handle dependencies on patches changes.
@@ -59,6 +57,7 @@ endif()
5957

6058
# Copy stock LLVM sources to IGC_LLVM_SOURCE_DIR to apply patches.
6159
message(STATUS "[LLVM_PATCHER] : Copying stock LLVM sources ${IGC_OPTION__LLVM_SOURCES_DIR} to ${IGC_LLVM_SOURCE_DIR}")
60+
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${IGC_OPTION__LLVM_SOURCES_DIR}/.git ${IGC_LLVM_WORKSPACE_SRC}/.git)
6261
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${IGC_OPTION__LLVM_SOURCES_DIR}/llvm ${IGC_LLVM_SOURCE_DIR})
6362

6463
message(STATUS "[LLVM_PATCHER] : Applying patches for LLVM from version ${DIR_WITH_PATCHES}")

external/llvm/llvm_utils.cmake

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,19 @@ macro(get_llvm_external_project_dir proj out)
111111
get_filename_component(${out} ${${out}} ABSOLUTE BASE_DIR ${ARG_BASE_DIR})
112112
endif()
113113
endmacro()
114+
115+
# Helper function to define and check build mode variable for project.
116+
# proj_name -- name of project to print in messages.
117+
# var -- output variable that should be defined.
118+
macro(llvm_define_mode_variable proj_name var)
119+
set(SOURCE_MODE_NAME "Source")
120+
set(PREBUILDS_MODE_NAME "Prebuilds")
121+
122+
set(${var} "" CACHE STRING
123+
"${proj_name} mode for IGC (can be ${SOURCE_MODE_NAME}, ${PREBUILDS_MODE_NAME} or empty)"
124+
)
125+
126+
if(${var} AND NOT (${var} MATCHES "^(${SOURCE_MODE_NAME}|${PREBUILDS_MODE_NAME})$"))
127+
message(FATAL_ERROR "${proj_name} mode can be only ${SOURCE_MODE_NAME}, ${PREBUILDS_MODE_NAME} or empty!")
128+
endif()
129+
endmacro()

0 commit comments

Comments
 (0)