# -*- mode: cmake; -*- # function(whereami MSG) message(STATUS "====== ${MSG} ======") endfunction() ################################################################# ### create the Singular version file version.h.tmp ### and copy it only if it has changed ### the reduces the number of recompiles ### function(singular_mk_version GEN_H_FILE) set(_filenameTmp ${CMAKE_CURRENT_BINARY_DIR}/version.h.tmp) set(_GEN_H_FILE ${CMAKE_CURRENT_BINARY_DIR}/version.h) message(STATUS "Creating version file '${_GEN_H_FILE}'") #set(_CC_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE} ${ADD_DEFS}") #set(_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} ${ADD_DEFS}") set(_CC_FLAGS "${CMAKE_C_FLAGS} ${ADD_DEFS}") set(_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ADD_DEFS}") set(_CC "${CMAKE_C_COMPILER} ${_CC_FLAGS}") set(_CXX "${CMAKE_CXX_COMPILER} ${_CXX_FLAGS}") set(_version_file "${CMAKE_CURRENT_SOURCE_DIR}/svnver") if(EXISTS ${_version_file}) file(READ ${_version_file} _data) string(REGEX REPLACE "\n$" "" _version ${_data}) else(EXISTS ${_version_file}) set(_version "2009102101") endif(EXISTS ${_version_file}) write_file(${_filenameTmp} "/* generated by cmake */\n") write_file(${_filenameTmp} "#define feVersionId \"${_version}\"" APPEND) write_file(${_filenameTmp} "#define CC \"${_CC}\"" APPEND) write_file(${_filenameTmp} "#define CXX \"${_CXX}\"" APPEND) write_file(${_filenameTmp} "#define CC_FLAGS \"${_CC_FLAGS}\"" APPEND) write_file(${_filenameTmp} "#define CXX_FLAGS \"${_CXX_FLAGS}\"" APPEND) execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_filenameTmp}" "${_GEN_H_FILE}" #OUTPUT_QUIET ERROR_QUIET ) set(${GEN_H_FILE} ${${GEN_H_FILE}} PARENT_SCOPE) endfunction() # # # macro(singular_generate_incfile TARGET GEN_FILE GENCMD NAME ) message(STATUS "generate incfile ${NAME}.inc ...") #set(_GEN_TARGET "${NAME}-inc") set(_GEN_FILE ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.inc) message(STATUS "Generate ${GENCMD} to ${_GEN_FILE}.") add_custom_command(OUTPUT ${_GEN_FILE} #add_custom_target(${TARGET} COMMAND ${GENCMD} DEPENDS ${GENCMD} COMMENT "Creating '${NAME}.inc'..." ) add_custom_target(${TARGET} DEPENDS ${_GEN_FILE} ) # add_custom_target(${TARGET} DEPENDS ${GEN_FILE}) set(${GEN_FILE} ${_GEN_FILE}) #set(${GEN_TARGET} ${_GEN_TARGET} PARENT_SCOPE) endmacro() # # # function(add_index GEN_FILE FEOPT_CMD INFILE ) message(STATUS "add_index ${INFILE}...") set(_GEN_FILE ${CMAKE_CURRENT_BINARY_DIR}/${INFILE}.inc) #set(_GEN_CMD ${CMAKE_CURRENT_BINARY_DIR}/${INFILE}) message(STATUS "Generate ${FEOPT_CMD}.") #set(_cmd_srcs ${CMAKE_CURRENT_SOURCE_DIR}/feOpt.cc mod2.h) #add_definitions( -DGENERATE_OPTION_INDEX ${ADDDEFINE} ) #include_directories(${CMAKE_SOURCE_DIR}/kernel) #add_executable(${INFILE} ${_cmd_srcs}) # //-DGENERATE_OPTION_INDEX -I../kernel add_custom_command( OUTPUT ${_GEN_FILE} COMMAND ${FEOPT_CMD} DEPENDS ${FEOPT_CMD} COMMENT "Compiling '${INFILE}'..." ) set(${GEN_FILE} ${_GEN_FILE} PARENT_SCOPE) endfunction() # # generate iparith table # function(singular_gen_iparith GEN_TARGET GEN_FILE GEN_CMD ) message(STATUS "singular_gen_iparith ${INFILE}...") set(_GEN_TARGET "iparith-inc") set(_GEN_FILE "${CMAKE_CURRENT_BINARY_DIR}/iparith.inc") set(_GEN_CMD "gentable") message(STATUS "out: ${_GEN_FILE}") message(STATUS "in: ${INFILES}") #message(STATUS "dep: ${DEPENDENCIES}") message(STATUS "argv: ${ARGV}") message(STATUS "argn: ${ARGC}") message(STATUS "argn: '${ARGN}'") message(STATUS "cxxFlags: '${CXX_FLAGS}'") set(_gen_srcs ${ARGN}) # set(_gen_srcs claptmpl.cc iparith.cc ipconv.cc tok.h mpsr_Tok.cc grammar.h mod2.h) #set(_gen_srcs ${ARGN}) #add_executable(${_GEN_CMD} ${_gen_srcs}) #set_target_properties(gentable PROPERTIES COMPILE_FLAGS "-DGENTABLE") # # ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CXXTEMPLFLAGS} ${DEFS} -DGENTABLE \ # -o gentable claptmpl.o iparith.cc tesths.cc mpsr_Tok.cc \ # ${OBJS} ${LDFLAGS} ${LIBS} ../kernel/mmalloc.o # ./gentable # /bin/rm -f gentable gentable.exe message(STATUS "src: '${_gen_srcs}'") add_custom_command( OUTPUT ${_GEN_FILE} COMMAND ${GEN_CMD} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${GEN_CMD} MAIN_DEPENDENCY ${GEN_CMD} ${_gen_srcs} COMMENT "generating arithmetic table '${_GEN_FILE}'...") message(STATUS "src: '${_gen_srcs}'") set(${GEN_FILE} ${_GEN_FILE} PARENT_SCOPE) set(${GEN_TARGET} ${_GEN_TARGET} PARENT_SCOPE) endfunction() ################################################################# ### copy/install Singular(LIB)s -files ### function(singular_copy_LIB FILES) message(STATUS "Copying Singular library files.") foreach(loop_var ${ARGV}) #message(STATUS "Copying ${loop_var}") execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${loop_var}" "${CMAKE_CURRENT_BINARY_DIR}" #OUTPUT_QUIET ERROR_QUIET ) #configure_file(${loop_var} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) endforeach(loop_var ${ARGV}) endfunction() ################################################################# ### create the Singular LIB file all.lib ### macro(singular_mk_allLIB TARGET OUT_FILE LIBFILES) #set(_GEN_TARGET "all.lib") #set(${GEN_FILE} "all.lib") set(_tmplFile "${CMAKE_CURRENT_SOURCE_DIR}/${OUT_FILE}.tmpl") set(_tmpFile "${CMAKE_CURRENT_BINARY_DIR}/${OUT_FILE}.tmp") set(_outFile "${CMAKE_CURRENT_BINARY_DIR}/${OUT_FILE}") set(i 0) file(WRITE ${_tmpFile} "") message(STATUS "Creating '${OUT_FILE}' ${_tmpFile}") execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${_tmplFile}" "${_tmpFile}") foreach(loop_var ${ARGV}) math(EXPR i ${i}+1) if( ${i} GREATER 3) string(REGEX REPLACE "^.*/" "" filename ${loop_var}) write_file(${_tmpFile} "LIB \"${filename}\";" APPEND) endif( ${i} GREATER 2) endforeach(loop_var) execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_tmpFile}" "${_outFile}" ) #COMMAND ${CMAKE_COMMAND} -E remove "${_tmpFile}" add_custom_target(${TARGET}) endmacro()