]> gerrit.simantics Code Review - simantics/fmil.git/blob - org.simantics.fmil.core/native/FMILibrary/Config.cmake/runtime_test.cmake
Switch to full JavaSE-11+ compatibility
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / Config.cmake / runtime_test.cmake
1 #    Copyright (C) 2012 Modelon AB
2
3 #    This program is free software: you can redistribute it and/or modify
4 #    it under the terms of the BSD style license.
5
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.
10
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>.
13
14 set(RTTESTDIR ${FMILIBRARYHOME}/Test)
15
16 add_executable (jm_vector_test ${RTTESTDIR}/jm_vector_test.c)
17 target_link_libraries (jm_vector_test ${JMUTIL_LIBRARIES})
18
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})
22
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)
28
29 set(TEST_OUTPUT_FOLDER "${CMAKE_CURRENT_BINARY_DIR}/Testing")
30
31 include_directories(${RTTESTDIR})
32 if(MSVC)
33         # default in MSVC for Debug build is incremental linking, 
34         # but dlls linked with this flag cannot be loaded with LoadLibrary
35         foreach(flag_var
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}}")
44         endforeach(flag_var)
45 endif()
46
47 function(to_native_c_path path native_c_path)
48         if (WIN32)
49                 STRING(REPLACE "/" "\\\\" tmp "${path}")
50         else()
51                 set(tmp "${path}")
52         endif()
53         set (${native_c_path} ${tmp} PARENT_SCOPE)
54 endfunction()
55
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}")
59
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}")
64
65 #Create paths for the config_test.h
66 if (WIN32)
67         set(DLL_OUTPUT_PATH "${TEST_OUTPUT_FOLDER}")
68
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}")
74 endif(WIN32)
75
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})
80
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})            
84         endif()
85
86         file(TO_NATIVE_PATH binaries/${FMI_PLATFORM}/${MODEL_IDENTIFIER_T}${CMAKE_SHARED_LIBRARY_SUFFIX} FMU_OUTPUT_SHARED_LIBRARY_PATH_OUT_T)
87
88         #Move files to the FMU directories and compress 
89         ADD_CUSTOM_COMMAND(
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"
97         )
98         
99         get_target_property(DLL_SOURCES ${TARGET_NAME_T} SOURCES)
100   
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")
107         
108 endfunction(compress_fmu)
109
110 set(FMILIBFORTEST fmilib)
111
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})
116         endif()
117 endif()
118
119 message(STATUS "Tests will be linked with ${FMILIBFORTEST}"  )
120
121 add_executable (fmi_zip_zip_test ${RTTESTDIR}/FMI1/fmi_zip_zip_test.c )
122 target_link_libraries (fmi_zip_zip_test ${FMIZIP_LIBRARIES})
123
124 add_executable (fmi_zip_unzip_test ${RTTESTDIR}/FMI1/fmi_zip_unzip_test.c )
125 target_link_libraries (fmi_zip_unzip_test ${FMIZIP_LIBRARIES})
126
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})
132
133 set_target_properties(
134         fmi_zip_zip_test   
135         fmi_zip_unzip_test
136         fmi_import_test
137     PROPERTIES FOLDER "Test")
138 # include CTest gives more options (such as running valgrind automatically)
139 include(CTest)
140
141 #Define values in the "config.h"
142 set(CTEST_RETURN_SUCCESS 0) 
143 set(CTEST_RETURN_FAIL 1)
144
145 # set(FMU_TEMPFOLDER ${TEST_OUTPUT_FOLDER}/tempfolder)
146 to_native_c_path(${TEST_OUTPUT_FOLDER}/tempfolder FMU_TEMPFOLDER)
147
148 file(MAKE_DIRECTORY ${TEST_OUTPUT_FOLDER}/tempfolder)
149
150 if(FMILIB_BUILD_BEFORE_TESTS)
151         add_test(
152                 NAME ctest_build_all 
153                 COMMAND "${CMAKE_COMMAND}" --build ${FMILIBRARYBUILD} --config $<CONFIGURATION>)
154 endif()
155
156 ADD_TEST(ctest_fmi_zip_unzip_test fmi_zip_unzip_test)
157 ADD_TEST(ctest_fmi_zip_zip_test fmi_zip_zip_test)
158
159 include(test_fmi1)
160 include(test_fmi2)
161
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})
168
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)
179 endif()
180 SET_TESTS_PROPERTIES ( ctest_fmi_import_test_no_xml PROPERTIES DEPENDS ctest_fmi_zip_unzip_test)