From 512c21b1259a67bedc9954141d2a698f087d1e8e Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 25 Feb 2012 23:50:38 +0000 Subject: [PATCH] [CMAKE] * Introduce a way to compile GCC builds with PDB style debug info (isolated into .dbg files). This will reduce the memory footprint considerably, among other benefits. svn path=/trunk/; revision=55873 --- reactos/boot/freeldr/freeldr/CMakeLists.txt | 5 ++ reactos/cmake/gcc.cmake | 81 +++++++++++++++------ 2 files changed, 63 insertions(+), 23 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/CMakeLists.txt b/reactos/boot/freeldr/freeldr/CMakeLists.txt index 8b5f3a54dda..ae53dad5483 100644 --- a/reactos/boot/freeldr/freeldr/CMakeLists.txt +++ b/reactos/boot/freeldr/freeldr/CMakeLists.txt @@ -1,4 +1,9 @@ +if(SEPARATE_DBG) + # FIXME: http://sourceware.org/bugzilla/show_bug.cgi?id=11822 + set(CMAKE_C_CREATE_SHARED_LIBRARY " -o ") +endif() + spec2def(freeldr.sys freeldr.spec) if(ARCH MATCHES i386) diff --git a/reactos/cmake/gcc.cmake b/reactos/cmake/gcc.cmake index 44f0929a254..0d0fe2c12cf 100644 --- a/reactos/cmake/gcc.cmake +++ b/reactos/cmake/gcc.cmake @@ -4,12 +4,25 @@ if(CCACHE STREQUAL "ccache") message("-- Enabling ccache build - done") endif() +# PDB style debug info +if(NOT DEFINED SEPARATE_DBG) + set(SEPARATE_DBG FALSE) +endif() + +if(SEPARATE_DBG) + file(MAKE_DIRECTORY ${REACTOS_BINARY_DIR}/symbols) +endif() + # Compiler Core add_compile_flags("-pipe -fms-extensions") -# Debugging (Note: DWARF-4 on 4.5.1 when we ship) -# add_compile_flags("-gdwarf-2 -g2 -femit-struct-debug-detailed=none -feliminate-unused-debug-types") -add_compile_flags("-gstabs+") +# Debugging +if(SEPARATE_DBG) + add_compile_flags("-gdwarf-2 -g2") +else() + add_compile_flags("-gstabs+") +endif() + # Do not allow warnings add_compile_flags("-Werror") @@ -91,30 +104,52 @@ else() set(ARCH2 ${ARCH}) endif() -get_target_property(RSYM native-rsym IMPORTED_LOCATION_NOCONFIG) - -set(CMAKE_C_LINK_EXECUTABLE - " -o " - "${RSYM} ") - -set(CMAKE_CXX_LINK_EXECUTABLE - " -o " - "${RSYM} ") +if(SEPARATE_DBG) + # PDB style debug puts all dwarf debug info in a separate dbg file + set(OBJCOPY ${CMAKE_OBJCOPY}) + set(CMAKE_C_LINK_EXECUTABLE + " -o " + "${OBJCOPY} --only-keep-debug ${REACTOS_BINARY_DIR}/symbols/.dbg" + "${OBJCOPY} --strip-debug ") + set(CMAKE_CXX_LINK_EXECUTABLE + " -o " + "${OBJCOPY} --only-keep-debug ${REACTOS_BINARY_DIR}/symbols/.dbg" + "${OBJCOPY} --strip-debug ") + set(CMAKE_C_CREATE_SHARED_LIBRARY + " -o " + "${OBJCOPY} --only-keep-debug ${REACTOS_BINARY_DIR}/symbols/.dbg" + "${OBJCOPY} --strip-debug ") + set(CMAKE_CXX_CREATE_SHARED_LIBRARY + " -o " + "${OBJCOPY} --only-keep-debug ${REACTOS_BINARY_DIR}/symbols/.dbg" + "${OBJCOPY} --strip-debug ") + set(CMAKE_RC_CREATE_SHARED_LIBRARY + " -o " + "${OBJCOPY} --only-keep-debug ${REACTOS_BINARY_DIR}/symbols/.dbg" + "${OBJCOPY} --strip-debug ") +else() + # Normal rsym build + get_target_property(RSYM native-rsym IMPORTED_LOCATION_NOCONFIG) + set(CMAKE_C_LINK_EXECUTABLE + " -o " + "${RSYM} ") + set(CMAKE_CXX_LINK_EXECUTABLE + " -o " + "${RSYM} ") + set(CMAKE_C_CREATE_SHARED_LIBRARY + " -o " + "${RSYM} ") + set(CMAKE_CXX_CREATE_SHARED_LIBRARY + " -o " + "${RSYM} ") + set(CMAKE_RC_CREATE_SHARED_LIBRARY + " -o " + "${RSYM} ") +endif() set(CMAKE_EXE_LINKER_FLAGS "-nostdlib -Wl,--enable-auto-image-base,--disable-auto-import,--disable-stdcall-fixup") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS_INIT} -Wl,--disable-stdcall-fixup") -set(CMAKE_C_CREATE_SHARED_LIBRARY - " -o " - "${RSYM} ") -set(CMAKE_CXX_CREATE_SHARED_LIBRARY - " -o " - "${RSYM} ") -set(CMAKE_RC_CREATE_SHARED_LIBRARY - " -o " - "${RSYM} ") - SET(CMAKE_C_COMPILE_OBJECT "${CCACHE} -o -c ") SET(CMAKE_CXX_COMPILE_OBJECT "${CCACHE} -o -c ") set(CMAKE_ASM_COMPILE_OBJECT " -x assembler-with-cpp -o -I${REACTOS_SOURCE_DIR}/include/asm -I${REACTOS_BINARY_DIR}/include/asm -D__ASM__ -c ")