diff --git a/.travis.yml b/.travis.yml index c7715e3a53f..49cca6d5347 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,7 +44,8 @@ script: ## CPU-only: comprehensive - cmake -DBUILD_PYTHON=ON -DBUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Release -DCPU_ONLY=ON .. - make --keep-going --jobs=$NUM_THREADS - - cd test && ./test --gtest_shuffle --gtest_filter="-*GPU*" && cd - + - make runtest --keep-going --jobs=$NUM_THREADS + - make lint --jobs=$NUM_THREADS - make clean && rm -rf * ## Cleaning - cd .. diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cf08fe0900..8df7412b2cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,11 +23,6 @@ if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) endif() ### Configuration ########################################################################### - -# Enable CTest from top build directory -#disable ctest -#enable_testing() - # Compiler Flags set(CMAKE_CXX_COMPILER_FLAGS ${CMAKE_CXX_COMPILER_FLAGS} -Wall) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fPIC) @@ -43,8 +38,11 @@ set(${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/include) include_directories(${${PROJECT_NAME}_INCLUDE_DIRS}) include_directories(${CMAKE_SOURCE_DIR}/src) +# CMake Scripts dir +set(CMAKE_SCRIPT_DIR ${CMAKE_SOURCE_DIR}/CMakeScripts) + # CMake module path for custom module finding -set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/CMakeScripts) +set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SCRIPT_DIR}) # CUDA is required globally if(NOT CPU_ONLY) @@ -73,8 +71,19 @@ if(BUILD_MATLAB) add_subdirectory(matlab) endif() +### Lint Target Setup ########################################################################## + +set(LINT_TARGET lint) +set(LINT_SCRIPT ${CMAKE_SCRIPT_DIR}/lint.cmake) +add_custom_target( + ${LINT_TARGET} + COMMAND ${CMAKE_COMMAND} -P ${LINT_SCRIPT} +) + ### Install ################################################################################# # Install Includes file(GLOB folders ${${PROJECT_NAME}_INCLUDE_DIRS}/*) install(DIRECTORY ${folders} DESTINATION include) + + diff --git a/CMakeScripts/lint.cmake b/CMakeScripts/lint.cmake new file mode 100644 index 00000000000..04df3409e84 --- /dev/null +++ b/CMakeScripts/lint.cmake @@ -0,0 +1,48 @@ + +set(CMAKE_SOURCE_DIR ../) +set(LINT_COMMAND ${CMAKE_SOURCE_DIR}/scripts/cpp_lint.py) +set(SRC_FILE_EXTENSIONS h hpp hu c cpp cu cc) +set(EXCLUDE_FILE_EXTENSTIONS pb.h pb.cc) +set(LINT_DIRS include src/caffe examples tools python matlab) + +# find all files of interest +foreach(ext ${SRC_FILE_EXTENSIONS}) + foreach(dir ${LINT_DIRS}) + file(GLOB_RECURSE FOUND_FILES ${CMAKE_SOURCE_DIR}/${dir}/*.${ext}) + set(LINT_SOURCES ${LINT_SOURCES} ${FOUND_FILES}) + endforeach() +endforeach() + +# find all files that should be excluded +foreach(ext ${EXCLUDE_FILE_EXTENSTIONS}) + file(GLOB_RECURSE FOUND_FILES ${CMAKE_SOURCE_DIR}/*.${ext}) + set(EXCLUDED_FILES ${EXCLUDED_FILES} ${FOUND_FILES}) +endforeach() + +# exclude generated pb files +list(REMOVE_ITEM LINT_SOURCES ${EXCLUDED_FILES}) + +execute_process( + COMMAND ${LINT_COMMAND} ${LINT_SOURCES} + ERROR_VARIABLE LINT_OUTPUT + ERROR_STRIP_TRAILING_WHITESPACE +) + +string(REPLACE "\n" ";" LINT_OUTPUT ${LINT_OUTPUT}) + +list(GET LINT_OUTPUT -1 LINT_RESULT) +list(REMOVE_AT LINT_OUTPUT -1) +string(REPLACE " " ";" LINT_RESULT ${LINT_RESULT}) +list(GET LINT_RESULT -1 NUM_ERRORS) +if(NUM_ERRORS GREATER 0) + foreach(msg ${LINT_OUTPUT}) + string(FIND ${msg} "Done" result) + if(result LESS 0) + message(STATUS ${msg}) + endif() + endforeach() + message(FATAL_ERROR "Lint found ${NUM_ERRORS} errors!") +else() + message(STATUS "Lint did not find any errors!") +endif() + diff --git a/src/caffe/test/CMakeLists.txt b/src/caffe/test/CMakeLists.txt index 52c146f5f89..f916ac0b0dd 100644 --- a/src/caffe/test/CMakeLists.txt +++ b/src/caffe/test/CMakeLists.txt @@ -5,27 +5,29 @@ # project( Test ) -# Set CUDA Device number and CMAKE_SOURCE_DIR -add_definitions(-DCMAKE_BUILD) +# Configuration +set(TEST_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/test) # test executables are going to be placed there +set(TEST_EXT .bin) # test executable extension +set(ALL_TEST test${TEST_EXT}) # name of an executable comprising of all tests +set(RUN_TEST runtest) # dummy target for running tests # Generate config files -set(IN_EXT .in) -set(GEN_EXT .gen.cmake) +add_definitions(-DCMAKE_BUILD) # definition needed in order to include CMake's generated files +set(IN_EXT .in) # generator input file extension +set(GEN_EXT .gen.cmake) # generated output file extension set(TEST_DEFINES_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cmake_test_defines.hpp) set(TEST_DATA_FILE ${CMAKE_CURRENT_SOURCE_DIR}/test_data/sample_data_list.txt) -set(IN_FILES +set(IN_FILES # generator input files ${TEST_DEFINES_FILE} ${TEST_DATA_FILE} ) -foreach(in_file ${IN_FILES}) - +foreach(in_file ${IN_FILES}) configure_file( ${in_file}${IN_EXT} ${in_file}${GEN_EXT} - ) - + ) endforeach() include_directories( @@ -36,29 +38,27 @@ include_directories( set(TEST_MAIN test_caffe_main.cpp) list(REMOVE_ITEM TEST_SOURCES ${TEST_MAIN}) - +# Build each test separately foreach(source ${TEST_SOURCES}) - get_filename_component(name ${source} NAME_WE) - add_executable(${name}.test ${TEST_MAIN} ${source} ../blob.cpp) - target_link_libraries(${name}.test gtest caffe) - #disable ctest - #add_test(${name} ${name}.test) - + set(TEST_NAME ${name}${TEST_EXT}) + add_executable(${TEST_NAME} EXCLUDE_FROM_ALL ${TEST_MAIN} ${source} ../blob.cpp) + target_link_libraries(${TEST_NAME} gtest caffe) # output dir - set_target_properties(${name}.test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/test) - + set_target_properties(${TEST_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/test) + set(TEST_TARGETS ${TEST_TARGETS} ${TEST_NAME}) endforeach() -add_executable(test ${TEST_SOURCES} ${TEST_MAIN}) -target_link_libraries(test gtest caffe) +# Build a compound test excluded from the ALL target +add_executable(${ALL_TEST} EXCLUDE_FROM_ALL ${TEST_SOURCES} ${TEST_MAIN}) +target_link_libraries(${ALL_TEST} gtest caffe) +add_dependencies(${ALL_TEST} ${TEST_TARGETS}) +# output dir +set_target_properties(${ALL_TEST} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TEST_OUTPUT_DIRECTORY}) # Test command set(TEST_ARGS --gtest_shuffle) if(CPU_ONLY) set(TEST_ARGS ${TEST_ARGS} --gtest_filter="-*GPU*") endif() -add_custom_command(TARGET test POSTBUILD COMMAND test ${TEST_ARGS}) - -# output dir -set_target_properties(test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/test) +add_custom_target(${RUN_TEST} COMMAND ${ALL_TEST} ${TEST_ARGS})