All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Andreas Färber" <afaerber@suse.de>
To: Roger Pau Monne <roger.pau@entel.upc.edu>
Cc: Blue Swirl <blauwirbel@gmail.com>,
	qemu-devel@nongnu.org, xen-devel@lists.xen.org
Subject: Re: [Qemu-devel] [PATCH] build: add needed missing libraries libm and librt
Date: Sat, 18 Feb 2012 17:21:21 +0100	[thread overview]
Message-ID: <4F3FD001.4070703@suse.de> (raw)
In-Reply-To: <CAAu8pHttc5Ea9jQh3pcON2nEW7o_WoAors8ZcjA4t+627dEsew@mail.gmail.com>

Am 18.02.2012 09:24, schrieb Blue Swirl:
> On Wed, Feb 8, 2012 at 17:06, Roger Pau Monne <roger.pau@entel.upc.edu> wrote:
>> libm is used in cutils.c, but the library was not specified
>> when linking some binaries, throwing the following error:
>>
>> cutils.o: In function `strtosz_suffix_unit':
>> /home/royger/xen-clean/tools/qemu-xen-dir/cutils.c:354: undefined
>> reference to `__isnan'
>> /home/royger/xen-clean/tools/qemu-xen-dir/cutils.c:357: undefined
>> reference to `modf'
>> collect2: ld returned 1 exit status
>>
>> According to modf man page [0], -lm should be used when linking.
>>
>> librt is used in qemu-time.c, but again the library was not specified
>> at link time, throwing the following error:
>>
>> /home/royger/xen-clean/tools/qemu-xen-dir/qemu-timer.c:597: undefined
>> reference to `timer_gettime'
>> /home/royger/xen-clean/tools/qemu-xen-dir/qemu-timer.c:610: undefined
>> reference to `timer_settime'
>> ../qemu-timer.o: In function `dynticks_start_timer':
>> /home/royger/xen-clean/tools/qemu-xen-dir/qemu-timer.c:565: undefined
>> reference to `timer_create'
>> ../qemu-timer.o: In function `dynticks_stop_timer':
>> /home/royger/xen-clean/tools/qemu-xen-dir/qemu-timer.c:583: undefined
>> reference to `timer_delete'
>> collect2: ld returned 1 exit status
>>
>> According to timer_getttime man page [1], -lrt should be used when
>> linking.
>>
>> [0] http://linux.die.net/man/3/modf
>> [1] http://linux.die.net/man/2/timer_gettime
> 
> This is Linux man page, is this correct for all OS we support?

No, not for Haiku or Mac OS X.

> We already have a test for -lrt in configure, but it looks like it
> does not detect your case correctly. You should fix that instead.
> 
>> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
>> ---
>>  Makefile        |    4 ++--
>>  Makefile.target |    2 ++
>>  2 files changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/Makefile b/Makefile
>> index 301c75e..e2c3cd4 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -34,7 +34,7 @@ configure: ;
>>
>>  $(call set-vpath, $(SRC_PATH):$(SRC_PATH)/hw)
>>
>> -LIBS+=-lz $(LIBS_TOOLS)
>> +LIBS+=-lz -lm -lrt $(LIBS_TOOLS)

NACK. You need to make sure it either lands in $(LIBS_TOOLS) or is added
via a new variable with host-dependent contents.

>>
>>  ifdef BUILD_DOCS
>>  DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 QMP/qmp-commands.txt
>> @@ -170,7 +170,7 @@ test-coroutine: test-coroutine.o qemu-timer-common.o async.o $(coroutine-obj-y)
>>  $(qapi-obj-y): $(GENERATED_HEADERS)
>>  qapi-dir := $(BUILD_DIR)/qapi-generated
>>  test-visitor.o test-qmp-commands.o qemu-ga$(EXESUF): QEMU_CFLAGS += -I $(qapi-dir)
>> -qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
>> +qemu-ga$(EXESUF): LIBS = $(LIBS_QGA) -lm

NACK. Either needs to do LIBS += or must go in $(LIBS_QGA) or new
conditionalized variable.

>>
>>  $(qapi-dir)/test-qapi-types.c $(qapi-dir)/test-qapi-types.h :\
>>  $(SRC_PATH)/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-types.py
>> diff --git a/Makefile.target b/Makefile.target
>> index a111521..95d6bc0 100644
>> --- a/Makefile.target
>> +++ b/Makefile.target
>> @@ -33,6 +33,8 @@ endif
>>  PROGS=$(QEMU_PROG)
>>  STPFILES=
>>
>> +LIBS+=-lrt
>> +

>>  ifndef CONFIG_HAIKU
>>  LIBS+=-lm
>>  endif

Here's the special treatment that avoids adding -lm on Haiku host
because it doesn't have a libm.so (git-blame would've told you it's in
libroot.so there); on Darwin there's a compatibility symlink but it's in
libSystem.dylib actually and an ifndef would be appropriate as well.
POSIX does not mandate -lm for math functions.

Would moving this snippet to Makefile.objs help? What system are you on
anyway and are you actually using upstream qemu.git? openSUSE 12.1 does
not complain, and without a test case it's hard to find a solution here.

Andreas

>> --
>> 1.7.9

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

  parent reply	other threads:[~2012-02-18 16:21 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-08 17:06 [Qemu-devel] [PATCH] build: add needed missing libraries libm and librt Roger Pau Monne
2012-02-18  8:24 ` Blue Swirl
2012-02-18  8:24 ` Blue Swirl
2012-02-18 16:21   ` Andreas Färber
2012-02-18 16:21   ` Andreas Färber [this message]
2012-02-20 11:56     ` Roger Pau Monné
2012-02-20 11:56     ` Roger Pau Monné

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4F3FD001.4070703@suse.de \
    --to=afaerber@suse.de \
    --cc=blauwirbel@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=roger.pau@entel.upc.edu \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.