Skip to content

Commit 927f7ab

Browse files
committed
Use ExternalProject for build tools x-compile
1 parent 52da814 commit 927f7ab

8 files changed

+69
-17
lines changed

Makefile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -958,7 +958,7 @@ $(INCLUDE_DIR)/HalidePyTorchCudaHelpers.h: $(SRC_DIR)/runtime/HalidePyTorchCudaH
958958
@mkdir -p $(@D)
959959
cp $< $(INCLUDE_DIR)/
960960

961-
$(BIN_DIR)/build_halide_h: $(ROOT_DIR)/tools/build_halide_h.cpp
961+
$(BIN_DIR)/build_halide_h: $(ROOT_DIR)/src/tools/build_halide_h.cpp
962962
@-mkdir -p $(@D)
963963
$(CXX) -std=c++11 $< -o $@
964964

@@ -1020,7 +1020,7 @@ $(BUILD_DIR)/initmod.inlined_c.cpp: $(BIN_DIR)/binary2cpp $(SRC_DIR)/runtime/hal
10201020
$(BUILD_DIR)/initmod_ptx.%_ll.cpp: $(BIN_DIR)/binary2cpp $(SRC_DIR)/runtime/nvidia_libdevice_bitcode/libdevice.%.bc
10211021
./$(BIN_DIR)/binary2cpp halide_internal_initmod_ptx_$(basename $*)_ll < $(SRC_DIR)/runtime/nvidia_libdevice_bitcode/libdevice.$*.bc > $@
10221022

1023-
$(BIN_DIR)/binary2cpp: $(ROOT_DIR)/tools/binary2cpp.cpp
1023+
$(BIN_DIR)/binary2cpp: $(ROOT_DIR)/src/tools/binary2cpp.cpp
10241024
@mkdir -p $(@D)
10251025
$(CXX) $< -o $@
10261026

@@ -1339,7 +1339,7 @@ $(FILTERS_DIR)/cxx_mangling_externs.o: $(ROOT_DIR)/test/generator/cxx_mangling_e
13391339
$(FILTERS_DIR)/cxx_mangling.a: $(BIN_DIR)/cxx_mangling.generator $(FILTERS_DIR)/cxx_mangling_externs.o
13401340
@mkdir -p $(@D)
13411341
$(CURDIR)/$< -g cxx_mangling $(GEN_AOT_OUTPUTS) -o $(CURDIR)/$(FILTERS_DIR) target=$(TARGET)-no_runtime-c_plus_plus_name_mangling -f "HalideTest::AnotherNamespace::cxx_mangling"
1342-
$(ROOT_DIR)/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_externs.o
1342+
$(ROOT_DIR)/src/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_externs.o
13431343

13441344
ifneq ($(TEST_CUDA), )
13451345
# Also build with a gpu target to ensure that the GPU-Host generation
@@ -1348,7 +1348,7 @@ ifneq ($(TEST_CUDA), )
13481348
$(FILTERS_DIR)/cxx_mangling_gpu.a: $(BIN_DIR)/cxx_mangling.generator $(FILTERS_DIR)/cxx_mangling_externs.o
13491349
@mkdir -p $(@D)
13501350
$(CURDIR)/$< -g cxx_mangling $(GEN_AOT_OUTPUTS) -o $(CURDIR)/$(FILTERS_DIR) target=$(TARGET)-no_runtime-c_plus_plus_name_mangling-cuda-cuda_capability_30 -f "HalideTest::cxx_mangling_gpu"
1351-
$(ROOT_DIR)/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_externs.o
1351+
$(ROOT_DIR)/src/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_externs.o
13521352
endif
13531353

13541354
$(FILTERS_DIR)/cxx_mangling_define_extern_externs.o: $(ROOT_DIR)/test/generator/cxx_mangling_define_extern_externs.cpp $(FILTERS_DIR)/cxx_mangling.h
@@ -1358,7 +1358,7 @@ $(FILTERS_DIR)/cxx_mangling_define_extern_externs.o: $(ROOT_DIR)/test/generator/
13581358
$(FILTERS_DIR)/cxx_mangling_define_extern.a: $(BIN_DIR)/cxx_mangling_define_extern.generator $(FILTERS_DIR)/cxx_mangling_define_extern_externs.o
13591359
@mkdir -p $(@D)
13601360
$(CURDIR)/$< -g cxx_mangling_define_extern $(GEN_AOT_OUTPUTS) -o $(CURDIR)/$(FILTERS_DIR) target=$(TARGET)-no_runtime-c_plus_plus_name_mangling-user_context -f "HalideTest::cxx_mangling_define_extern"
1361-
$(ROOT_DIR)/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_define_extern_externs.o
1361+
$(ROOT_DIR)/src/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_define_extern_externs.o
13621362

13631363
# pyramid needs a custom arg.
13641364
$(FILTERS_DIR)/pyramid.a: $(BIN_DIR)/pyramid.generator

