109 cedaRunXcppOnWorkspace

cedaRunXcppOnWorkspace is a private function which is called at the end of the configure step to set the command used to execute Xcpp to translate all the files in the ceda projects in the virtual tree.

CMAKE_HOST_SYSTEM_NAME is the name of the OS CMake is running on. On systems that have the uname command, this variable is set to the output of uname -s. Linux, Windows, and Darwin for Mac OS X are the values found on the big three operating systems.

CMAKE_SYSTEM_NAME can have values such as "Windows", "WindowsCE", "WindowsPhone", "WindowsStore", "Linux", "Darwin" or "Android".

CMAKE_HOST_SYSTEM_PROCESSOR is the name of the CPU CMake is running on. On systems that support uname, this variable is set to the output of uname -p, on windows it is set to the value of the environment variable PROCESSOR_ARCHITECTURE (which can be AMD64, IA64 or x86).

CMAKE_CXX_COMPILER_ID can have values such as "MSVC", "GNU" or "Clang".

MSVC_VERSION is the version of Microsoft Visual C/C++ being used if any. Known version numbers are:

       1200 = VS  6.0
       1300 = VS  7.0
       1310 = VS  7.1
       1400 = VS  8.0
       1500 = VS  9.0
       1600 = VS 10.0
       1700 = VS 11.0
       1800 = VS 12.0
       1900 = VS 14.0

platform='${cedaPlatform}'

Example 1: Run windows_build_ceda_sdk_android.bat on a x64 machine:

    CMAKE_HOST_SYSTEM_NAME      = Windows
    CMAKE_HOST_SYSTEM_PROCESSOR = AMD64
    CMAKE_HOST_SYSTEM_VERSION   = 10.0.17134
    CMAKE_SYSTEM_NAME           = Android
    CMAKE_SYSTEM_PROCESSOR      = aarch64
    CMAKE_SYSTEM_VERSION        = 1
    CMAKE_CXX_COMPILER_ID       = Clang

Example 2: Run windows_package_ceda_sdk.bat on a x64 machine:

    CMAKE_HOST_SYSTEM_NAME      = Windows
    CMAKE_HOST_SYSTEM_PROCESSOR = AMD64
    CMAKE_HOST_SYSTEM_VERSION   = 10.0.17134
    CMAKE_SYSTEM_NAME           = Windows
    CMAKE_SYSTEM_PROCESSOR      = AMD64
    CMAKE_SYSTEM_VERSION        = 10.0.17134
    CMAKE_CXX_COMPILER_ID       = MSVC
    MSVC_VERSION                = 1915

