Skip to content

Commit 6be5c9e

Browse files
committed
Merge remote-tracking branch 'origin/main' into abadams/faster_inlining
# Conflicts: # test/correctness/CMakeLists.txt
2 parents 25d539c + 7e2ecf2 commit 6be5c9e

110 files changed

Lines changed: 3852 additions & 3096 deletions

File tree

Some content is hidden

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

.pre-commit-config.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,14 @@ repos:
112112
hooks:
113113
- id: taplo-format
114114

115+
- repo: https://github.com/halide/cmtk-pre-commit
116+
rev: v0.1.0
117+
hooks:
118+
- id: cmtk
119+
115120
- repo: local
116121
hooks:
122+
117123
- id: check-cmake-file-lists
118124
name: check CMake file lists
119125
entry: python3 tools/check_cmake_file_lists.py

CMakeLists.txt

Lines changed: 60 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
cmake_minimum_required(VERSION 3.28)
2-
project(Halide
3-
VERSION 22.0.0
4-
DESCRIPTION "Halide compiler and libraries"
5-
HOMEPAGE_URL "https://halide-lang.org")
2+
project(
3+
Halide
4+
VERSION 22.0.0
5+
DESCRIPTION "Halide compiler and libraries"
6+
HOMEPAGE_URL "https://halide-lang.org"
7+
)
68

79
enable_testing()
810

911
##
1012
# Disable find_package(Halide) inside the build
1113
##
1214

13-
file(CONFIGURE OUTPUT "${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/HalideConfig.cmake"
14-
CONTENT [[set(Halide_FOUND 1)
15-
set(Halide_VERSION @Halide_VERSION@)]])
15+
file(CONFIGURE
16+
OUTPUT "${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/HalideConfig.cmake"
17+
CONTENT [[set(Halide_FOUND 1)
18+
set(Halide_VERSION @Halide_VERSION@)]]
19+
)
1620

17-
file(CONFIGURE OUTPUT "${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/HalideHelpersConfig.cmake"
18-
CONTENT "set(HalideHelpers_FOUND 1)\n")
21+
file(CONFIGURE
22+
OUTPUT "${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/HalideHelpersConfig.cmake"
23+
CONTENT "set(HalideHelpers_FOUND 1)\n"
24+
)
1925

2026
##
2127
# Set up project-wide properties
@@ -37,9 +43,10 @@ option(BUILD_SHARED_LIBS "Build shared libraries" ON)
3743
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
3844
if (NOT is_multi_config AND CMAKE_BUILD_TYPE STREQUAL "")
3945
string(JOIN "" error_message
40-
"Halide cannot be built when CMAKE_BUILD_TYPE is empty. "
41-
"Please set CMAKE_BUILD_TYPE to one of the standard types: "
42-
"Debug, Release, RelWithDebInfo, or MinSizeRel.")
46+
"Halide cannot be built when CMAKE_BUILD_TYPE is empty. "
47+
"Please set CMAKE_BUILD_TYPE to one of the standard types: "
48+
"Debug, Release, RelWithDebInfo, or MinSizeRel."
49+
)
4350
message(FATAL_ERROR "${error_message}")
4451
endif ()
4552

@@ -58,11 +65,17 @@ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
5865

5966
# Require standard C++17
6067
set(CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard to use. Halide requires 17 or higher.")
61-
option(CMAKE_CXX_STANDARD_REQUIRED "When enabled, the value of CMAKE_CXX_STANDARD is a requirement." ON)
62-
option(CMAKE_CXX_EXTENSIONS "When enabled, compiler-specific language extensions are enabled (e.g. -std=gnu++17)" OFF)
68+
option(CMAKE_CXX_STANDARD_REQUIRED
69+
"When enabled, the value of CMAKE_CXX_STANDARD is a requirement." ON
70+
)
71+
option(CMAKE_CXX_EXTENSIONS
72+
"When enabled, compiler-specific language extensions are enabled (e.g. -std=gnu++17)" OFF
73+
)
6374

6475
if (CMAKE_CXX_STANDARD LESS 17)
65-
message(FATAL_ERROR "Halide requires C++17 or newer but CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}")
76+
message(
77+
FATAL_ERROR "Halide requires C++17 or newer but CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
78+
)
6679
endif ()
6780

6881
# Build Halide with ccache if the package is present and the user requested it
@@ -74,11 +87,14 @@ if (Halide_CCACHE_BUILD)
7487
CCACHE_CPP2=yes
7588
CCACHE_HASHDIR=yes
7689
CCACHE_SLOPPINESS=pch_defines,time_macros,include_file_mtime,include_file_ctime
77-
CACHE STRING "Parameters to pass through to ccache")
90+
CACHE STRING "Parameters to pass through to ccache"
91+
)
7892
mark_as_advanced(Halide_CCACHE_PARAMS)
7993