src/CMakeLists.txt

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,48 @@ set(SOURCE_FILES
341341
WrapCalls.cpp
342342
)
343343

344+
##
345+
# Build time tools
346+
##
347+
348+
if (CMAKE_CROSSCOMPILING)
349+
# Note: using CMAKE_EXECUTABLE_SUFFIX breaks cross-OS builds involving Windows.
350+
include(ExternalProject)
351+
ExternalProject_Add(host-tools
352+
BUILD_BYPRODUCTS
353+
"<INSTALL_DIR>/bin/build_halide_h${CMAKE_EXECUTABLE_SUFFIX}"
354+
"<INSTALL_DIR>/bin/binary2cpp${CMAKE_EXECUTABLE_SUFFIX}"
355+
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/tools
356+
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/host-tools
357+
CMAKE_ARGS
358+
-D CMAKE_TOOLCHAIN_FILE=${Halide_HOST_TOOLCHAIN_FILE}
359+
-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
360+
-D CMAKE_INSTALL_PREFIX=<INSTALL_DIR>
361+
BUILD_ALWAYS YES)
362+
363+
# We avoid a full super-build by manually creating imported targets here.
364+
# If we start adding lots of build-time tools, we should migrate to the
365+
# export() mechanism, which would also avoid the cross-OS bug.
366+
ExternalProject_Get_Property(host-tools INSTALL_DIR)
367+
368+
add_executable(build_halide_h IMPORTED GLOBAL)
369+
set_target_properties(build_halide_h
370+
PROPERTIES
371+
IMPORTED_LOCATION "${INSTALL_DIR}/bin/build_halide_h${CMAKE_EXECUTABLE_SUFFIX}"
372+
CROSSCOMPILING_EMULATOR "")
373+
add_dependencies(build_halide_h host-tools)
374+
375+
add_executable(binary2cpp IMPORTED GLOBAL)
376+
set_target_properties(binary2cpp
377+
PROPERTIES
378+
IMPORTED_LOCATION "${INSTALL_DIR}/bin/binary2cpp${CMAKE_EXECUTABLE_SUFFIX}"
379+
CROSSCOMPILING_EMULATOR "")
380+
add_dependencies(binary2cpp host-tools)
381+
else ()
382+
# Do the safe, reliable thing when not cross-compiling.
383+
add_subdirectory(tools)
384+
endif ()
385+
344386
##
345387
# Build and import the runtime.
346388
##
@@ -351,11 +393,12 @@ add_subdirectory(runtime)
351393
# Build the Halide mono-header.
352394
##
353395

396+
file(MAKE_DIRECTORY ${Halide_BINARY_DIR}/include)
397+
354398
set(HALIDE_H "${Halide_BINARY_DIR}/include/Halide.h")
355399
set(LICENSE_PATH "${Halide_SOURCE_DIR}/LICENSE.txt")
356400
add_custom_command(OUTPUT "${Halide_BINARY_DIR}/include/Halide.h"
357401
VERBATIM
358-
COMMAND ${CMAKE_COMMAND} -E make_directory "$<SHELL_PATH:${Halide_BINARY_DIR}/include>"
359402
COMMAND build_halide_h "$<SHELL_PATH:${LICENSE_PATH}>" ${HEADER_FILES} > "$<SHELL_PATH:${HALIDE_H}>"
360403
WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}"
361404
DEPENDS build_halide_h "${LICENSE_PATH}" ${HEADER_FILES})

src/tools/CMakeLists.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
cmake_minimum_required(VERSION 3.16)
2+
project(host-tools)
3+
4+
# Require standard C++14
5+
set(CMAKE_CXX_STANDARD 14)
6+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
7+
set(CMAKE_CXX_EXTENSIONS OFF)
8+
9+
add_executable(binary2cpp binary2cpp.cpp)
10+
add_executable(build_halide_h build_halide_h.cpp)
11+
add_executable(find_inverse find_inverse.cpp)
12+
13+
# Don't install when included via add_subdirectory.
14+
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
15+
include(GNUInstallDirs)
16+
install(TARGETS build_halide_h binary2cpp find_inverse
17+
EXPORT host-tools
18+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
19+
endif ()
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

tools/CMakeLists.txt

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,3 @@
1-
##
2-
# Build time tools
3-
##
4-
5-
add_executable(build_halide_h build_halide_h.cpp)
6-
target_compile_options(build_halide_h PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/wd4996>)
7-
8-
add_executable(binary2cpp binary2cpp.cpp)
9-
target_compile_options(binary2cpp PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/wd4996>)
10-
111
##
122
# Interface target for enabling PNG/JPEG support in Halide
133
##
@@ -54,4 +44,4 @@ add_library(Halide::Tools ALIAS Halide_Tools)
5444
target_include_directories(Halide_Tools
5545
INTERFACE
5646
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
57-
set_target_properties(Halide_Tools PROPERTIES EXPORT_NAME Tools)
47+
set_target_properties(Halide_Tools PROPERTIES EXPORT_NAME Tools)

0 commit comments

Comments
 (0)