Files
WFR-UnitTests/CMakeLists.txt
T
2017-07-24 16:37:13 +02:00

89 lines
3.4 KiB
CMake
Executable File

cmake_minimum_required(VERSION 2.8)
project(wfr-unittests C CXX)
# Compiler flags
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -DNDEBUG -Wall")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g3 -DNDEBUG -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall")
set(CMAKE_C_FLAGS_RELEASE "-O3 -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEBUG}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_DEBUG}")
# Find WFR-libraries
if (NOT WFR_FOUND)
if (NOT WFR_DIR)
set(WFR_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../WFR-lib/dist")
endif()
find_package(WFR REQUIRED)
endif()
# Find IWIR2WFR compiler
if (NOT IWIR2WFR_FOUND)
if (NOT IWIR2WFR_DIR)
set(IWIR2WFR_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../IWIR2WFRcompiler/dist")
endif()
find_package(IWIR2WFR REQUIRED)
endif()
# Where to find IWIR file and activity implementation repository
set(IWIR_DIR "${CMAKE_CURRENT_SOURCE_DIR}/iwir")
set(REPO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/iwir/coderepo")
get_directory_property(hasParent PARENT_DIRECTORY)
# Where to install the output
if (NOT hasParent)
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/dist")
endif()
endif()
# Setup include dir
include_directories(${WFR_INCLUDE_DIR})
# Wavefront needs OpenMP
FIND_PACKAGE(OpenMP)
if(OPENMP_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
# Enable C++11 support and ignore the Sparselu BOTS main
ADD_DEFINITIONS( -std=c++11 -DSPARSELU_SKIP_BOTS_MAIN )
#
# Convenience function for setting up individual unit-tests
#
function(add_wfr_utest utest_name add_inc)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${utest_name})
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name}.h
COMMAND ${IWIR2WFR_EXE} -i ${IWIR_DIR}/${utest_name}.iwir -o ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name} -printir -repoconfig ${REPO_DIR}/${utest_name}.properties
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}
)
add_executable(${utest_name}.bin ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name}.cpp ${ARGN})
target_include_directories(${utest_name}.bin PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${utest_name} ${add_inc})
target_link_libraries(${utest_name}.bin ${WFR_LIBRARIES})
add_dependencies(${utest_name}.bin wfr_lib) # Otherwise we would have race conditions when compiling the parent project with -j
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${utest_name}/${utest_name}.h DESTINATION ${CMAKE_INSTALL_PREFIX}/utests/${utest_name})
install(TARGETS ${utest_name}.bin DESTINATION ${CMAKE_INSTALL_PREFIX}/utests/${utest_name})
endfunction()
#
# Setup individual unit-tests
#
add_wfr_utest(for1 "")
add_wfr_utest(foreach1 "")
add_wfr_utest(if1 "")
#add_wfr_utest(if01 "")
add_wfr_utest(if2 "")
add_wfr_utest(pfor1 "")
add_wfr_utest(pforeach1 "")
add_wfr_utest(sparselu-wfr ${CMAKE_CURRENT_SOURCE_DIR}/src/sparselu ${CMAKE_CURRENT_SOURCE_DIR}/src/sparselu/sparselu_funcs.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sparselu/bots_main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sparselu/bots_common.cpp)
if(OPENMP_FOUND)
add_wfr_utest(wavefront "")
endif()
add_wfr_utest(while1 "")
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/bin/unittests.sh PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE DESTINATION ${CMAKE_INSTALL_PREFIX}/utests)