8094
set(CMAKE_C_COMPILER_LAUNCHER ${CMAKE_COMMAND} -E env ${Halide_CCACHE_PARAMS} ${CCACHE_PROGRAM})
81-
set(CMAKE_CXX_COMPILER_LAUNCHER ${CMAKE_COMMAND} -E env ${Halide_CCACHE_PARAMS} ${CCACHE_PROGRAM})
95+
set(CMAKE_CXX_COMPILER_LAUNCHER
96+
${CMAKE_COMMAND} -E env ${Halide_CCACHE_PARAMS} ${CCACHE_PROGRAM}
97+
)
8298

8399
# Per https://ccache.dev/manual/latest.html#_precompiled_headers,
84100
# we must set -fno-pch-timestamp when using Clang + CCache + PCH
@@ -93,7 +109,9 @@ endif ()
93109
# Detect whether or not ASAN is enabled. Don't cache the result to ensure this
94110
# check happens every time we reconfigure.
95111
unset(Halide_ASAN_ENABLED CACHE)
96-
check_cxx_symbol_exists(HALIDE_INTERNAL_USING_ASAN "${Halide_SOURCE_DIR}/src/Util.h" Halide_ASAN_ENABLED)
112+
check_cxx_symbol_exists(
113+
HALIDE_INTERNAL_USING_ASAN "${Halide_SOURCE_DIR}/src/Util.h" Halide_ASAN_ENABLED
114+
)
97115

98116
if (Halide_ASAN_ENABLED)
99117
set(Halide_ANY_SANITIZERS_ENABLED 1)
@@ -107,27 +125,22 @@ function(set_halide_compiler_warnings NAME)
107125
${NAME}
108126
PRIVATE
109127
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wall>
110-
111128
# variable length arrays in C++ are a Clang extension, we don't want to use them
112129
$<$<CXX_COMPILER_ID:Clang,AppleClang>:-Wvla-extension>
113-
114130
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wcast-qual>
115131
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wignored-qualifiers>
116132
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wimplicit-fallthrough>
117-
118133
# GCC warns when these warnings are given to plain-C sources
119134
$<$<COMPILE_LANG_AND_ID:CXX,GNU,Clang,AppleClang>:-Woverloaded-virtual>
120135
$<$<COMPILE_LANG_AND_ID:CXX,GNU>:-Wsuggest-override>
121-
122136
$<$<CXX_COMPILER_ID:Clang,AppleClang>:-Winconsistent-missing-destructor-override>
123137
$<$<CXX_COMPILER_ID:Clang,AppleClang>:-Winconsistent-missing-override>
124138
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wdeprecated-declarations>
125-
126139
$<$<CXX_COMPILER_ID:MSVC>:/W3>
127140
$<$<CXX_COMPILER_ID:MSVC>:/wd4018> # 4018: disable "signed/unsigned mismatch"
128141
$<$<CXX_COMPILER_ID:MSVC>:/wd4146> # 4146: unary minus applied to unsigned type
129142
$<$<CXX_COMPILER_ID:MSVC>:/wd4244> # 4244: conversion, possible loss of data
130-
$<$<CXX_COMPILER_ID:MSVC>:/wd4267> # 4267: conversion from 'size_t' to 'int', possible loss of data
143+
$<$<CXX_COMPILER_ID:MSVC>:/wd4267> # 4267: size_t -> int narrowing
131144
)
132145
endfunction()
133146

@@ -137,13 +150,17 @@ endfunction()
137150
##
138151

