Blame cmake/ComplexLibrary.cmake

Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
include(EchoTarget)
Packit 1fb8d4
include(CMakeParseArguments)
Packit 1fb8d4
Packit 1fb8d4
# - add a new library to a module for export
Packit 1fb8d4
#  MODULE - module the library belongs to
Packit 1fb8d4
#  LIBNAME - name of the library
Packit 1fb8d4
#   - if MODULE isn't set the NAME should must be in the form MODULE-NAME
Packit 1fb8d4
function(export_complex_library)
Packit 1fb8d4
	set(PREFIX "EXPORT_COMPLEX_LIBRARY")
Packit 1fb8d4
	cmake_parse_arguments(${PREFIX}
Packit 1fb8d4
			""
Packit 1fb8d4
			"LIBNAME;MODULE"
Packit 1fb8d4
			""
Packit 1fb8d4
			${ARGN})
Packit 1fb8d4
Packit 1fb8d4
	if (NOT ${PREFIX}_LIBNAME)
Packit 1fb8d4
		message(FATAL_ERROR "export_complex_library requires a name to be set")
Packit 1fb8d4
	endif()
Packit 1fb8d4
	if (NOT ${PREFIX}_MODULE)
Packit 1fb8d4
		# get the module prefix and remove it from libname
Packit 1fb8d4
		string(REPLACE "-" ";" LIBNAME_LIST "${${PREFIX}_LIBNAME}")
Packit 1fb8d4
		list(GET LIBNAME_LIST 0 MODULE)
Packit 1fb8d4
		list(REMOVE_AT LIBNAME_LIST 0)
Packit 1fb8d4
		string(REPLACE ";" "-" LIBNAME "${LIBNAME_LIST}")
Packit 1fb8d4
	else()
Packit 1fb8d4
		set(MODULE ${${PREFIX}_MODULE})
Packit 1fb8d4
		set(LIBNAME ${${PREFIX}_LIBNAME})
Packit 1fb8d4
	endif()
Packit 1fb8d4
	if (NOT MODULE)
Packit 1fb8d4
		message(FATAL_ERROR "export_complex_library couldn't identify MODULE")
Packit 1fb8d4
	endif()
Packit 1fb8d4
	get_property(MEXPORTS GLOBAL PROPERTY ${MODULE}_EXPORTS)
Packit 1fb8d4
	list(APPEND MEXPORTS ${LIBNAME})
Packit 1fb8d4
	set_property(GLOBAL PROPERTY ${MODULE}_EXPORTS "${MEXPORTS}")
Packit 1fb8d4
endfunction(export_complex_library)
Packit 1fb8d4
Packit 1fb8d4
macro(add_complex_library)
Packit 1fb8d4
Packit 1fb8d4
	set(PREFIX "COMPLEX_LIBRARY")
Packit 1fb8d4
	
Packit 1fb8d4
	cmake_parse_arguments(${PREFIX}
Packit 1fb8d4
		"EXPORT"
Packit 1fb8d4
		"MODULE;TYPE;MONOLITHIC"
Packit 1fb8d4
		"SOURCES"
Packit 1fb8d4
		${ARGN})
Packit 1fb8d4
Packit 1fb8d4
	string(TOUPPER "${${PREFIX}_MODULE}_TYPE" ${PREFIX}_TYPE_OPTION)
Packit 1fb8d4
	string(REGEX REPLACE "-" "_" ${PREFIX}_TYPE_OPTION ${${PREFIX}_TYPE_OPTION})
Packit 1fb8d4
Packit 1fb8d4
	if(${${PREFIX}_MONOLITHIC})
Packit 1fb8d4
		add_library(${${PREFIX}_MODULE} ${${PREFIX}_TYPE} ${${PREFIX}_SOURCES})
Packit 1fb8d4
	else()
Packit 1fb8d4
		if (NOT DEFINED ${${PREFIX}_TYPE_OPTION})
Packit 1fb8d4
			add_library(${${PREFIX}_MODULE} ${${PREFIX}_SOURCES})
Packit 1fb8d4
		else()
Packit 1fb8d4
			add_library(${${PREFIX}_MODULE} ${${${PREFIX}_TYPE_OPTION}} ${${PREFIX}_SOURCES})
Packit 1fb8d4
		endif()
Packit 1fb8d4
	endif()
Packit 1fb8d4
	if (${PREFIX}_EXPORT)
Packit 1fb8d4
		export_complex_library(LIBNAME ${${PREFIX}_MODULE})
Packit 1fb8d4
	endif()
Packit 1fb8d4
Packit 1fb8d4
endmacro(add_complex_library)
Packit 1fb8d4
Packit 1fb8d4
if(${CMAKE_VERSION} VERSION_GREATER 2.8.8)
Packit 1fb8d4
	set(CMAKE_OBJECT_TARGET_SUPPORT 1)
Packit 1fb8d4
endif()
Packit 1fb8d4
Packit 1fb8d4
function(create_object_cotarget target)
Packit 1fb8d4
Packit 1fb8d4
	set(cotarget "${target}-objects")
Packit 1fb8d4
Packit 1fb8d4
	get_target_property(${target}_TYPE ${target} TYPE)
Packit 1fb8d4
Packit 1fb8d4
	if(NOT ((${target}_TYPE MATCHES "SHARED_LIBRARY") OR (${target}_TYPE MATCHES "SHARED_LIBRARY")))
Packit 1fb8d4
		return()
Packit 1fb8d4
	endif()
Packit 1fb8d4
Packit 1fb8d4
	get_target_property(${target}_SOURCES ${target} SOURCES)
Packit 1fb8d4
	get_target_property(${target}_LINK_LIBRARIES ${target} LINK_LIBRARIES)
Packit 1fb8d4
	get_target_property(${target}_INCLUDE_DIRECTORIES ${target} INCLUDE_DIRECTORIES)
Packit 1fb8d4
Packit 1fb8d4
	add_library(${cotarget} "OBJECT" ${${target}_SOURCES})
Packit 1fb8d4
Packit 1fb8d4
	set_target_properties(${cotarget} PROPERTIES LINK_LIBRARIES "${${target}_LINK_LIBRARIES}")
Packit 1fb8d4
	set_target_properties(${cotarget} PROPERTIES INCLUDE_DIRECTORIES "${${target}_INCLUDE_DIRECTORIES}")
Packit 1fb8d4
Packit 1fb8d4
	echo_target(${target})
Packit 1fb8d4
	echo_target(${cotarget})
Packit 1fb8d4
Packit 1fb8d4
endfunction()
Packit 1fb8d4