Skip to content
Snippets Groups Projects
  1. May 08, 2015
    • Fam Zheng's avatar
      rules.mak: Force CFLAGS for all objects in DSO · d24697e1
      Fam Zheng authored
      
      Because of the trick of process-archive-undefs, all .mo objects, even
      with --enable-modules, are dependencies of executables.
      
      This breaks CFLAGS propogation because the compiling of module object
      will happen too early before building for DSO.
      
      With GCC 5, the linking would fail because .o doesn't have -fPIC. Also,
      BUILD_DSO will be missed. (module-common.o will have it, so the stamp
      symbol was still liked in .so).
      
      Fix the problem by forcing the CFLAGS on individual .o-cflags during
      unnest-vars.
      
      Reported-by: default avatarAlexander Graf <agraf@suse.de>
      Signed-off-by: default avatarFam Zheng <famz@redhat.com>
      Cc: qemu-stable@nongnu.org # 2.3
      Message-Id: <1430981715-31465-1-git-send-email-famz@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      d24697e1
  2. Jan 14, 2015
  3. Oct 31, 2014
  4. Sep 19, 2014
  5. Sep 09, 2014
    • Fam Zheng's avatar
      rules.mak: Fix DSO build by pulling in archive symbols · c261d774
      Fam Zheng authored
      
      This fixes an issue with module build system. block/iscsi.so is
      currently broken:
      
          $ ~/build/last/qemu-img
          Failed to open module: /home/fam/build/master/block-iscsi.so:
          undefined symbol: qmp_query_uuid
          qemu-img: Not enough arguments
          Try 'qemu-img --help' for more information
      
      To fix this, we should (at least) let qemu-img link qmp_query_uuid from
      libqemustub.a. (There are a few other symbols missing, as well.)
      
      This patch changes the linking rules to:
      
      1) Build ".mo" with "ld -r -o $@ $^" for each ".so", and later build .so
         with it.
      
      2) Always build all the .mo before linking the executables. This is
         achieved by adding those .mo files to the executables' "-y"
         variables.
      
      3) When linking an executable, those .mo files in its "-y" variables are
         filtered out, and replaced by one or more -Wl,-u,$symbol flags. This
         is done in the added macro "process-archive-undefs".
      
         These "-Wl,-u,$symbol" flags will force ld to pull in the function
         definition from the archives when linking.
      
         Note that the .mo objects, that are actually meant to be linked in
         the executables, are already expanded in unnest-vars, before the
         linking command. So we are safe to simply filter out .mo for the
         purpose of pulling undefined symbols.
      
         process-archive-undefs works as this: For each ".mo", find all the
         undefined symbols in it, filter ones that are defined in the
         archives. For each of these symbols, generate a "-Wl,-u,$symbol" in
         the link command, and put them before archive names in the command
         line.
      
      Suggested-by: default avatarH.J. Lu <hjl.tools@gmail.com>
      Signed-off-by: default avatarFam Zheng <famz@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      c261d774
  6. Jun 24, 2014
  7. Jun 16, 2014
  8. Jun 10, 2014
    • Fam Zheng's avatar
      rules.mak: Rewrite unnest-vars · 1c33ac57
      Fam Zheng authored
      
      The macro unnest-vars is the most important, complicated but hard to
      track magic in QEMU's build system.
      
      Rewrite it in a (hopefully) clearer way, with more comments, to make it
      easier to understand and maintain.
      
      Remove DSO_CFLAGS and module-objs-m that are not used.
      
      A bonus fix of this version is, per object variables are properly
      protected in save-objs and load-objs, before including sub-dir
      Makefile.objs, just as nested variables are. So the occasional same
      object name from different directory levels won't step on each other's
      foot.
      
      Signed-off-by: default avatarFam Zheng <famz@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      1c33ac57
  9. May 09, 2014
    • Paolo Bonzini's avatar
      build: simplify and fix fix-obj-vars · 2a8e6c7a
      Paolo Bonzini authored
      
      fix-obj-vars has the undesired side effect of breaking -cflags
      -objs and -libs variables in the toplevel Makefile.objs.  The
      variables in the toplevel Makefile.objs do not need any fix,
      so fix-obj-vars need not do anything.
      
      Since we are touching it, remove the now unnecessary $(if)
      in the callers.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      2a8e6c7a
  10. May 08, 2014
  11. Mar 17, 2014
  12. Feb 20, 2014
    • Fam Zheng's avatar
      module: implement module loading · e26110cf
      Fam Zheng authored
      
      This patch adds loading, stamp checking and initialization of modules.
      
      The init function of dynamic module is no longer directly called as
      __attribute__((constructor)) in static linked version, it is called
      only after passed the checking of presense of stamp symbol:
      
          qemu_stamp_$RELEASEHASH
      
      where $RELEASEHASH is generated by hashing version strings and content
      of configure script.
      
      With this, modules built from a different tree/version/configure will
      not be loaded.
      
      The module loading code requires gmodule-2.0.
      
      Modules are searched under
       - CONFIG_MODDIR
       - executable folder (to allow running qemu-{img,io} in the build
         directory)
       - ../ of executable folder (to allow running system emulator in the
         build directory)
      
      Modules are linked under their subdir respectively, then copied to top
      level of build directory for above convinience, e.g.:
          $(BUILD_DIR)/block/curl.so -> $(BUILD_DIR)/block-curl.so
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarFam Zheng <famz@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      e26110cf
    • Fam Zheng's avatar
      rules.mak: introduce DSO rules · 17969268
      Fam Zheng authored
      
      Add necessary rules and flags for shared object generation.
      The new rules introduced here are:
      
      1) %.o in $(common-obj-m) is compiled to %.o, then linked to %.so.
      
      2) %.mo in $(common-obj-m) is the placeholder for %.so for pattern
      matching in Makefile. It's linked to "-shared" with all its dependencies
      (multiple *.o) as input. Which means the list of depended objects must
      be specified in each sub-Makefile.objs:
      
          foo.mo-objs := bar.o baz.o qux.o
      
      in the same style with foo.o-cflags and foo.o-libs. The objects here
      will be prefixed with "$(obj)/" if it's a subdirectory Makefile.objs.
      
      3) For all files ending up in %.so, the following is added automatically:
      
          foo.o-cflags += -fPIC -DBUILD_DSO
      
      Also introduce --enable-modules in configure, the option will enable
      support of shared object build. Otherwise objects are static linked to
      executables.
      
      Signed-off-by: default avatarFam Zheng <famz@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      17969268
    • Fam Zheng's avatar
      rules.mak: allow per object cflags and libs · 5c0d52bc
      Fam Zheng authored
      
      Adds extract-libs in LINK to expand any "per object libs", the syntax to define
      such a libs options is like:
      
              foo.o-libs := $(CURL_LIBS)
      
      in block/Makefile.objs.
      
      Similarly,
      
              foo.o-cflags := $(FOO_CFLAGS)
      
      is also supported.
      
      "foo.o" must be listed in a nested var (e.g. common-obj-y) to make the
      option variables effective.
      
      Signed-off-by: default avatarFam Zheng <famz@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      5c0d52bc
    • Fam Zheng's avatar
      rules.mak: fix $(obj) to a real relative path · ba1183da
      Fam Zheng authored
      
      Makefile.target includes rule.mak and unnested common-obj-y, then prefix
      them with '../', this will ignore object specific QEMU_CFLAGS in subdir
      Makefile.objs:
      
          $(obj)/curl.o: QEMU_CFLAGS += $(CURL_CFLAGS)
      
      Because $(obj) here is './block', instead of '../block'. This doesn't
      hurt compiling because we basically build all .o from top Makefile,
      before entering Makefile.target, but it will affact arriving per-object
      libs support.
      
      The starting point of $(obj) is passed in as argument of unnest-vars, as
      well as nested variables, so that different Makefiles can pass in a
      right value.
      
      Signed-off-by: default avatarFam Zheng <famz@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      ba1183da
  13. Feb 08, 2014
  14. Oct 16, 2013
  15. Sep 09, 2013
  16. May 03, 2013
    • Paolo Bonzini's avatar
      win32: fix compilation again · fba90ac1
      Paolo Bonzini authored
      
      While commit c02817e5 fixed compilation
      without an installed libtool, moving the dependencies to rules.mak does
      not work because the version-*-y variables are not defined yet.  Building
      in a clean tree thus fails.
      
      Revert the commit and remove the dummy /bin/false assignment to LIBTOOL.
      This makes the build work, at the price of slightly worse errors when
      there are Makefile bugs.
      
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1367425815-15083-1-git-send-email-pbonzini@redhat.com
      Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      fba90ac1
  17. Apr 30, 2013
    • Dunrong Huang's avatar
      rules.mk: Fix build breakage · 7e7da8e3
      Dunrong Huang authored
      
      The following error occurs when building dtc module:
      
              CHK version_gen.h
               CC libfdt/fdt.o
      cc1: error: dtc: No such file or directory [-Werror]
      cc1: all warnings being treated as errors
      make[1]: *** [libfdt/fdt.o] Error 1
      make: *** [subdir-dtc] Error 2
      
      In rules.mak, "-I$(<D) -I$(@D)" was expanded to "-Idtc -I." when
      building submodule dct. Due to the using of "-Wmissing-include-dirs,
      a warning would be rarsed. To avoid it, add "-I$(<D) -I$(@D)" to
      QEMU_INCLUDES instead of QEMU_CFLAGS so that QEMU_CFLAGS does not
      contain the "-Idtc".
      
      Cc: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
      Cc: Blue Swirl <blauwirbel@gmail.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarDunrong Huang <riegamaths@gmail.com>
      Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1367247132-19622-1-git-send-email-riegamaths@gmail.com
      Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      7e7da8e3
  18. Apr 26, 2013
  19. Apr 24, 2013
  20. Jan 29, 2013
  21. Jan 12, 2013
  22. Dec 19, 2012
  23. Nov 18, 2012
  24. Aug 16, 2012
    • Peter Maydell's avatar
      Support using a different compiler for Objective-C files · 3c4a4d0d
      Peter Maydell authored
      
      MacOSX 10.8 ("Mountain Lion") requires us to compile our one
      Objective-C source file with clang even if the rest of QEMU
      requires a real gcc, because the system headers we use make
      use of Apple's "Blocks" extension to C/ObjC, and mainline
      gcc doesn't support that. Since we only need to use a true
      gcc for the parts of QEMU that use the fixed-register
      env variable, we can simply use clang to build the ObjC
      file: it will link to the gcc-built objects with no problems.
      
      Add the necessary support for an OBJCC variable in the
      makefile and configure machinery; we default to clang
      if we have it, otherwise whatever CC is (since gcc
      might be the Apple gcc which does support Blocks).
      
      Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
      Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
      3c4a4d0d
  25. Jul 28, 2012
Loading