139152
## Threads
140-
option(THREADS_PREFER_PTHREAD_FLAG "When enabled, prefer to use the -pthread flag to explicit linking" ON)
153+
option(THREADS_PREFER_PTHREAD_FLAG
154+
"When enabled, prefer to use the -pthread flag to explicit linking" ON
155+
)
141156
find_package(Threads REQUIRED)
142157

143158
## LLVM
144-
find_package(Halide_LLVM 21...99 REQUIRED # Use 99 to fake a minimum-only constraint
145-
COMPONENTS WebAssembly X86
146-
OPTIONAL_COMPONENTS AArch64 ARM Hexagon NVPTX PowerPC RISCV)
159+
find_package(
160+
Halide_LLVM 21...99 REQUIRED # Use 99 to fake a minimum-only constraint
161+
COMPONENTS WebAssembly X86
162+
OPTIONAL_COMPONENTS AArch64 ARM Hexagon NVPTX PowerPC RISCV
163+
)
147164

148165
_Halide_pkgdep(Halide_LLVM PACKAGE_VARS Halide_LLVM_SHARED_LIBS)
149166

@@ -167,23 +184,27 @@ find_package(PNG)
167184
Halide_feature(Halide_BUILDING_IN_CI "Enable if building in CI" OFF ADVANCED)
168185

169186
Halide_feature(Halide_ENABLE_EXCEPTIONS "Enable exceptions in Halide" ON)
170-
Halide_feature(Halide_ENABLE_RTTI "Enable RTTI in Halide" ON
171-
DEPENDS LLVM_ENABLE_RTTI)
187+
Halide_feature(Halide_ENABLE_RTTI "Enable RTTI in Halide" ON DEPENDS LLVM_ENABLE_RTTI)
172188

173-
Halide_feature(WITH_AUTOSCHEDULERS "Build the Halide autoschedulers" ON
174-
DEPENDS BUILD_SHARED_LIBS)
189+
Halide_feature(WITH_AUTOSCHEDULERS "Build the Halide autoschedulers" ON DEPENDS BUILD_SHARED_LIBS)
175190
Halide_feature(WITH_DOCS "Halide's Doxygen documentation" OFF)
176191
Halide_feature(WITH_PACKAGING "Halide's CMake package install rules" TOP_LEVEL)
177-
Halide_feature(WITH_PYTHON_BINDINGS "Halide's native Python module (not the whole pip package)" ON
178-
DEPENDS Halide_ENABLE_EXCEPTIONS AND Halide_ENABLE_RTTI)
192+
Halide_feature(
193+
WITH_PYTHON_BINDINGS "Halide's native Python module (not the whole pip package)" ON
194+
DEPENDS Halide_ENABLE_EXCEPTIONS AND Halide_ENABLE_RTTI
195+
)
179196
Halide_feature(WITH_SERIALIZATION "Include experimental Serialization/Deserialization code" ON)
180-
Halide_feature(WITH_SERIALIZATION_JIT_ROUNDTRIP_TESTING
181-
"Intercepting JIT compilation with a serialization roundtrip, for test only"
182-
OFF ADVANCED
183-
DEPENDS WITH_SERIALIZATION)
197+
Halide_feature(
198+
WITH_SERIALIZATION_JIT_ROUNDTRIP_TESTING
199+
"Intercepting JIT compilation with a serialization roundtrip, for test only"
200+
OFF ADVANCED
201+
DEPENDS WITH_SERIALIZATION
202+
)
184203
Halide_feature(WITH_TESTS "Halide's unit test suite" TOP_LEVEL)
185204
Halide_feature(WITH_TUTORIALS "Halide's tutorial code" TOP_LEVEL)
186-
Halide_feature(WITH_UTILS "Optional utility programs for Halide, including HalideTraceViz" TOP_LEVEL)
205+
Halide_feature(
206+
WITH_UTILS "Optional utility programs for Halide, including HalideTraceViz" TOP_LEVEL
207+
)
187208

188209

189210
##

apps/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ message(STATUS "Halide_TARGET: ${Halide_TARGET}")
2828
if (Halide_TARGET MATCHES "wasm")
2929
message(WARNING "Skipping apps when building under wasm")
3030
return()
31-
endif()
31+
endif ()
3232

3333
# keep-sorted start case=no ignore_prefixes=#
3434
# add_app(auto_viz) # TODO(#5374): missing CMake build

