cmake_minimum_required(VERSION 2.6) #{{{ sources set(ufocore_SRCS compat.c ufo-priv.c ufo-base-scheduler.c ufo-copy-task.c ufo-buffer.c ufo-copyable-iface.c ufo-cpu-node.c ufo-daemon.c ufo-dummy-task.c ufo-fixed-scheduler.c ufo-gpu-node.c ufo-graph.c ufo-group.c ufo-group-scheduler.c ufo-input-task.c ufo-local-scheduler.c ufo-messenger-iface.c ufo-method-iface.c ufo-node.c ufo-output-task.c ufo-plugin-manager.c ufo-profiler.c ufo-processor.c ufo-remote-node.c ufo-remote-task.c ufo-resources.c ufo-scheduler.c ufo-task-iface.c ufo-task-graph.c ufo-task-node.c ufo-transform-iface.c ufo-two-way-queue.c ufo-basic-ops.c ) #}}} #{{{ headers set(ufocore_HDRS ufo-base-scheduler.h ufo-copy-task.h ufo-buffer.h ufo-copyable-iface.h ufo-cpu-node.h ufo-daemon.h ufo-dummy-task.h ufo-fixed-scheduler.h ufo-gpu-node.h ufo-graph.h ufo-group.h ufo-group-scheduler.h ufo-input-task.h ufo-local-scheduler.h ufo-messenger-iface.h ufo-method-iface.h ufo-node.h ufo-output-task.h ufo-plugin-manager.h ufo-profiler.h ufo-processor.h ufo-remote-node.h ufo-remote-task.h ufo-resources.h ufo-scheduler.h ufo-task-iface.h ufo-task-graph.h ufo-task-node.h ufo-transform-iface.h ufo-two-way-queue.h ufo-basic-ops.h ) #}}} #{{{ libufo add_definitions(-DUFO_COMPILATION) if(CMAKE_BUILD_TYPE MATCHES "Release") add_definitions(-DG_DISABLE_ASSERT) endif() if (WITH_ZMQ) list(APPEND ufocore_SRCS ufo-zmq-messenger.c) list(APPEND ufocore_HDRS ufo-zmq-messenger.h) endif () include_directories(${CMAKE_CURRENT_SOURCE_DIR}) add_library(ufo SHARED ${ufocore_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/ufo-enums.c) set_target_properties(ufo PROPERTIES VERSION ${UFO_VERSION} SOVERSION ${UFO_VERSION_MAJOR}) target_link_libraries(ufo ${UFOCORE_DEPS}) #{{{ install target install(TARGETS ufo LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES ${ufocore_HDRS} ${CMAKE_CURRENT_SOURCE_DIR}/ufo.h ${CMAKE_CURRENT_BINARY_DIR}/ufo-enums.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ufo) install(FILES ufo-basic-ops.cl DESTINATION ${CMAKE_INSTALL_KERNELDIR}) #}}} #}}} #{{{ glib-mkenums find_program(GLIB2_MKENUMS glib-mkenums REQUIRED) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ufo-enums.h COMMAND ${GLIB2_MKENUMS} ARGS --template ufo-enums.h.template ${ufocore_HDRS} > ${CMAKE_CURRENT_BINARY_DIR}/ufo-enums.h WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${ufocore_HDRS} ${CMAKE_CURRENT_SOURCE_DIR}/ufo-enums.h.template ) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ufo-enums.c COMMAND ${GLIB2_MKENUMS} ARGS --template ufo-enums.c.template ${ufocore_HDRS} > ${CMAKE_CURRENT_BINARY_DIR}/ufo-enums.c WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${ufocore_HDRS} ${CMAKE_CURRENT_BINARY_DIR}/ufo-enums.h ${CMAKE_CURRENT_SOURCE_DIR}/ufo-enums.c.template ) #}}} #{{{ GObject introspection pkg_check_modules(GOBJECT_INTROSPECTION gobject-introspection-1.0) if (GOBJECT_INTROSPECTION_FOUND) option(WITH_GIR "Build introspection files" ON) if (WITH_GIR) pkg_check_variable(gobject-introspection-1.0 g_ir_scanner) pkg_check_variable(gobject-introspection-1.0 g_ir_compiler) set(GIR_PREFIX "Ufo-${UFO_GIR_VERSION}") set(GIR_XML "${GIR_PREFIX}.gir") set(GIR_TYPELIB "${GIR_PREFIX}.typelib") set(_gir_input) foreach(_src ${ufocore_SRCS} ${ufocore_HDRS}) list(APPEND _gir_input "${CMAKE_CURRENT_SOURCE_DIR}/${_src}") endforeach() add_custom_command(OUTPUT ${GIR_XML} COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_SCANNER} --namespace=Ufo --nsversion=${UFO_GIR_VERSION} --library=ufo --no-libtool --include=GObject-2.0 --include=GModule-2.0 --include=GLib-2.0 --include=Json-1.0 -I${OPENCL_INCLUDE_DIRS} -I${JSON_GLIB_INCLUDE_DIRS} -I${CMAKE_CURRENT_SOURCE_DIR}/.. -DUFO_COMPILATION --output ${GIR_XML} --warn-all --quiet ${_gir_input} DEPENDS ${ufocore_SRCS} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_custom_command(OUTPUT ${GIR_TYPELIB} COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_COMPILER} -o ${GIR_TYPELIB} ${GIR_XML} DEPENDS ${GIR_XML} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) add_custom_target(gir ALL DEPENDS ${GIR_XML} ${GIR_TYPELIB}) add_dependencies(gir ufo) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${GIR_XML} DESTINATION ${CMAKE_INSTALL_GIRDIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${GIR_TYPELIB} DESTINATION ${CMAKE_INSTALL_TYPELIBDIR}) endif() endif() #}}} #{{{ gtk-doc pkg_check_modules(GTK_DOC gtk-doc) if(GTK_DOC_FOUND) option(WITH_GTK_DOC "Build API reference" ON) if (WITH_GTK_DOC) find_program(GTK_DOC_SCAN gtkdoc-scan REQUIRED) find_program(GTK_DOC_SCANGOBJ gtkdoc-scangobj REQUIRED) find_program(GTK_DOC_MKDB gtkdoc-mkdb REQUIRED) find_program(GTK_DOC_MKHTML gtkdoc-mkhtml REQUIRED) set(docs_dir "${CMAKE_CURRENT_BINARY_DIR}/../docs") set(docs_out "${docs_dir}/reference") set(docs_xml_in "${CMAKE_CURRENT_SOURCE_DIR}/../docs/Ufo-docs.xml") set(docs_xml_out "${docs_out}/Ufo-docs.xml") set(docs_ignore_headers "ufo-zmq-messenger.h" "ufo-mpi-messenger.h") set(GTK_DOC_CFLAGS) set(GTK_DOC_LDFLAGS) get_directory_property(_current_include_dirs INCLUDE_DIRECTORIES) foreach(_incl ${_current_include_dirs}) set(GTK_DOC_CFLAGS "-I${_incl} ${GTK_DOC_CFLAGS}") endforeach() foreach(_lib ${UFOCORE_DEPS}) if (NOT ${_lib} MATCHES "^[/]") set(GTK_DOC_LDFLAGS "-l${_lib} ${GTK_DOC_LDFLAGS}") endif() endforeach() get_directory_property(_current_link_dirs LINK_DIRECTORIES) foreach(_linkdir ${_current_link_dirs}) set(GTK_DOC_LDFLAGS "-L${_linkdir} ${GTK_DOC_LDFLAGS}") endforeach() configure_file("${CMAKE_CURRENT_SOURCE_DIR}/../docs/scangobj.sh.in" "${docs_out}/scangobj.sh") add_custom_target(docbook) add_custom_command(TARGET docbook PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${docs_xml_in} ${docs_xml_out} DEPENDS ${docs_xml_out}) add_custom_command(OUTPUT ${docs_out}/Ufo-decl.txt COMMAND ${GTK_DOC_SCAN} --module=Ufo --source-dir=${CMAKE_CURRENT_SOURCE_DIR} --ignore-headers="${docs_ignore_headers}" DEPENDS ufo COMMENT "Running gtkdoc-scan" WORKING_DIRECTORY ${docs_out}) add_custom_command(OUTPUT ${docs_out}/Ufo.args COMMAND sh scangobj.sh DEPENDS ufo ${docs_out}/Ufo-decl.txt COMMENT "Running gtkdoc-scangobj" WORKING_DIRECTORY ${docs_out}) add_custom_command(OUTPUT ${docs_out}/sgml.stamp COMMAND ${GTK_DOC_MKDB} --module=Ufo --source-dir=${CMAKE_CURRENT_SOURCE_DIR} --sgml-mode --output-format=xml DEPENDS ufo ${docs_out}/Ufo.args COMMENT "Running gtkdoc-mkdb" WORKING_DIRECTORY ${docs_out}) add_custom_command(OUTPUT ${docs_dir}/html.stamp COMMAND ${GTK_DOC_MKHTML} --path="${CMAKE_CURRENT_BINARY_DIR}/../docs/reference" Ufo ${docs_xml_out} DEPENDS ufo ${docs_out}/sgml.stamp docbook COMMENT "Running gtkdoc-mkhtml" WORKING_DIRECTORY ${docs_out}) add_custom_target(reference ALL DEPENDS ${docs_dir}/html.stamp) install(DIRECTORY ${docs_out}/ DESTINATION ${CMAKE_INSTALL_DATADIR}/gtk-doc/html/Ufo FILES_MATCHING REGEX ".*\\.(html|png|devhelp2|css)$" PATTERN "xml" EXCLUDE) endif() endif(GTK_DOC_FOUND) #}}} #{{{ pkg-config # FIXME: inside the ufo.pc.in we should set the lib names that we found out, not # hard coded values configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ufo.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/ufo.pc" @ONLY IMMEDIATE) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ufo.pc DESTINATION ${CMAKE_INSTALL_PKGCONFIGDIR}) #}}}