diff options
author | mark@chromium.org <mark@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-05 19:26:07 +0000 |
---|---|---|
committer | mark@chromium.org <mark@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-05 19:26:07 +0000 |
commit | e14a9f93c4ca927334008eb83127e1fb7598fe1c (patch) | |
tree | fa724e9008c20f9734084f6758625045e6f59452 /build | |
parent | 7fa319410e5dbc1739e476f317a33e0ab276a94a (diff) | |
download | chromium_src-e14a9f93c4ca927334008eb83127e1fb7598fe1c.zip chromium_src-e14a9f93c4ca927334008eb83127e1fb7598fe1c.tar.gz chromium_src-e14a9f93c4ca927334008eb83127e1fb7598fe1c.tar.bz2 |
Move the entire application into a dylib (framework)
Review URL: http://codereview.chromium.org/160538
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22506 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'build')
-rw-r--r-- | build/common.gypi | 95 | ||||
-rwxr-xr-x | build/mac/dump_app_syms | 31 | ||||
-rwxr-xr-x | build/mac/strip_save_dsym | 27 |
3 files changed, 113 insertions, 40 deletions
diff --git a/build/common.gypi b/build/common.gypi index 20887c3..13178ba 100644 --- a/build/common.gypi +++ b/build/common.gypi @@ -13,6 +13,31 @@ # Variables expected to be overriden on the GYP command line (-D) or by # ~/.gyp/include.gypi. + # Putting a variables dict inside another variables dict looks kind of + # weird. This is done so that "branding" and "buildtype" are defined as + # variables within the outer variables dict here. This is necessary + # to get these variables defined for the conditions within this variables + # dict that operate on these variables. + 'variables': { + # Override branding to select the desired branding flavor. + 'branding%': 'Chromium', + + # Override buildtype to select the desired build flavor. + # Dev - everyday build for development/testing + # Official - release build (generally implies additional processing) + # TODO(mmoss) Once 'buildtype' is fully supported (e.g. Windows gyp + # conversion is done), some of the things which are now controlled by + # 'branding', such as symbol generation, will need to be refactored based + # on 'buildtype' (i.e. we don't care about saving symbols for non-Official + # builds). + 'buildtype%': 'Dev', + }, + + # Define branding and buildtype on the basis of their settings within the + # variables sub-dict above, unless overridden. + 'branding%': '<(branding)', + 'buildtype%': '<(buildtype)', + # Override chromium_mac_pch and set it to 0 to suppress the use of # precompiled headers on the Mac. Prefix header injection may still be # used, but prefix headers will not be precompiled. This is useful when @@ -23,19 +48,6 @@ # Linux-Mac cross compiler distcc farm. 'chromium_mac_pch%': 1, - # Override branding to select the desired branding flavor. - 'branding%': 'Chromium', - - # Override buildtype to select the desired build flavor. - # Dev - everyday build for development/testing - # Official - release build (generally implies additional processing) - # TODO(mmoss) Once 'buildtype' is fully supported (e.g. Windows gyp - # conversion is done), some of the things which are now controlled by - # 'branding', such as symbol generation, will need to be refactored based - # on 'buildtype' (i.e. we don't care about saving symbols for non-Official - # builds). - 'buildtype%': 'Dev', - # Set to 1 to enable code coverage. In addition to build changes # (e.g. extra CFLAGS), also creates a new target in the src/chrome # project file called "coverage". @@ -104,6 +116,31 @@ 'linux_sandbox_chrome_path%': '/opt/google/chrome/chrome', 'conditions': [ + ['OS=="mac"', { + 'conditions': [ + # mac_product_name is set to the name of the .app bundle as it should + # appear on disk. This duplicates data from + # chrome/app/theme/chromium/BRANDING and + # chrome/app/theme/google_chrome/BRANDING, but is necessary to get + # these names into the build system. + ['branding=="Chrome"', { + 'mac_product_name%': 'Google Chrome', + }, { # else: branding!="Chrome" + 'mac_product_name%': 'Chromium', + }], + + # Feature variables for enabling Mac Breakpad and Keystone auto-update + # support. Both features are on by default in official builds with + # Chrome branding. + ['branding=="Chrome" and buildtype=="Official"', { + 'mac_breakpad%': 1, + 'mac_keystone%': 1, + }, { # else: branding!="Chrome" or buildtype!="Official" + 'mac_breakpad%': 0, + 'mac_keystone%': 0, + }], + ], + }], # OS=="mac" # Whether to use multiple cores to compile with visual studio. This is # optional because it sometimes causes corruption on VS 2005. # It is on by default on VS 2008 and off on VS 2005. @@ -514,7 +551,7 @@ ['_mac_bundle', { 'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-ObjC']}, }], - ['_type=="executable"', { + ['_type=="executable" or _type=="shared_library"', { 'target_conditions': [ ['mac_real_dsym == 1', { # To get a real .dSYM bundle produced by dsymutil, set the @@ -527,9 +564,19 @@ 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym', 'DEPLOYMENT_POSTPROCESSING': 'YES', 'STRIP_INSTALLED_PRODUCT': 'YES', - }, - }, - }, + 'target_conditions': [ + ['_type=="shared_library"', { + # The Xcode default is to strip debugging symbols + # only (-S). Local symbols should be stripped as + # well, which will be handled by -x. Xcode will + # continue to insert -S when stripping even when + # additional flags are added with STRIPFLAGS. + 'STRIPFLAGS': '-x', + }], # _type=="shared_library" + ], # target_conditions + }, # xcode_settings + }, # configuration "Release" + }, # configurations }, { # mac_real_dsym != 1 # To get a fast fake .dSYM bundle, use a post-build step to # produce the .dSYM and strip the executable. strip_from_xcode @@ -545,13 +592,13 @@ 'postbuild_name': 'Strip If Needed', 'action': ['<(strip_from_xcode_path)'], }, - ], - }], - ], - }], - ], - }, - }], + ], # postbuilds + }], # mac_real_dsym + ], # target_conditions + }], # _type=="executable" or _type=="shared_library" + ], # target_conditions + }, # target_defaults + }], # OS=="mac" ['OS=="win"', { 'target_defaults': { 'defines': [ diff --git a/build/mac/dump_app_syms b/build/mac/dump_app_syms index 044e172..cd6e626 100755 --- a/build/mac/dump_app_syms +++ b/build/mac/dump_app_syms @@ -30,19 +30,32 @@ FULL_VERSION="${MAJOR}.${MINOR}.${BUILD}.${PATCH}" SRC_APP_PATH="${BUILT_PRODUCTS_DIR}/${SRC_APP_NAME}.app" # Created by the build/mac/strip_from_xcode script. UNSTRIPPED_APP="${SRC_APP_PATH}.dSYM/Contents/Resources/DWARF/${SRC_APP_NAME}" -SYMBOL_FILE="${BUILT_PRODUCTS_DIR}/${SRC_APP_NAME}-${FULL_VERSION}-i386.breakpad" +APP_SYMBOL_FILE="${BUILT_PRODUCTS_DIR}/${SRC_APP_NAME}-${FULL_VERSION}-i386.breakpad" # Only run dump_syms if the file has changed since we last did a dump. -if [ "${UNSTRIPPED_APP}" -nt "${SYMBOL_FILE}" ] ; then - "${BREAKPAD_DUMP_SYMS}" -a i386 "${UNSTRIPPED_APP}" > "${SYMBOL_FILE}" +if [ "${UNSTRIPPED_APP}" -nt "${APP_SYMBOL_FILE}" ] ; then + "${BREAKPAD_DUMP_SYMS}" -a i386 "${UNSTRIPPED_APP}" > "${APP_SYMBOL_FILE}" fi +APP_DSYM_NAME="${SRC_APP_NAME}.app.dSYM" -DSYM_NAME="${SRC_APP_NAME}.app.dSYM" -DSYM_TAR_PATH="${BUILT_PRODUCTS_DIR}/${DSYM_NAME}.tar.bz2" +# Do the same thing for chrome_dll. + +SRC_DYLIB_NAME="${SRC_APP_NAME} Framework" +SRC_DYLIB_PATH="${BUILT_PRODUCTS_DIR}/${SRC_DYLIB_NAME}.framework" +UNSTRIPPED_DYLIB="${SRC_DYLIB_PATH}.dSYM/Contents/Resources/DWARF/${SRC_DYLIB_NAME}" +DYLIB_SYMBOL_FILE="${BUILT_PRODUCTS_DIR}/${SRC_DYLIB_NAME}-${FULL_VERSION}-i386.breakpad" +if [ "${UNSTRIPPED_DYLIB}" -nt "${DYLIB_SYMBOL_FILE}" ] ; then + "${BREAKPAD_DUMP_SYMS}" -a i386 "${UNSTRIPPED_DYLIB}" > "${DYLIB_SYMBOL_FILE}" +fi +DYLIB_DSYM_NAME="${SRC_DYLIB_NAME}.framework.dSYM" + +DSYM_TAR_PATH="${BUILT_PRODUCTS_DIR}/${APP_DSYM_NAME}.tar.bz2" # Make a .tar.bz2 out of the .dSYM -if [ "${BUILT_PRODUCTS_DIR}/${DSYM_NAME}" -nt "${DSYM_TAR_PATH}" ] ; then - # we do a cd so when building the tar, we don't include the build dir in the - # tar paths. - (cd "${BUILT_PRODUCTS_DIR}" && tar -jcf "${DSYM_TAR_PATH}" "${DSYM_NAME}") +if [ "${BUILT_PRODUCTS_DIR}/${APP_DSYM_NAME}" -nt "${DSYM_TAR_PATH}" ] || + [ "${BUILT_PRODUCTS_DIR}/${DYLIB_DSYM_NAME}" -nt "${DSYM_TAR_PATH}" ] ; then + # Change directory so when building the tar, we don't include the build dir + # in the tar paths. + (cd "${BUILT_PRODUCTS_DIR}" && + tar -jcf "${DSYM_TAR_PATH}" "${APP_DSYM_NAME}" "${DYLIB_DSYM_NAME}") fi diff --git a/build/mac/strip_save_dsym b/build/mac/strip_save_dsym index 0e54b93..42d16cf 100755 --- a/build/mac/strip_save_dsym +++ b/build/mac/strip_save_dsym @@ -43,13 +43,18 @@ import time # architecture. On error, returns an empty list. Determines the architecture # list by calling file. def macho_archs(macho): + macho_types = ["executable", + "dynamically linked shared library", + "bundle"] + macho_types_re = "Mach-O (?:64-bit )?(?:" + "|".join(macho_types) + ")" + file_cmd = subprocess.Popen(["/usr/bin/file", "-b", "--", macho], - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout=subprocess.PIPE) archs = [] type_line = file_cmd.stdout.readline() - type_match = re.match("^Mach-O executable (.*)$", type_line) + type_match = re.match("^%s (.*)$" % macho_types_re, type_line) if type_match: archs.append(type_match.group(1)) return [type_match.group(1)] @@ -60,7 +65,7 @@ def macho_archs(macho): for i in range(0, int(type_match.group(1))): arch_line = file_cmd.stdout.readline() arch_match = re.match( - "^.* \(for architecture (.*)\):\tMach-O executable .*$", + "^.* \(for architecture (.*)\):\t%s .*$" % macho_types_re, arch_line) if arch_match: archs.append(arch_match.group(1)) @@ -68,6 +73,9 @@ def macho_archs(macho): if file_cmd.wait() != 0: archs = [] + if len(archs) == 0: + print >> sys.stderr, "No architectures in %s" % macho + return archs # Returns a dictionary mapping architectures contained in the file as returned @@ -75,9 +83,11 @@ def macho_archs(macho): # Architectures with no LC_UUID load command are omitted from the dictionary. # Determines the UUID value by calling otool. def macho_uuids(macho): - archs = macho_archs(macho) + uuids = {} - uuids = {} + archs = macho_archs(macho) + if len(archs) == 0: + return uuids for arch in archs: if arch == "": @@ -85,7 +95,7 @@ def macho_uuids(macho): otool_cmd = subprocess.Popen(["/usr/bin/otool", "-arch", arch, "-l", "-", macho], - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout=subprocess.PIPE) # state 0 is when nothing UUID-related has been seen yet. State 1 is # entered after a load command begins, but it may not be an LC_UUID load # command. States 2, 3, and 4 are intermediate states while reading an @@ -138,6 +148,9 @@ def macho_uuids(macho): if state == 5: uuids[arch] = uuid.upper() + if len(uuids) == 0: + print >> sys.stderr, "No UUIDs in %s" % macho + return uuids # Given a path to a Mach-O file and possible information from the environment, @@ -309,5 +322,5 @@ def main(argv=None): return 0 -if __name__ == '__main__': +if __name__ == "__main__": sys.exit(main(sys.argv)) |