apps/HelloBaremetal/CMakeLists.txt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ add_subdirectory(cmake-twice)
1212
set(IMAGE ${CMAKE_CURRENT_LIST_DIR}/../images/gray_small.pgm)
1313
if (EXISTS ${IMAGE})
1414
configure_file(${IMAGE} gray_small.pgm COPYONLY)
15-
add_test(NAME add_filter
16-
COMMAND add_filter gray_small.pgm 16 out.pgm)
17-
set_tests_properties(add_filter PROPERTIES
18-
LABELS HelloBaremetal
19-
PASS_REGULAR_EXPRESSION "Success!"
20-
SKIP_REGULAR_EXPRESSION "\\[SKIP\\]")
15+
add_test(NAME add_filter COMMAND add_filter gray_small.pgm 16 out.pgm)
16+
set_tests_properties(
17+
add_filter
18+
PROPERTIES
19+
LABELS HelloBaremetal
20+
PASS_REGULAR_EXPRESSION "Success!"
21+
SKIP_REGULAR_EXPRESSION "\\[SKIP\\]"
22+
)
2123
endif ()

apps/HelloBaremetal/cmake-external_project/CMakeLists.txt

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ set(GEN_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/generator)
1717
# Build generator executable with host compiler in external child project
1818
# and export as a package for CMake find_package()
1919
include(ExternalProject)
20-
ExternalProject_Add(gen_project
20+
ExternalProject_Add(
21+
gen_project
2122
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/generator
2223
BINARY_DIR ${GEN_BINARY_DIR}
2324
INSTALL_COMMAND ""
24-
CMAKE_ARGS
25-
-DGEN_EXE=${GEN_EXE}
25+
CMAKE_ARGS -DGEN_EXE=${GEN_EXE}
2626
)
2727

2828

@@ -39,27 +39,25 @@ set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)
3939
# Instead, declare the generator executable as imported, which is built in external project
4040
add_executable(${GEN_EXE} IMPORTED)
4141
# Specify the location of exe file to import
42-
set_property(TARGET ${GEN_EXE}
43-
PROPERTY IMPORTED_LOCATION ${GEN_BINARY_DIR}/${GEN_EXE})
42+
set_property(TARGET ${GEN_EXE} PROPERTY IMPORTED_LOCATION ${GEN_BINARY_DIR}/${GEN_EXE})
4443
# Associate with external project so that it invokes build process
4544
add_dependencies(${GEN_EXE} gen_project)
4645

4746
# Generate filter function
48-
add_halide_library(add
49-
FROM ${GEN_EXE}
50-
GENERATOR add
51-
# You may set Target feature in addition to what is set in the toolchain file
52-
FEATURES debug
53-
54-
# In baremetal, set parallelism=1 because thread support is unavailable.
55-
AUTOSCHEDULER Halide::Mullapudi2016
56-
PARAMS autoscheduler.parallelism=1)
47+
add_halide_library(
48+
add
49+
FROM ${GEN_EXE}
50+
GENERATOR add
51+
# You may set Target feature in addition to what is set in the toolchain file
52+
FEATURES debug
53+
# In baremetal, set parallelism=1 because thread support is unavailable.
54+
AUTOSCHEDULER Halide::Mullapudi2016
55+
PARAMS autoscheduler.parallelism=1
56+
)
5757

5858
# Main executable
5959
add_executable(add_filter ${SRC_DIR}/filter.cpp)
60-
target_link_libraries(add_filter PRIVATE
61-
Halide::ImageIO
62-
add)
60+
target_link_libraries(add_filter PRIVATE Halide::ImageIO add)
6361

6462
# Depending on the target CPU, we need to enable Arm NEON manually
6563
# if the executable contains any SIMD instructions.

apps/HelloBaremetal/cmake-external_project/generator/CMakeLists.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ project(HelloBaremetal-gen)
44

55
if (NOT DEFINED GEN_EXE)
66
message(FATAL_ERROR "CMakeVariable GEN_EXE is not set")
7-
endif()
7+
endif ()
88

99
# Set up C++ language settings
1010
set(CMAKE_CXX_STANDARD 17)
@@ -16,5 +16,4 @@ set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..)
1616
find_package(Halide REQUIRED) # We need Halide::Generator
1717

