1 #include "Halide.h" 2 3 extern "C" unsigned char external_code_extern_bitcode_32[]; 4 extern "C" int external_code_extern_bitcode_32_length; 5 extern "C" unsigned char external_code_extern_bitcode_64[]; 6 extern "C" int external_code_extern_bitcode_64_length; 7 extern "C" unsigned char external_code_extern_cpp_source[]; 8 extern "C" int external_code_extern_cpp_source_length; 9 10 namespace { 11 12 class ExternalCode : public Halide::Generator<ExternalCode> { 13 public: 14 GeneratorParam<bool> external_code_is_bitcode{"external_code_is_bitcode", true}; 15 Input<Buffer<int32_t>> input{"input", 2}; 16 Output<Buffer<float>> output{"output", 2}; 17 HalidePureExtern_1(float, gen_extern_tester, float); 18 generate()19 void generate() { 20 Var x("x"), y("y"); 21 Func f("f"); 22 23 unsigned char *code; 24 int code_length; 25 const char *name = "org.halide-lang.extern_code_extern"; 26 if (external_code_is_bitcode) { 27 Target target = get_target(); 28 if (target.bits == 64) { 29 code = external_code_extern_bitcode_64; 30 code_length = external_code_extern_bitcode_64_length; 31 } else { 32 code = external_code_extern_bitcode_32; 33 code_length = external_code_extern_bitcode_32_length; 34 } 35 std::vector<uint8_t> code_vector(code, code + code_length); 36 get_externs_map()->insert({name, 37 Halide::ExternalCode::bitcode_wrapper(target, code_vector, name)}); 38 } else { 39 code = external_code_extern_cpp_source; 40 code_length = external_code_extern_cpp_source_length; 41 std::vector<uint8_t> code_vector(code, code + code_length); 42 get_externs_map()->insert({name, 43 Halide::ExternalCode::c_plus_plus_code_wrapper(code_vector, name)}); 44 } 45 46 output(x, y) = gen_extern_tester(cast<float>(input(x, y))); 47 } 48 schedule()49 void schedule() { 50 } 51 }; 52 53 } // namespace 54 55 HALIDE_REGISTER_GENERATOR(ExternalCode, external_code) 56