diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fa50e0f08..9f89f74d5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,10 +24,10 @@ target_include_directories (ibex PUBLIC "$" _ ${line}) - - if (CMAKE_MATCH_1 STREQUAL "Unary") - set (_t "${CMAKE_MATCH_2},${CMAKE_MATCH_3},${CMAKE_MATCH_4}") - string (CONCAT OPERATORS_MACRO_UNARY "${OPERATORS_MACRO_UNARY}" - "ADD_UNARY_OPERATOR(${_t});\n") - set (inline_pre "inline ${CMAKE_MATCH_4} ") - set (inline_post "(const ${CMAKE_MATCH_3}& x) { return UnaryOperator<${_t}>::fwd(x); }\n") - else () # Binary - set (_t "${CMAKE_MATCH_2},${CMAKE_MATCH_3},${CMAKE_MATCH_4},${CMAKE_MATCH_5}") - string (CONCAT OPERATORS_MACRO_BINARY "${OPERATORS_MACRO_BINARY}" - "ADD_BINARY_OPERATOR(${_t});\n") - set (inline_pre "inline ${CMAKE_MATCH_5} ") - set (inline_post "(const ${CMAKE_MATCH_3}& x1, const ${CMAKE_MATCH_4}& x2) { return BinaryOperator<${_t}>::fwd(x1,x2); }\n") - endif () - set (OP_VARNAME ${CMAKE_MATCH_2}) - - # Parse source file - file (STRINGS ${cpp} line REGEX "^extern const char .*;$" LIMIT_COUNT 1) - if (NOT line) - message (FATAL_ERROR "Error while parsing ${cpp}: no const char line") - endif () - string(REGEX MATCH " const char ${OP_VARNAME}\\[\\] = \"(.*)\";$" _ ${line}) - string (CONCAT OPERATORS_FCT_DEF "${OPERATORS_FCT_DEF}" - "${inline_pre}${CMAKE_MATCH_1}${inline_post}") -endforeach() - -target_include_directories (ibex PUBLIC - "$") - -# Propagate new values to parent scope -set (OPERATORS_INCLUDES "${OPERATORS_INCLUDES}" PARENT_SCOPE) -set (OPERATORS_MACRO_UNARY "${OPERATORS_MACRO_UNARY}" PARENT_SCOPE) -set (OPERATORS_MACRO_BINARY "${OPERATORS_MACRO_BINARY}" PARENT_SCOPE) -set (OPERATORS_FCT_DEF "${OPERATORS_FCT_DEF}" PARENT_SCOPE) diff --git a/src/symbolic/CMakeLists.txt b/src/symbolic/CMakeLists.txt index 325bba3d1..5aa43883f 100644 --- a/src/symbolic/CMakeLists.txt +++ b/src/symbolic/CMakeLists.txt @@ -1,8 +1,56 @@ # see arithmetic/CMakeLists.txt for comments +################################################################################ +# Deal with files in src/operators and set OPERATORS_* variables +################################################################################ +set (OPERATORS_LIST atanhc atanhccc crossproduct sinc trace) + +foreach (op ${OPERATORS_LIST}) + set (hdr "ibex_${op}.h") + set (hdrfile "${CMAKE_CURRENT_SOURCE_DIR}/../operators/ibex_${op}.h") + #set (cpp "ibex_${op}.cpp") + set (cppfile "${CMAKE_CURRENT_SOURCE_DIR}/../operators/ibex_${op}.cpp") + + # Handles includes + string (APPEND OPERATORS_INCLUDES "#include \"${hdr}\"\n") + target_sources (ibex PRIVATE ${hdrfile} ${cppfile}) + + # Parse header + file (STRINGS ${hdrfile} line REGEX "^class [BU]i?naryOperator<" LIMIT_COUNT 1) + if (NOT line) + message (FATAL_ERROR "Error while parsing ${hdr}: no class line") + endif () + string(REGEX MATCH " (.*)Operator<([^,]*),([^,]*),([^,]*),?(.*)>" _ ${line}) + + if (CMAKE_MATCH_1 STREQUAL "Unary") + set (_t "${CMAKE_MATCH_2},${CMAKE_MATCH_3},${CMAKE_MATCH_4}") + string (APPEND OPERATORS_MACRO_UNARY "ADD_UNARY_OPERATOR(${_t});\n") + set (inline_pre "inline ${CMAKE_MATCH_4} ") + set (inline_post "(const ${CMAKE_MATCH_3}& x) { return UnaryOperator<${_t}>::fwd(x); }\n") + else () # Binary + set (_t "${CMAKE_MATCH_2},${CMAKE_MATCH_3},${CMAKE_MATCH_4},${CMAKE_MATCH_5}") + string (APPEND OPERATORS_MACRO_BINARY "ADD_BINARY_OPERATOR(${_t});\n") + set (inline_pre "inline ${CMAKE_MATCH_5} ") + set (inline_post "(const ${CMAKE_MATCH_3}& x1, const ${CMAKE_MATCH_4}& x2) { return BinaryOperator<${_t}>::fwd(x1,x2); }\n") + endif () + set (OP_VARNAME ${CMAKE_MATCH_2}) + + # Parse source file + file (STRINGS ${cppfile} line REGEX "^extern const char .*;$" LIMIT_COUNT 1) + if (NOT line) + message (FATAL_ERROR "Error while parsing ${cpp}: no const char line") + endif () + string (REGEX MATCH " const char ${OP_VARNAME}\\[\\] = \"(.*)\";$" _ ${line}) + string (APPEND OPERATORS_FCT_DEF "${inline_pre}${CMAKE_MATCH_1}${inline_post}") +endforeach() + +################################################################################ +# configure files with OPERATORS_* variables +################################################################################ configure_file (ibex_ExprOperators.cpp.in ibex_ExprOperators.cpp) configure_file (ibex_ExprOperators.h.in ibex_ExprOperators.h) +################################################################################ target_sources (ibex PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ibex_CmpOp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ibex_CmpOp.h @@ -39,4 +87,5 @@ target_sources (ibex PRIVATE target_include_directories (ibex PUBLIC "$" - "$") + "$" + "$")