+###
+### Common function(s)
+###
+function(get_test_configuration PREFIX)
+ set(PROTOTXT_FILE "${PREFIX}.prototxt" PARENT_SCOPE)
+ set(PROTOTXT_TARGET enco_caffe_test_${PREFIX}_prototxt PARENT_SCOPE)
+ set(CAFFEMODEL_FILE "${PREFIX}.caffemodel" PARENT_SCOPE)
+ set(CAFFEMODEL_TARGET enco_caffe_test_${PREFIX}_caffemodel PARENT_SCOPE)
+ set(SOURCE_FILE ${PREFIX}.cpp PARENT_SCOPE)
+ set(SOURCE_TARGET enco_caffe_test_${PREFIX}_generated PARENT_SCOPE)
+endfunction(get_test_configuration)
+
+###
+### Prepare test(s)
+###
if(NOT TARGET caffegen)
return()
endif(NOT TARGET caffegen)
return()
endif(NOT TARGET enco_caffe_frontend)
-if(NOT TARGET ann_ref_static)
- return()
-endif(NOT TARGET ann_ref_static)
-
-find_program(H5DIFF h5diff)
-
-if (NOT H5DIFF)
- return()
-endif(NOT H5DIFF)
-
-message(STATUS "Enable enco(caffe) test")
-
-file(GLOB MODELS
- RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- "*/test.prototxt")
+file(GLOB MODELS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/test.prototxt")
foreach(MODEL IN ITEMS ${MODELS})
get_filename_component(PREFIX ${MODEL} DIRECTORY)
+ get_test_configuration(${PREFIX})
set(MODEL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${MODEL})
- set(PROTOTXT_FILE ${PREFIX}.prototxt)
- set(CAFFEMODEL_FILE ${PREFIX}.caffemodel)
- set(CAFFEMODEL_TARGET enco_caffe_test_${PREFIX}_caffemodel)
- set(SOURCE_FILE ${PREFIX}.cpp)
- set(SOURCE_TARGET enco_caffe_test_${PREFIX}_generated)
- set(BINDER_TARGET enco_caffe_test_${PREFIX}_binder)
-
# Copy prototxt
- file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PROTOTXT_FILE} INPUT ${MODEL_FILE})
+ add_custom_target(${PROTOTXT_TARGET}
+ ALL ${CMAKE_COMMAND} -E copy "${MODEL_FILE}"
+ "${CMAKE_CURRENT_BINARY_DIR}/${PROTOTXT_FILE}"
+ COMMENT "Generating ${PROTOTXT_FILE}")
# Generate caffemodel
add_custom_target(${CAFFEMODEL_TARGET}
| $<TARGET_FILE:caffegen> init
| $<TARGET_FILE:caffegen> encode
> ${CAFFEMODEL_FILE}
- DEPENDS caffegen)
+ DEPENDS caffegen ${PROTOTXT_TARGET}
+ COMMENT "Generating ${CAFFEMODEL_FILE}")
# Generate C++ code
add_custom_target(${SOURCE_TARGET}
--frontend-arg ${PROTOTXT_FILE}
--frontend-arg ${CAFFEMODEL_FILE}
> ${SOURCE_FILE}
- DEPENDS enco-cli enco_caffe_frontend)
+ DEPENDS enco-cli enco_caffe_frontend ${CAFFEMODEL_TARGET}
+ COMMENT "Generating ${SOURCE_FILE}")
set_source_files_properties(${SOURCE_FILE} PROPERTIES GENERATED TRUE)
+ list(APPEND CANDIDATES ${PREFIX})
+endforeach(MODEL)
+
+###
+### Build test
+###
+message(STATUS "Enable enco(caffe) build test")
+
+foreach(PREFIX IN ITEMS ${CANDIDATES})
+ if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PREFIX}/BUILD")
+ continue()
+ endif()
+
+ get_test_configuration(${PREFIX})
+
+ # Compile shared library (from generated C++ code)
+ set(LIBRARY_TARGET enco_caffe_test_${PREFIX}_lib)
+
+ add_library(${LIBRARY_TARGET} SHARED ${SOURCE_FILE})
+ target_link_libraries(${LIBRARY_TARGET} ann_api)
+ add_dependencies(${LIBRARY_TARGET} ${SOURCE_TARGET})
+endforeach(PREFIX)
+
+###
+### Inference test
+###
+if(NOT TARGET ann_ref_static)
+ return()
+endif(NOT TARGET ann_ref_static)
+
+find_program(H5DIFF h5diff)
+
+if (NOT H5DIFF)
+ return()
+endif(NOT H5DIFF)
+
+message(STATUS "Enable enco(caffe) inference test")
+
+foreach(PREFIX IN ITEMS ${CANDIDATES})
+ if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PREFIX}/INFERENCE")
+ continue()
+ endif()
+
+ set(BINDER_TARGET enco_caffe_test_${PREFIX}_binder)
+
# Compile nnkit binder (from generated C++ code)
add_library(${BINDER_TARGET} SHARED binder.cpp ${SOURCE_FILE})
target_link_libraries(${BINDER_TARGET} nnkit_intf_backend)
add_dependencies(${BINDER_TARGET} ${SOURCE_TARGET})
list(APPEND TESTS ${PREFIX})
-endforeach(MODEL)
+endforeach(PREFIX)
# Run tests
add_test(NAME enco_test_caffe