1 # Copyright (C) 2012 Modelon AB
3 # This program is free software: you can redistribute it and/or modify
4 # it under the terms of the BSD style license.
6 # # This program is distributed in the hope that it will be useful,
7 # but WITHOUT ANY WARRANTY; without even the implied warranty of
8 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 # FMILIB_License.txt file for more details.
11 # You should have received a copy of the FMILIB_License.txt file
12 # along with this program. If not, contact Modelon AB <http://www.modelon.com>.
14 set(RTTESTDIR ${FMILIBRARYHOME}/Test)
16 add_executable (jm_vector_test ${RTTESTDIR}/jm_vector_test.c)
17 target_link_libraries (jm_vector_test ${JMUTIL_LIBRARIES})
19 #Create function that zipz the dummy FMUs
20 add_executable (compress_test_fmu_zip ${RTTESTDIR}/compress_test_fmu_zip.c)
21 target_link_libraries (compress_test_fmu_zip ${FMIZIP_LIBRARIES})
23 set_target_properties(
24 jm_vector_test compress_test_fmu_zip
25 PROPERTIES FOLDER "Test")
26 #Path to the executable
27 get_property(COMPRESS_EXECUTABLE TARGET compress_test_fmu_zip PROPERTY LOCATION)
29 set(TEST_OUTPUT_FOLDER "${CMAKE_CURRENT_BINARY_DIR}/Testing")
31 include_directories(${RTTESTDIR})
33 # default in MSVC for Debug build is incremental linking,
34 # but dlls linked with this flag cannot be loaded with LoadLibrary
36 CMAKE_MODULE_LINKER_FLAGS_DEBUG CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
37 CMAKE_SHARED_LINKER_FLAGS_DEBUG CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO)
38 debug_message("Checking: ${flag_var}=${${flag_var}}")
39 string(REPLACE "/INCREMENTAL:NO" " " tmp "${${flag_var}}")
40 string(REPLACE "/INCREMENTAL:YES" " " tmp "${tmp}")
41 string(REPLACE "/INCREMENTAL" " " tmp "${tmp}")
42 set(${flag_var} "${tmp} /INCREMENTAL:NO" CACHE STRING "linker flags" FORCE)
43 debug_message("After replace: ${flag_var}=${${flag_var}}")
47 function(to_native_c_path path native_c_path)
49 STRING(REPLACE "/" "\\\\" tmp "${path}")
53 set (${native_c_path} ${tmp} PARENT_SCOPE)
56 set(UNCOMPRESSED_DUMMY_FILE_PATH_SRC "${RTTESTDIR}/try_to_uncompress_this_file.zip")
57 set(UNCOMPRESSED_DUMMY_FOLDER_PATH_DIST "${TEST_OUTPUT_FOLDER}")
58 file(COPY "${UNCOMPRESSED_DUMMY_FILE_PATH_SRC}" DESTINATION "${UNCOMPRESSED_DUMMY_FOLDER_PATH_DIST}")
60 set(COMPRESS_DUMMY_FILE_PATH_SRC "${RTTESTDIR}/try_to_compress_this_file.xml")
61 set(COMPRESS_DUMMY_FOLDER_PATH_DIST "${TEST_OUTPUT_FOLDER}")
62 set(COMPRESS_DUMMY_FILE_PATH_DIST "${TEST_OUTPUT_FOLDER}/successfully_compressed_this_file.zip")
63 file(COPY "${COMPRESS_DUMMY_FILE_PATH_SRC}" DESTINATION "${COMPRESS_DUMMY_FOLDER_PATH_DIST}")
65 #Create paths for the config_test.h
67 set(DLL_OUTPUT_PATH "${TEST_OUTPUT_FOLDER}")
69 STRING(REPLACE "/" "\\\\" UNCOMPRESSED_DUMMY_FILE_PATH_SRC "${UNCOMPRESSED_DUMMY_FILE_PATH_SRC}")
70 STRING(REPLACE "/" "\\\\" UNCOMPRESSED_DUMMY_FILE_PATH_DIST "${UNCOMPRESSED_DUMMY_FILE_PATH_DIST}")
71 STRING(REPLACE "/" "\\\\" UNCOMPRESSED_DUMMY_FOLDER_PATH_DIST "${UNCOMPRESSED_DUMMY_FOLDER_PATH_DIST}")
72 STRING(REPLACE "/" "\\\\" COMPRESS_DUMMY_FILE_PATH_SRC "${COMPRESS_DUMMY_FILE_PATH_SRC}")
73 STRING(REPLACE "/" "\\\\" COMPRESS_DUMMY_FILE_PATH_DIST "${COMPRESS_DUMMY_FILE_PATH_DIST}")
76 #Move files and compress them to an FMU
77 function(compress_fmu OUTPUT_FOLDER_T MODEL_IDENTIFIER_T FILE_NAME_CS_ME_EXT_T TARGET_NAME_T XML_PATH_T SHARED_LIBRARY_PATH_T)
78 set(FMU_OUTPUT_FOLDER_T ${OUTPUT_FOLDER_T}/${MODEL_IDENTIFIER_T}_${FILE_NAME_CS_ME_EXT_T})
79 set(FMU_OUTPUT_SHARED_LIBRARY_PATH_T ${FMU_OUTPUT_FOLDER_T}/binaries/${FMI_PLATFORM}/${MODEL_IDENTIFIER_T}${CMAKE_SHARED_LIBRARY_SUFFIX})
81 #Must create the FMU directory in a separate command..
82 if(NOT EXISTS ${FMU_OUTPUT_FOLDER_T}/binaries/${FMI_PLATFORM})
83 file(MAKE_DIRECTORY ${FMU_OUTPUT_FOLDER_T}/binaries/${FMI_PLATFORM})
86 file(TO_NATIVE_PATH binaries/${FMI_PLATFORM}/${MODEL_IDENTIFIER_T}${CMAKE_SHARED_LIBRARY_SUFFIX} FMU_OUTPUT_SHARED_LIBRARY_PATH_OUT_T)
88 #Move files to the FMU directories and compress
90 OUTPUT ${OUTPUT_FOLDER_T}/${MODEL_IDENTIFIER_T}_${FILE_NAME_CS_ME_EXT_T}.fmu
91 DEPENDS "${XML_PATH_T}" ${TARGET_NAME_T} compress_test_fmu_zip
92 COMMAND "${CMAKE_COMMAND}" -E remove -f "${OUTPUT_FOLDER_T}/${MODEL_IDENTIFIER_T}_${FILE_NAME_CS_ME_EXT_T}.fmu"
93 COMMAND "${CMAKE_COMMAND}" -E copy "${XML_PATH_T}" "${FMU_OUTPUT_FOLDER_T}/modelDescription.xml"
94 COMMAND "${CMAKE_COMMAND}" -E copy "${SHARED_LIBRARY_PATH_T}" "${FMU_OUTPUT_SHARED_LIBRARY_PATH_T}"
95 COMMAND "${COMPRESS_EXECUTABLE}" "${MODEL_IDENTIFIER_T}.fmu" "modelDescription.xml" "${FMU_OUTPUT_SHARED_LIBRARY_PATH_OUT_T}" WORKING_DIRECTORY "${FMU_OUTPUT_FOLDER_T}"
96 COMMAND "${CMAKE_COMMAND}" -E copy "${FMU_OUTPUT_FOLDER_T}/${MODEL_IDENTIFIER_T}.fmu" "${OUTPUT_FOLDER_T}/${MODEL_IDENTIFIER_T}_${FILE_NAME_CS_ME_EXT_T}.fmu"
99 get_target_property(DLL_SOURCES ${TARGET_NAME_T} SOURCES)
101 set(tname ${MODEL_IDENTIFIER_T}_${FILE_NAME_CS_ME_EXT_T}_FMU)
102 add_custom_target( ${tname} ALL
103 DEPENDS ${OUTPUT_FOLDER_T}/${MODEL_IDENTIFIER_T}_${FILE_NAME_CS_ME_EXT_T}.fmu
104 SOURCES "${XML_PATH_T}" ${DLL_SOURCES})
105 set_target_properties( ${tname} ${TARGET_NAME_T}
106 PROPERTIES FOLDER "TestFMUs")
108 endfunction(compress_fmu)
110 set(FMILIBFORTEST fmilib)
112 if(FMILIB_BUILD_SHARED_LIB AND (FMILIB_LINK_TEST_TO_SHAREDLIB OR NOT FMILIB_BUILD_STATIC_LIB))
113 set(FMILIBFORTEST fmilib_shared)
114 if(CMAKE_COMPILER_IS_GNUCC)
115 set(FMILIBFORTEST ${FMILIBFORTEST})
119 message(STATUS "Tests will be linked with ${FMILIBFORTEST}" )
121 add_executable (fmi_zip_zip_test ${RTTESTDIR}/FMI1/fmi_zip_zip_test.c )
122 target_link_libraries (fmi_zip_zip_test ${FMIZIP_LIBRARIES})
124 add_executable (fmi_zip_unzip_test ${RTTESTDIR}/FMI1/fmi_zip_unzip_test.c )
125 target_link_libraries (fmi_zip_unzip_test ${FMIZIP_LIBRARIES})
127 add_executable (fmi_import_test
128 ${RTTESTDIR}/fmi_import_test.c
129 ${RTTESTDIR}/FMI1/fmi1_import_test.c
130 ${RTTESTDIR}/FMI2/fmi2_import_test.c)
131 target_link_libraries (fmi_import_test ${FMILIBFORTEST})
133 set_target_properties(
137 PROPERTIES FOLDER "Test")
138 # include CTest gives more options (such as running valgrind automatically)
141 #Define values in the "config.h"
142 set(CTEST_RETURN_SUCCESS 0)
143 set(CTEST_RETURN_FAIL 1)
145 # set(FMU_TEMPFOLDER ${TEST_OUTPUT_FOLDER}/tempfolder)
146 to_native_c_path(${TEST_OUTPUT_FOLDER}/tempfolder FMU_TEMPFOLDER)
148 file(MAKE_DIRECTORY ${TEST_OUTPUT_FOLDER}/tempfolder)
150 if(FMILIB_BUILD_BEFORE_TESTS)
153 COMMAND "${CMAKE_COMMAND}" --build ${FMILIBRARYBUILD} --config $<CONFIGURATION>)
156 ADD_TEST(ctest_fmi_zip_unzip_test fmi_zip_unzip_test)
157 ADD_TEST(ctest_fmi_zip_zip_test fmi_zip_zip_test)
162 ADD_TEST(ctest_fmi_import_test_no_xml fmi_import_test ${UNCOMPRESSED_DUMMY_FILE_PATH_SRC} ${TEST_OUTPUT_FOLDER})
163 set_tests_properties(ctest_fmi_import_test_no_xml PROPERTIES WILL_FAIL TRUE)
164 ADD_TEST(ctest_fmi_import_test_me_1 fmi_import_test ${FMU_ME_PATH} ${FMU_TEMPFOLDER})
165 ADD_TEST(ctest_fmi_import_test_cs_1 fmi_import_test ${FMU_CS_PATH} ${FMU_TEMPFOLDER})
166 ADD_TEST(ctest_fmi_import_test_me_2 fmi_import_test ${FMU2_ME_PATH} ${FMU_TEMPFOLDER})
167 ADD_TEST(ctest_fmi_import_test_cs_2 fmi_import_test ${FMU2_CS_PATH} ${FMU_TEMPFOLDER})
169 if(FMILIB_BUILD_BEFORE_TESTS)
170 SET_TESTS_PROPERTIES (
171 ctest_fmi_import_test_no_xml
172 ctest_fmi_import_test_me_1
173 ctest_fmi_import_test_cs_1
174 ctest_fmi_import_test_me_2
175 ctest_fmi_import_test_cs_2
176 ctest_fmi_zip_unzip_test
177 ctest_fmi_zip_zip_test
178 PROPERTIES DEPENDS ctest_build_all)
180 SET_TESTS_PROPERTIES ( ctest_fmi_import_test_no_xml PROPERTIES DEPENDS ctest_fmi_zip_unzip_test)