Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ee6f7dc
Autoscheduler test reorg, part 1
steven-johnson Oct 5, 2022
6fff600
Fixes
steven-johnson Oct 5, 2022
2fce574
Autoscheduler test reorg, part 2
steven-johnson Oct 5, 2022
4c46110
Update CMakeLists.txt
steven-johnson Oct 5, 2022
2a8d0eb
trigger buildbots
steven-johnson Oct 5, 2022
7edc7da
Update CMakeLists.txt
steven-johnson Oct 5, 2022
6950373
Merge branch 'srj/autoscheduler-tests-1' into srj/autoscheduler-tests-2
steven-johnson Oct 5, 2022
cf40033
fixes
steven-johnson Oct 5, 2022
4949ae1
Update mat_mul.cpp
steven-johnson Oct 5, 2022
83b99c4
Merge branch 'srj/autoscheduler-tests-1' into srj/autoscheduler-tests-2
steven-johnson Oct 5, 2022
4544733
fixes
steven-johnson Oct 5, 2022
5d76be4
Merge branch 'srj/autoscheduler-tests-1' into srj/autoscheduler-tests-2
steven-johnson Oct 5, 2022
09e7264
Autoscheduler test reorg, part 3
steven-johnson Oct 5, 2022
349c59e
Merge branch 'srj/autoscheduler-tests-2' into srj/autoscheduler-tests-3
steven-johnson Oct 5, 2022
f701650
Update reorder.cpp
steven-johnson Oct 5, 2022
7325a05
Merge branch 'srj/autoscheduler-tests-1' into srj/autoscheduler-tests-2
steven-johnson Oct 5, 2022
e7e82d6
Merge branch 'srj/autoscheduler-tests-2' into srj/autoscheduler-tests-3
steven-johnson Oct 5, 2022
ceebfeb
fixes
steven-johnson Oct 5, 2022
7d44b80
Update max_filter.cpp
steven-johnson Oct 5, 2022
c353c8d
Merge branch 'srj/autoscheduler-tests-1' into srj/autoscheduler-tests-2
steven-johnson Oct 6, 2022
961c1ad
Merge branch 'srj/autoscheduler-tests-2' into srj/autoscheduler-tests-3
steven-johnson Oct 6, 2022
e81df5a
Update CMakeLists.txt
steven-johnson Oct 6, 2022
e12ffac
Merge branch 'srj/autoscheduler-tests-1' into srj/autoscheduler-tests-2
steven-johnson Oct 6, 2022
aaac6bf
Merge branch 'srj/autoscheduler-tests-2' into srj/autoscheduler-tests-3
steven-johnson Oct 6, 2022
fac8ea7
Update CMakeLists.txt
steven-johnson Oct 6, 2022
2b279fe
Merge branch 'main' into srj/autoscheduler-tests-3
steven-johnson Oct 6, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -1177,6 +1177,7 @@ GENERATOR_EXTERNAL_TEST_GENERATOR := $(shell ls $(ROOT_DIR)/test/generator/*_gen
TUTORIALS = $(filter-out %_generate.cpp, $(shell ls $(ROOT_DIR)/tutorial/*.cpp))
MULLAPUDI2016_TESTS = $(shell ls $(ROOT_DIR)/test/autoschedulers/mullapudi2016/*.cpp)
LI2018_TESTS = $(shell ls $(ROOT_DIR)/test/autoschedulers/li2018/test.cpp)
ADAMS2019_TESTS = $(shell ls $(ROOT_DIR)/test/autoschedulers/adams2019/test.cpp)

test_correctness: $(CORRECTNESS_TESTS:$(ROOT_DIR)/test/correctness/%.cpp=quiet_correctness_%) $(CORRECTNESS_TESTS:$(ROOT_DIR)/test/correctness/%.c=quiet_correctness_%)
test_performance: $(PERFORMANCE_TESTS:$(ROOT_DIR)/test/performance/%.cpp=performance_%)
Expand Down Expand Up @@ -1295,7 +1296,8 @@ build_tests: $(CORRECTNESS_TESTS:$(ROOT_DIR)/test/correctness/%.cpp=$(BIN_DIR)/c
$(GENERATOR_EXTERNAL_TESTS:$(ROOT_DIR)/test/generator/%_aottest.cpp=$(BIN_DIR)/$(TARGET)/generator_aot_%) \
$(GENERATOR_EXTERNAL_TESTS:$(ROOT_DIR)/test/generator/%_jittest.cpp=$(BIN_DIR)/generator_jit_%) \
$(MULLAPUDI2016_TESTS:$(ROOT_DIR)/test/autoschedulers/mullapudi2016/%.cpp=$(BIN_DIR)/mullapudi2016_%) \
$(LI2018_TESTS:$(ROOT_DIR)/test/autoschedulers/li2018/%.cpp=$(BIN_DIR)/li2018_%)
$(LI2018_TESTS:$(ROOT_DIR)/test/autoschedulers/li2018/%.cpp=$(BIN_DIR)/li2018_%) \
$(ADAMS2019_TESTS:$(ROOT_DIR)/test/autoschedulers/adams2019/%.cpp=$(BIN_DIR)/adams2019_%)

clean_generator:
rm -rf $(BIN_DIR)/*.generator
Expand Down Expand Up @@ -1377,6 +1379,9 @@ $(BIN_DIR)/mullapudi2016_%: $(ROOT_DIR)/test/autoschedulers/mullapudi2016/%.cpp
$(BIN_DIR)/li2018_%: $(ROOT_DIR)/test/autoschedulers/li2018/%.cpp $(BIN_DIR)/libHalide.$(SHARED_EXT) $(INCLUDE_DIR)/Halide.h
$(CXX) $(TEST_CXX_FLAGS) $(OPTIMIZE_FOR_BUILD_TIME) $< -I$(INCLUDE_DIR) $(TEST_LD_FLAGS) -o $@

$(BIN_DIR)/adams2019_%: $(ROOT_DIR)/test/autoschedulers/adams2019/%.cpp $(BIN_DIR)/libHalide.$(SHARED_EXT) $(INCLUDE_DIR)/Halide.h
$(CXX) $(TEST_CXX_FLAGS) $(OPTIMIZE_FOR_BUILD_TIME) $< -I$(INCLUDE_DIR) $(TEST_LD_FLAGS) -o $@

# TODO(srj): this doesn't auto-delete, why not?
.INTERMEDIATE: $(BIN_DIR)/%.generator

Expand Down Expand Up @@ -2018,10 +2023,12 @@ li2018_%: $(BIN_DIR)/li2018_% $(BIN_LI2018)
cd $(TMP_DIR) ; $(CURDIR)/$< $(realpath $(BIN_LI2018))
@-echo

# The other autoschedulers contain their own tests
test_adams2019: distrib
$(MAKE) -f $(SRC_DIR)/autoschedulers/adams2019/Makefile test \
HALIDE_DISTRIB_PATH=$(CURDIR)/$(DISTRIB_DIR)
test_adams2019: $(ADAMS2019_TESTS:$(ROOT_DIR)/test/autoschedulers/adams2019/%.cpp=adams2019_%)

adams2019_test: $(BIN_DIR)/adams2019_test $(BIN_ADAMS2019) $(SRC_DIR)/autoschedulers/adams2019/baseline.weights
@-mkdir -p $(TMP_DIR)
cd $(TMP_DIR) ; $(CURDIR)/$< $(realpath $(BIN_ADAMS2019)) $(realpath $(SRC_DIR)/autoschedulers/adams2019/baseline.weights)
@-echo

time_compilation_test_%: $(BIN_DIR)/test_%
$(TIME_COMPILATION) compile_times_correctness.csv make -f $(THIS_MAKEFILE) $(@:time_compilation_test_%=test_%)
Expand Down
97 changes: 13 additions & 84 deletions src/autoschedulers/adams2019/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,7 @@
# Build rules for the Adams2019 autoscheduler library
##

function(add_adams2019_test NAME)
set(options "")
set(oneValueArgs ENVIRONMENT)
set(multiValueArgs COMMAND LABELS)
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

if (NOT ARGS_COMMAND)
set(ARGS_COMMAND ${NAME})
endif()

if (NOT ARGS_LABELS)
set(ARGS_LABELS "")
endif()
list(APPEND ARGS_LABELS Adams2019)
list(APPEND ARGS_LABELS auto_schedule)

add_test(NAME ${NAME}
COMMAND ${ARGS_COMMAND})
set_tests_properties(${NAME}
PROPERTIES
LABELS "${ARGS_LABELS}"
ENVIRONMENT "${ENVIRONMENT}")
endfunction()


# =================================================================
# weights
set(WF_CPP baseline.cpp)
configure_file(baseline.weights baseline.weights COPYONLY)
Expand Down Expand Up @@ -59,6 +35,7 @@ add_executable(adams2019_retrain_cost_model
$<TARGET_OBJECTS:adams2019_weights_obj>)
target_link_libraries(adams2019_retrain_cost_model PRIVATE ASLog adams2019_cost_model adams2019_train_cost_model Halide::Halide Halide::Plugin)

# =================================================================
##
# Main autoscheduler library
##
Expand All @@ -76,45 +53,6 @@ add_autoscheduler(NAME Adams2019

target_link_libraries(Halide_Adams2019 PRIVATE ASLog ParamParser adams2019_cost_model adams2019_train_cost_model)

##
# Tests and demos
# TODO(#4053): move these to a separate folder since they're tests.
##

# =================================================================

add_executable(adams2019_demo.generator demo_generator.cpp)
target_link_libraries(adams2019_demo.generator PRIVATE Halide::Generator)

add_halide_library(adams2019_demo FROM adams2019_demo.generator
GENERATOR demo
TARGETS cmake
AUTOSCHEDULER Halide::Adams2019
REGISTRATION DEMO_REGISTRATION_FILE)

add_executable(adams2019_demo_apps_autoscheduler ${DEMO_REGISTRATION_FILE})
target_link_libraries(adams2019_demo_apps_autoscheduler PRIVATE adams2019_demo Halide::RunGenMain)

add_adams2019_test(adams2019_demo_apps_autoscheduler
COMMAND adams2019_demo_apps_autoscheduler --benchmarks=all --benchmark_min_time=1 --estimate_all)

# =================================================================

add_executable(adams2019_included_schedule_file.generator included_schedule_file_generator.cpp)
target_link_libraries(adams2019_included_schedule_file.generator PRIVATE Halide::Generator)

add_halide_library(adams2019_included_schedule_file FROM adams2019_included_schedule_file.generator
GENERATOR included_schedule_file
TARGETS cmake
AUTOSCHEDULER Halide::Adams2019
REGISTRATION adams2019_included_schedule_reg)

add_executable(adams2019_demo_included_schedule_file ${adams2019_included_schedule_reg})
target_link_libraries(adams2019_demo_included_schedule_file PRIVATE adams2019_included_schedule_file Halide::RunGenMain)

add_adams2019_test(adams2019_demo_included_schedule_file
COMMAND adams2019_demo_included_schedule_file --benchmarks=all --benchmark_min_time=1 --estimate_all)

# ====================================================
# Auto-tuning support utilities.
# TODO(#4053): implement auto-tuning support in CMake?
Expand All @@ -128,27 +66,18 @@ add_executable(adams2019_weightsdir_to_weightsfile weightsdir_to_weightsfile.cpp
target_link_libraries(adams2019_weightsdir_to_weightsfile PRIVATE Halide::Runtime)

# =================================================================
# Smaller tests
# Tests for private/internal functionality of Adams2019 (vs for public functionality,
# which is handled in tests/autoschedulers/Adams2019)

if (BUILD_SHARED_LIBS)
add_executable(adams2019_test_apps_autoscheduler test.cpp)
target_link_libraries(adams2019_test_apps_autoscheduler PRIVATE Halide::Halide Halide::Tools ${CMAKE_DL_LIBS})
if (WITH_TESTS)

add_adams2019_test(adams2019_test_apps_autoscheduler
COMMAND adams2019_test_apps_autoscheduler $<TARGET_FILE:Halide_Adams2019> ${CMAKE_CURRENT_SOURCE_DIR}/baseline.weights
LABELS multithreaded
ENVIRONMENT "LD_LIBRARY_PATH=$<TARGET_FILE_DIR:Halide_Adams2019>:$ENV{LD_LIBRARY_PATH}")
endif ()

##

add_executable(adams2019_test_perfect_hash_map test_perfect_hash_map.cpp)

add_adams2019_test(adams2019_test_perfect_hash_map)

##
add_executable(adams2019_test_perfect_hash_map test_perfect_hash_map.cpp)
add_test(NAME adams2019_test_perfect_hash_map COMMAND adams2019_test_perfect_hash_map)
set_tests_properties(adams2019_test_perfect_hash_map PROPERTIES LABELS "adams2019;autoschedulers;auto_schedule")

add_executable(adams2019_test_function_dag test_function_dag.cpp FunctionDAG.cpp)
target_link_libraries(adams2019_test_function_dag PRIVATE ASLog Halide::Halide Halide::Tools Halide::Plugin)
add_executable(adams2019_test_function_dag test_function_dag.cpp FunctionDAG.cpp)
target_link_libraries(adams2019_test_function_dag PRIVATE ASLog Halide::Halide Halide::Tools Halide::Plugin)
add_test(NAME adams2019_test_function_dag COMMAND adams2019_test_function_dag)
set_tests_properties(adams2019_test_function_dag PROPERTIES LABELS "adams2019;autoschedulers;auto_schedule")

add_adams2019_test(adams2019_test_function_dag)
endif()
123 changes: 1 addition & 122 deletions src/autoschedulers/adams2019/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -112,129 +112,8 @@ $(BIN)/weightsdir_to_weightsfile: $(SRC)/weightsdir_to_weightsfile.cpp $(SRC)/We
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $^ $(OPTIMIZE) -o $@

# A sample generator to autoschedule. Note that if it statically links
# to libHalide, then it must be build with $(USE_EXPORT_DYNAMIC), or the
# autoscheduler can't find the libHalide symbols that it needs.
$(GENERATOR_BIN)/demo.generator: $(SRC)/demo_generator.cpp $(GENERATOR_DEPS)
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(USE_EXPORT_DYNAMIC) -g $(filter %.cpp,$^) -o $@ $(LIBHALIDE_LDFLAGS)

# To use the autoscheduler, set a few environment variables and use the -p flag to the generator to load the autoscheduler as a plugin
$(BIN)/%/demo.a: $(GENERATOR_BIN)/demo.generator $(BIN)/libautoschedule_adams2019.$(PLUGIN_EXT)
@mkdir -p $(@D)
$(GENERATOR_BIN)/demo.generator -g demo -o $(@D) -f demo target=$* \
autoscheduler=Adams2019 \
autoscheduler.parallelism=32 \
autoscheduler.weights_path=$(SRC)/baseline.weights \
-p $(BIN)/libautoschedule_adams2019.$(PLUGIN_EXT)

$(BIN)/%/demo.rungen: $(BIN)/%/RunGenMain.o $(BIN)/%/demo.registration.cpp $(BIN)/%/demo.a
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) -I$(BIN)/$* $^ -o $@ $(HALIDE_SYSTEM_LIBS) $(IMAGE_IO_FLAGS)

# demonstrates single-shot use of the autoscheduler
demo: $(BIN)/$(HL_TARGET)/demo.rungen $(BIN)/libautoschedule_adams2019.$(PLUGIN_EXT)
$< --benchmarks=all --benchmark_min_time=1 --estimate_all

# demonstrates an autotuning loop
# (using $(BIN) and $(SRC) here seems overkill, but makes copy-n-paste elsewhere easier)
autotune: $(GENERATOR_BIN)/demo.generator $(BIN)/featurization_to_sample $(BIN)/get_host_target $(BIN)/retrain_cost_model $(BIN)/libautoschedule_adams2019.$(PLUGIN_EXT) $(SRC)/autotune_loop.sh
@mkdir -p $(@D)
bash $(SRC)/autotune_loop.sh \
$(GENERATOR_BIN)/demo.generator \
demo \
"" \
$(SRC)/baseline.weights \
$(BIN) \
$(HALIDE_DISTRIB_PATH) \
$(BIN)/samples

$(BIN)/test_perfect_hash_map: $(SRC)/test_perfect_hash_map.cpp $(SRC)/PerfectHashMap.h
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $< -o $@

$(BIN)/test_function_dag: $(SRC)/test_function_dag.cpp $(SRC)/FunctionDAG.h $(SRC)/FunctionDAG.cpp $(COMMON_DIR)/ASLog.h $(COMMON_DIR)/ASLog.cpp
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(USE_EXPORT_DYNAMIC) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)

# Simple jit-based test
$(BIN)/%/test: $(SRC)/test.cpp $(BIN)/libautoschedule_adams2019.$(PLUGIN_EXT)
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(USE_EXPORT_DYNAMIC) $< -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)

test_perfect_hash_map: $(BIN)/test_perfect_hash_map
$^

test_function_dag: $(BIN)/test_function_dag
$^

run_test: $(BIN)/$(HL_TARGET)/test
LD_LIBRARY_PATH=$(BIN):$(LD_LIBRARY_PATH) $< $(BIN)/libautoschedule_adams2019.$(PLUGIN_EXT) $(SRC)/baseline.weights

.PHONY: test clean

# Note that 'make build' and 'make test' is used by Halide buildbots
# to spot-check changes, so it's important to try a little of each of
# the important paths here, including single-shot and autotune-loop
build: $(BIN)/$(HL_TARGET)/test \
$(BIN)/test_perfect_hash_map \
$(BIN)/test_function_dag \
$(BIN)/$(HL_TARGET)/included_schedule_file.rungen \
$(GENERATOR_BIN)/demo.generator \
$(BIN)/featurization_to_sample \
$(BIN)/get_host_target \
$(BIN)/retrain_cost_model \
$(BIN)/libautoschedule_adams2019.$(PLUGIN_EXT)

test: run_test test_perfect_hash_map test_function_dag demo test_included_schedule_file autotune
.PHONY: clean

clean:
rm -rf $(BIN)

# A sample generator to demonstrate including autogenerated .sample.h
# files for scheduling purposes; the catch here is that we'll need
# to be able to compile the Generator two different ways:
#
# - one that will be used to generate the .schedule.h
# - one that will consume the .schedule.h generated above
#
# We'll use the preprocessor (GENERATING_SCHEDULE) to distinguish between these two.

$(GENERATOR_BIN)/included_schedule_file_none.generator: $(SRC)/included_schedule_file_generator.cpp $(GENERATOR_DEPS)
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(USE_EXPORT_DYNAMIC) -DGENERATING_SCHEDULE -g $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)

# This is the target you build to (re)generate the schedule file.
# (Note that we only need the schedule output, so we pass `-e schedule` to
# the Generator so that it can skip producing other outputs.)
$(BIN)/%/included_schedule_file.schedule.h: $(GENERATOR_BIN)/included_schedule_file_none.generator $(BIN)/libautoschedule_adams2019.$(PLUGIN_EXT)
@mkdir -p $(@D)
$< -g included_schedule_file -o $(@D) -f included_schedule_file target=$* \
autoscheduler=Adams2019 \
autoscheduler.parallelism=32 \
autoscheduler.weights_path=$(SRC)/baseline.weights \
-p $(BIN)/libautoschedule_adams2019.$(PLUGIN_EXT) -e schedule

# Note that this depends on included_schedule_file.schedule.h rather than $(BIN)/%/included_schedule_file.schedule.h --
# the former should be generated by something like
#
# make bin/host/included_schedule_file.schedule.h
# cp bin/host/included_schedule_file.schedule.h included_schedule_file.schedule.h
#
$(GENERATOR_BIN)/included_schedule_file.generator: $(SRC)/included_schedule_file_generator.cpp $(SRC)/included_schedule_file.schedule.h $(GENERATOR_DEPS)
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(USE_EXPORT_DYNAMIC) -g $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)

# Note that this does not depend on libauto_schedule nor does it call
# the autoscheduler at build time; it includes the generated schedule (included_schedule_file.schedule.h),
# which has been added to our local source control.
$(BIN)/%/included_schedule_file.a: $(GENERATOR_BIN)/included_schedule_file.generator
@mkdir -p $(@D)
$< -g included_schedule_file -o $(@D) -f included_schedule_file target=$*

$(BIN)/%/included_schedule_file.rungen: $(BIN)/%/RunGenMain.o $(BIN)/%/included_schedule_file.registration.cpp $(BIN)/%/included_schedule_file.a
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) -I$(BIN)/$* $^ -o $@ $(HALIDE_SYSTEM_LIBS) $(IMAGE_IO_FLAGS)

test_included_schedule_file: $(BIN)/$(HL_TARGET)/included_schedule_file.rungen
$^ --benchmarks=all --benchmark_min_time=1 --estimate_all
1 change: 1 addition & 0 deletions test/autoschedulers/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
add_subdirectory(adams2019)
add_subdirectory(li2018)
add_subdirectory(mullapudi2016)
84 changes: 84 additions & 0 deletions test/autoschedulers/adams2019/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
if (NOT TARGET Halide::Adams2019)
message(STATUS "Disabling adams2019 tests for static Halide")
return()
endif ()

##
# Build rules for the Adams2019 autoscheduler library
##

function(add_adams2019_test NAME)
set(options "")
set(oneValueArgs ENVIRONMENT)
set(multiValueArgs COMMAND LABELS)
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

if (NOT ARGS_COMMAND)
set(ARGS_COMMAND ${NAME})
endif()

if (NOT ARGS_LABELS)
set(ARGS_LABELS "")
endif()
list(APPEND ARGS_LABELS adams2019)
list(APPEND ARGS_LABELS autoschedulers)

add_test(NAME ${NAME}
COMMAND ${ARGS_COMMAND})
set_tests_properties(${NAME}
PROPERTIES
LABELS "${ARGS_LABELS}"
ENVIRONMENT "${ENVIRONMENT}")
endfunction()


##
# Tests and demos
# TODO(#4053): move these to a separate folder since they're tests.
##

# =================================================================

add_halide_generator(adams2019_demo.generator
SOURCES demo_generator.cpp)

add_halide_library(adams2019_demo FROM adams2019_demo.generator
GENERATOR demo
TARGETS cmake
AUTOSCHEDULER Halide::Adams2019
REGISTRATION DEMO_REGISTRATION_FILE)

add_executable(adams2019_demo_apps_autoscheduler ${DEMO_REGISTRATION_FILE})
target_link_libraries(adams2019_demo_apps_autoscheduler PRIVATE adams2019_demo Halide::RunGenMain)

add_adams2019_test(adams2019_demo_apps_autoscheduler
COMMAND adams2019_demo_apps_autoscheduler --benchmarks=all --benchmark_min_time=1 --estimate_all)

# =================================================================

add_halide_generator(adams2019_included_schedule_file.generator
SOURCES included_schedule_file_generator.cpp)

add_halide_library(adams2019_included_schedule_file FROM adams2019_included_schedule_file.generator
GENERATOR included_schedule_file
TARGETS cmake
AUTOSCHEDULER Halide::Adams2019
REGISTRATION adams2019_included_schedule_reg)

add_executable(adams2019_demo_included_schedule_file ${adams2019_included_schedule_reg})
target_link_libraries(adams2019_demo_included_schedule_file PRIVATE adams2019_included_schedule_file Halide::RunGenMain)

add_adams2019_test(adams2019_demo_included_schedule_file
COMMAND adams2019_demo_included_schedule_file --benchmarks=all --benchmark_min_time=1 --estimate_all)

# =================================================================
# Smaller tests

add_executable(adams2019_test_apps_autoscheduler test.cpp)
target_link_libraries(adams2019_test_apps_autoscheduler PRIVATE Halide::Halide Halide::Tools ${CMAKE_DL_LIBS})

add_adams2019_test(adams2019_test_apps_autoscheduler
COMMAND adams2019_test_apps_autoscheduler $<TARGET_FILE:Halide_Adams2019> $<TARGET_FILE_DIR:Halide_Adams2019>/baseline.weights
LABELS multithreaded
ENVIRONMENT "LD_LIBRARY_PATH=$<TARGET_FILE_DIR:Halide_Adams2019>:$ENV{LD_LIBRARY_PATH}")