Skip to content

Commit ed29832

Browse files
committed
Use ExternalProject for build tools x-compile
1 parent dfbe346 commit ed29832

9 files changed

+68
-17
lines changed

Makefile

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

971-
$(BIN_DIR)/build_halide_h: $(ROOT_DIR)/tools/build_halide_h.cpp
971+
$(BIN_DIR)/build_halide_h: $(ROOT_DIR)/src/tools/build_halide_h.cpp
972972
@-mkdir -p $(@D)
973973
$(CXX) -std=c++11 $< -o $@
974974

@@ -1081,7 +1081,7 @@ $(BUILD_DIR)/initmod.inlined_c.cpp: $(BIN_DIR)/binary2cpp $(SRC_DIR)/runtime/hal
10811081
$(BUILD_DIR)/initmod_ptx.%_ll.cpp: $(BIN_DIR)/binary2cpp $(SRC_DIR)/runtime/nvidia_libdevice_bitcode/libdevice.%.bc
10821082
./$(BIN_DIR)/binary2cpp halide_internal_initmod_ptx_$(basename $*)_ll < $(SRC_DIR)/runtime/nvidia_libdevice_bitcode/libdevice.$*.bc > $@
10831083

1084-
$(BIN_DIR)/binary2cpp: $(ROOT_DIR)/tools/binary2cpp.cpp
1084+
$(BIN_DIR)/binary2cpp: $(ROOT_DIR)/src/tools/binary2cpp.cpp
10851085
@mkdir -p $(@D)
10861086
$(CXX) $< -o $@
10871087

@@ -1390,7 +1390,7 @@ $(FILTERS_DIR)/cxx_mangling_externs.o: $(ROOT_DIR)/test/generator/cxx_mangling_e
13901390
$(FILTERS_DIR)/cxx_mangling.a: $(BIN_DIR)/cxx_mangling.generator $(FILTERS_DIR)/cxx_mangling_externs.o
13911391
@mkdir -p $(@D)
13921392
$(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"
1393-
$(ROOT_DIR)/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_externs.o
1393+
$(ROOT_DIR)/src/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_externs.o
13941394

13951395
ifneq ($(TEST_CUDA), )
13961396
# Also build with a gpu target to ensure that the GPU-Host generation
@@ -1399,7 +1399,7 @@ ifneq ($(TEST_CUDA), )
13991399
$(FILTERS_DIR)/cxx_mangling_gpu.a: $(BIN_DIR)/cxx_mangling.generator $(FILTERS_DIR)/cxx_mangling_externs.o
14001400
@mkdir -p $(@D)
14011401
$(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"
1402-
$(ROOT_DIR)/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_externs.o
1402+
$(ROOT_DIR)/src/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_externs.o
14031403
endif
14041404

14051405
$(FILTERS_DIR)/cxx_mangling_define_extern_externs.o: $(ROOT_DIR)/test/generator/cxx_mangling_define_extern_externs.cpp $(FILTERS_DIR)/cxx_mangling.h
@@ -1409,7 +1409,7 @@ $(FILTERS_DIR)/cxx_mangling_define_extern_externs.o: $(ROOT_DIR)/test/generator/
14091409
$(FILTERS_DIR)/cxx_mangling_define_extern.a: $(BIN_DIR)/cxx_mangling_define_extern.generator $(FILTERS_DIR)/cxx_mangling_define_extern_externs.o
14101410
@mkdir -p $(@D)
14111411
$(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"
1412-
$(ROOT_DIR)/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_define_extern_externs.o
1412+
$(ROOT_DIR)/src/tools/makelib.sh $@ $@ $(FILTERS_DIR)/cxx_mangling_define_extern_externs.o
14131413

14141414
# pyramid needs a custom arg.
14151415
$(FILTERS_DIR)/pyramid.a: $(BIN_DIR)/pyramid.generator

apps/support/autoscheduler.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ AUTOSCHED_WEIGHT_OBJECTS=$(AUTOSCHED_BIN)/baseline_weights.o
1313

1414
# TODO(srj): depending on something not in the distrib folder isn't strictly
1515
# kosher, but this is still experimental
16-
$(AUTOSCHED_BIN)/binary2cpp: ../../tools/binary2cpp.cpp
16+
$(AUTOSCHED_BIN)/binary2cpp: ../../src/tools/binary2cpp.cpp
1717
@mkdir -p $(@D)
1818
$(CXX) $< -o $@
1919

src/CMakeLists.txt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,48 @@ set(SOURCE_FILES
338338
WrapCalls.cpp
339339
)
340340

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

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)