• Gregor Jasny's avatar
    Xcode: Control emission of EFFECTIVE_PLATFORM_NAME · 10c9c73d
    Gregor Jasny authored and Brad King's avatar Brad King committed
    When building with multiple SDKs within one project Xcode requires
    the usage of ${EFFECTIVE_PLATFORM_NAME} to put temporary and build
    outout into separate directories. For example an iOS device and
    simulator build use two different SDKs (iphoneos and iphonesimulator).
    
    In the past cmake tries to detect embedded toolchains that could
    possibly use simulators and emitted EFFECTIVE_PLATFORM_NAME (EPN)
    at the proper locations. In #16253 Mark noticed that if he
    uses macosx and iphoneos in combination the necessary EPN is not
    emitted. This is because CMake by default assumes macosx SDK which
    does not trigger EPN emission.
    
    The fist naive approach - enabling EPN unconditionally revealed that
    then the EPN leaks into generator expressions like $<TARGET_FILE:xxx>
    which might be a regression and thus is unacceptable.
    
    The next approach was to add an CMake property to enable EPN emission
    unconditionally. This solved the reported problem.
    
    But the EPN leakage also happened for the embedded toolchains already
    without anyone noticing. So the control property was turned into a
    tri-state one:
    
     * No definition: EPN is activated for embedded toolchains like before
     * ON: EPN is always emitted
     * OFF: EPN is never emitted
    
    That approach gives the user the chance to disable EPN for embedded
    toolchains and restores generator expression functionality for those.
    
    Closes: #16253
    10c9c73d