1818
# Build generator
19-
add_halide_generator(${GEN_EXE}
20-
SOURCES ${SRC_DIR}/add_generator.cpp)
19+
add_halide_generator(${GEN_EXE} SOURCES ${SRC_DIR}/add_generator.cpp)

apps/HelloBaremetal/cmake-super_build/CMakeLists.txt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,29 @@ set(GEN_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/generator)
1414
# Step 1
1515
# Build generator executable with host compiler in external child project
1616
# and export as a package for CMake find_package()
17-
ExternalProject_Add(gen_project
17+
ExternalProject_Add(
18+
gen_project
1819
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/generator
1920
BINARY_DIR ${GEN_BINARY_DIR}
2021
INSTALL_COMMAND ""
2122
CMAKE_ARGS
22-
-DGEN_PACKAGE=${GEN_PACKAGE}
23-
-DGEN_NAMESPACE=${GEN_NAMESPACE}
24-
-DGEN_EXE=${GEN_EXE}
23+
-DGEN_PACKAGE=${GEN_PACKAGE}
24+
-DGEN_NAMESPACE=${GEN_NAMESPACE}
25+
-DGEN_EXE=${GEN_EXE}
2526
)
2627

2728
# Step 2
2829
# Build application with cross compiler,
2930
# where the generator executable built in Step 1 is imported and called
3031

31-
ExternalProject_Add(app_project
32+
ExternalProject_Add(
33+
app_project
3234
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/app
3335
INSTALL_COMMAND ""
3436
DEPENDS gen_project # To make sure generator is ready
3537
CMAKE_ARGS
36-
-DCMAKE_TOOLCHAIN_FILE=${APP_TOOLCHAIN_FILE}
37-
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_CURRENT_BINARY_DIR}/bin
38-
-D${GEN_PACKAGE}_ROOT:FILEPATH=${GEN_BINARY_DIR}
39-
-DGEN_TARGET=${GEN_NAMESPACE}${GEN_EXE}
38+
-DCMAKE_TOOLCHAIN_FILE=${APP_TOOLCHAIN_FILE}
39+
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_CURRENT_BINARY_DIR}/bin
40+
-D${GEN_PACKAGE}_ROOT:FILEPATH=${GEN_BINARY_DIR}
41+
-DGEN_TARGET=${GEN_NAMESPACE}${GEN_EXE}
4042
)

apps/HelloBaremetal/cmake-super_build/app/CMakeLists.txt

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ project(HelloBaremetal-app LANGUAGES C CXX ASM)
55

66
if (NOT DEFINED GEN_TARGET)
77
message(FATAL_ERROR "CMakeVariable GEN_TARGET is not set")
8-
endif()
8+
endif ()
99

1010
# Set up C++ language settings
1111
set(CMAKE_CXX_STANDARD 17)
@@ -21,21 +21,20 @@ set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..)
2121
find_package(HelloBaremetal-add_generator REQUIRED)
2222

2323
# Generate filter function
24-
add_halide_library(add
25-
FROM ${GEN_TARGET}
26-
GENERATOR add
27-
# You may set Target feature in addition to what is set in the toolchain file
28-
FEATURES debug
29-
30-
# In baremetal, set parallelism=1 because thread support is unavailable.
31-
AUTOSCHEDULER Halide::Mullapudi2016
32-
PARAMS autoscheduler.parallelism=1)
24+
add_halide_library(
25+
add
26+
FROM ${GEN_TARGET}
27+
GENERATOR add
28+
# You may set Target feature in addition to what is set in the toolchain file
29+
FEATURES debug
30+
# In baremetal, set parallelism=1 because thread support is unavailable.
31+
AUTOSCHEDULER Halide::Mullapudi2016
32+
PARAMS autoscheduler.parallelism=1
33+
)
3334

3435
# Main executable
3536
add_executable(add_filter ${SRC_DIR}/filter.cpp)
36-
target_link_libraries(add_filter PRIVATE
37-
Halide::ImageIO
38-
add)
37+
target_link_libraries(add_filter PRIVATE Halide::ImageIO add)
3938

4039
# Depending on the target CPU, we need to enable Arm NEON manually
4140
# if the executable contains any SIMD instructions.

0 commit comments

Comments
 (0)