function(cedaRunXcppOnWorkspace)
    get_property(cedaByProducts GLOBAL PROPERTY GP_CEDA_BYPRODUCTS)

    get_property(cedaProjects GLOBAL PROPERTY GP_CEDA_PROJECTS)
    get_property(cedaDependentProjects GLOBAL PROPERTY GP_DEPENDENT_CEDA_PROJECTS)
    get_property(cedaSourceRoots GLOBAL PROPERTY GP_CEDA_SOURCE_ROOTS)
    get_property(cedaRunXcppDeps GLOBAL PROPERTY GP_RUN_XCPP_DEPS)

    get_property(cedaHostOs GLOBAL PROPERTY GP_CEDA_HOST_OS)
    get_property(cedaHostOsVersion GLOBAL PROPERTY GP_CEDA_HOST_OS_VERSION)
    get_property(cedaTargetOs GLOBAL PROPERTY GP_CEDA_TARGET_OS)
    get_property(cedaTargetOsVersion GLOBAL PROPERTY GP_CEDA_TARGET_OS_VERSION)

	get_property(cedaPlatform GLOBAL PROPERTY GP_CEDA_PLATFORM)
	get_property(cedaConfig GLOBAL PROPERTY GP_CEDA_CONFIG)
	get_property(cedaXcpp GLOBAL PROPERTY GP_CEDA_XCPP)
	get_property(cedaXcppConfig GLOBAL PROPERTY GP_CEDA_XCPPCONFIG)

    set(defaultToDll false)
    if (BUILD_SHARED_LIBS)
        set(defaultToDll true)
    endif()

    add_custom_target(CEDA_RUN_XCPP)
	if (NOT cedaRunXcppDeps STREQUAL "")
		add_dependencies(CEDA_RUN_XCPP ${cedaRunXcppDeps})
	endif()

    if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
        set(wslist "")
        foreach(s ${cedaProjects})
            if (NOT wslist STREQUAL "")
                set(wslist "${wslist} ")
            endif()
            set(wslist "${wslist}'${s}'")
        endforeach()

        set(vtlist "")
        foreach(s ${cedaSourceRoots})
            if (NOT vtlist STREQUAL "")
                set(vtlist "${vtlist} ")
            endif()
            set(vtlist "${vtlist}'${s}'")
        endforeach()

        add_custom_command(TARGET CEDA_RUN_XCPP
            COMMAND ${cedaXcpp}
                HOST_SYSTEM_NAME='${CMAKE_HOST_SYSTEM_NAME}'
                HOST_SYSTEM_PROCESSOR='${CMAKE_HOST_SYSTEM_PROCESSOR}'
                HOST_SYSTEM_VERSION='${CMAKE_HOST_SYSTEM_VERSION}'
                SYSTEM_NAME='${CMAKE_SYSTEM_NAME}'
                SYSTEM_PROCESSOR='${CMAKE_SYSTEM_PROCESSOR}'
                SYSTEM_VERSION='${CMAKE_SYSTEM_VERSION}'
                SIZEOF_VOID_P='${CMAKE_SIZEOF_VOID_P}'
                CXX_COMPILER_ID='${CMAKE_CXX_COMPILER_ID}'
                MSVC_VERSION='${MSVC_VERSION}'
                PLATFORM='${cedaPlatform}'
                Ceda_XCPPCONFIG='${cedaXcppConfig}'
                ${cedaXcppConfig}/base.xcpp
                mode=build
                config='${cedaConfig}'
                defaultToDll=${defaultToDll}
                workspaces={${wslist}} virtualTree={${vtlist}}
            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/ceda-build
            BYPRODUCTS ${cedaByProducts})
    else()
        set(wslist "")
        foreach(s ${cedaProjects})
            if (NOT wslist STREQUAL "")
                set(wslist "${wslist} ")
            endif()
            set(wslist "${wslist}\\'${s}\\'")
        endforeach()

        set(vtlist "")
        foreach(s ${cedaSourceRoots})
            if (NOT vtlist STREQUAL "")
                set(vtlist "${vtlist} ")
            endif()
            set(vtlist "${vtlist}\\'${s}\\'")
        endforeach()

        add_custom_command(TARGET CEDA_RUN_XCPP
            COMMAND ${cedaXcpp}
                HOST_SYSTEM_NAME=\\'${CMAKE_HOST_SYSTEM_NAME}\\'
                HOST_SYSTEM_PROCESSOR=\\'${CMAKE_HOST_SYSTEM_PROCESSOR}\\'
                HOST_SYSTEM_VERSION=\\'${CMAKE_HOST_SYSTEM_VERSION}\\'
                SYSTEM_NAME=\\'${CMAKE_SYSTEM_NAME}\\'
                SYSTEM_PROCESSOR=\\'${CMAKE_SYSTEM_PROCESSOR}\\'
                SYSTEM_VERSION=\\'${CMAKE_SYSTEM_VERSION}\\'
                SIZEOF_VOID_P=\\'${CMAKE_SIZEOF_VOID_P}\\'
                CXX_COMPILER_ID=\\'${CMAKE_CXX_COMPILER_ID}\\'
                MSVC_VERSION=\\'${MSVC_VERSION}\\'
                PLATFORM=\\'${cedaPlatform}\\'
                Ceda_XCPPCONFIG=\\'${cedaXcppConfig}\\'
                ${cedaXcppConfig}/base.xcpp
                mode=build
                config=\\'${cedaConfig}\\'
                defaultToDll=${defaultToDll}
                workspaces={${wslist}} virtualTree={${vtlist}}
            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/ceda-build
            BYPRODUCTS ${cedaByProducts})
    endif()

    if(TARGET Xcpp)
        # The executable Xcpp must be built before it can be used to translate files from xc++ to c++
        # Xcpp ---> CEDA_RUN_XCPP
        add_dependencies(CEDA_RUN_XCPP Xcpp)
    endif()

    foreach(s ${cedaDependentProjects})
		add_dependencies(${s} CEDA_RUN_XCPP)
    endforeach()

endfunction(cedaRunXcppOnWorkspace)