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