# FindMathematica CodeGeneration examples include_directories(${Mathematica_INCLUDE_DIRS}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) # add CMake executable target for single Mathematica function Mathematica_GENERATE_C_CODE(compute.m OUTPUT compute.c) add_executable (compute compute_main.c compute.c) set_target_properties(compute PROPERTIES FOLDER "CodeGeneration") target_link_libraries (compute ${Mathematica_WolframLibrary_LIBRARIES}) set_target_properties(compute PROPERTIES INSTALL_RPATH "${Mathematica_RUNTIME_LIBRARY_DIRS}" BUILD_WITH_INSTALL_RPATH ON) # add CMake executable target for multiple Mathematica functions Mathematica_GENERATE_C_CODE(functions.m) add_executable (functions functions.c functions.m.c) set_target_properties(functions PROPERTIES FOLDER "CodeGeneration") target_link_libraries (functions ${Mathematica_WolframLibrary_LIBRARIES}) set_target_properties(functions PROPERTIES INSTALL_RPATH "${Mathematica_RUNTIME_LIBRARY_DIRS}" BUILD_WITH_INSTALL_RPATH ON) # fix MathLink shared library references under Mac OS X Mathematica_ABSOLUTIZE_LIBRARY_DEPENDENCIES(compute functions) if (DEFINED Mathematica_USERBASE_DIR) foreach (_systemID ${Mathematica_SYSTEM_IDS}) install(TARGETS compute functions RUNTIME DESTINATION "${Mathematica_USERBASE_DIR}/SystemFiles/Kernel/Binaries/${_systemID}" CONFIGURATIONS "Release") endforeach() endif() # define a helper function to simplify adding CodeGeneration tests function (do_mathematica_codegeneration_test _target _expectedOutputRegEx) if (NOT TARGET ${_target}) return() endif() foreach (_systemID ${Mathematica_SYSTEM_IDS}) set (_testName "CodeGeneration_${_systemID}_${_target}") list (FIND Mathematica_HOST_SYSTEM_IDS ${_systemID} _index) if (${_index} GREATER -1) Mathematica_add_test (NAME ${_testName} COMMAND "$" SYSTEM_ID "${_systemID}" ${ARGN}) Mathematica_set_tests_properties(${_testName} PROPERTIES TIMEOUT 15 PASS_REGULAR_EXPRESSION "${_expectedOutputRegEx}") else() message (STATUS "Skipping test ${_testName}, cross-compiling from ${Mathematica_HOST_SYSTEM_ID}.") endif() endforeach() endfunction () # tests do_mathematica_codegeneration_test(compute "compute 417.15") do_mathematica_codegeneration_test(functions "square 416.16\ncube 8489.66") add_convenience_test_target(CodeGenerationTests "CodeGeneration")