Projucer custom Xcode flags in CMake

I noticed that my Release build using CMake is quite large when using CMake (190mb) vs Projucer (60mb) builds. They’re both universal binaries so my best guess is that the CMake version has not stripped out symbols.

I have the following set in my Projucer Custom Xcode Flags for release build:

GCC_GENERATE_DEBUGGING_SYMBOLS=YES, 
GCC_DEBUGGING_SYMBOLS = full,  
DEBUG_INFORMATION_FORMAT=dwarf-with-dsym,  
DWARF_DSYM_FILE_NAME = "$(TARGET_NAME).dSYM”,  
DWARF_DSYM_FOLDER_PATH = "$(CONFIGURATION_BUILD_DIR)/dSyms”, 
DEPLOYMENT_POSTPROCESSING = YES, 
COPY_PHASE_STRIP=YES,  
STRIP_INSTALLED_PRODUCT = YES, 
STRIP_STYLE = all, 
SEPARATE_STRIP = YES, 
LD_VERIFY_BITCODE=NO

Does anyone know how to set those flags in CMake that would get passed to Xcode? Or, do I have to do some kind of post build step that Projucer was actually adding?

These Xcode Flags can be set using the corresponding XCODE_ATTRIBUTE_* target properties.

See XCODE_ATTRIBUTE_<an-attribute> — CMake 3.24.1 Documentation

Yes, I ended up using this, specifically for stripping symbols on a release build:

set_target_properties(myTarget PROPERTIES
        XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS YES
        XCODE_ATTRIBUTE_GCC_DEBUGGING_SYMBOLS FULL
        XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym
        XCODE_ATTRIBUTE_DWARF_DSYM_FILE_NAME foo.dSYM
        XCODE_ATTRIBUTE_DWARF_DSYM_FOLDER_PATH /tmp
        XCODE_ATTRIBUTE_DEPLOYMENT_POSTPROCESSING YES
        XCODE_ATTRIBUTE_COPY_PHASE_STRIP YES
        XCODE_ATTRIBUTE_STRIP_INSTALLED_PRODUCT YES
        XCODE_ATTRIBUTE_STRIP_STYLE ALL
        XCODE_ATTRIBUTE_SEPARATE_STRIP YES
        XCODE_ATTRIBUTE_LD_VERIFY_BITCODE NO
        )

BUT…stripping here was incredibly problematic, odd linking errors, etc, and it didn’t work as simply as using Projucer’s Xcode project. I ended up adding a post build custom command, that worked…after much pain and suffering. It’s essentially this:

get_target_property(dest  ${target} JUCE_PLUGIN_ARTEFACT_FILE)
set(destInner "${dest}/Contents/MacOS/myProduct")
set(STRIP_PROGRAM "/usr/bin/strip")
set(SYMBOL_FILE "${dest}/../${target}.dsym")
add_custom_command (
	TARGET "${target}"
	COMMAND "$<$<CONFIG:Release>:${STRIP_PROGRAM};-x;-o;${SYMBOL_FILE};${destInner}>"
	POST_BUILD
	VERBATIM
	COMMAND_EXPAND_LISTS
)

Hopefully that’s helpful to someone.

2 Likes