Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/Makefile.common

    r664af708 r67b05ff  
    4040#   BINARY         (/) binary output name (like appname)
    4141#   LIBRARY        (/) library output name (like libname)
     42#
    4243#   EXTRA_OUTPUT       additional output targets
    4344#   EXTRA_CLEAN        additional cleanup targets
     45#
     46# Optionally, for a binary:
     47#   STATIC_NEEDED      set to 'y' for init binaries, will build statically
     48#                      linked version
     49#   STATIC_ONLY        set to 'y' if binary cannot be linked dynamically
     50#                      (e.g. uses thread-local variables)
     51#
     52# Optionally, for a libary:
     53#   SLIBRARY           Name with full version, e.g. libfoo.so.0.0
     54#   LSONAME            Soname / name with short version, e.g. libfoo.so.0
    4455#
    4556# (x) required variables
     
    7384endif
    7485
     86ifeq ($(CONFIG_BUILD_SHARED_LIBS), y)
     87        ifneq ($(SLIBRARY),)
     88                LARCHIVE = $(LIBRARY).la
     89                LOUTPUT = $(SLIBRARY)
     90                EXTRA_OUTPUT += $(LOUTPUT).disasm $(LIBRARY).so $(LSONAME)
     91                EXTRA_CLEAN += $(LOUTPUT).map $(LOUTPUT).ldisasm \
     92                    $(LIBC_PREFIX)/shared/arch/$(UARCH)/_lib.ld \
     93                    $(LIBRARY).so $(LSONAME)
     94        endif
     95endif
     96
    7597DEPEND = Makefile.depend
    7698DEPEND_PREV = $(DEPEND).prev
     
    84106LIBBLOCK_PREFIX = $(LIB_PREFIX)/block
    85107LIBFS_PREFIX = $(LIB_PREFIX)/fs
     108LIBIMGMAP_PREFIX = $(LIB_PREFIX)/imgmap
    86109LIBCLUI_PREFIX = $(LIB_PREFIX)/clui
     110
     111LIBEXT2_PREFIX = $(LIB_PREFIX)/ext2
     112
     113LIBUSB_PREFIX = $(LIB_PREFIX)/usb
     114LIBUSBHOST_PREFIX = $(LIB_PREFIX)/usbhost
     115LIBUSBDEV_PREFIX = $(LIB_PREFIX)/usbdev
     116LIBUSBHID_PREFIX = $(LIB_PREFIX)/usbhid
     117LIBUSBVIRT_PREFIX = $(LIB_PREFIX)/usbvirt
    87118
    88119LIBDRV_PREFIX = $(LIB_PREFIX)/drv
     
    90121LIBNET_PREFIX = $(LIB_PREFIX)/net
    91122
     123LIBSCSI_PREFIX = $(LIB_PREFIX)/scsi
     124
     125ifeq ($(STATIC_NEEDED),y)
     126        STATIC_BUILD = y
     127else
     128        ifeq ($(STATIC_ONLY),y)
     129                STATIC_BUILD = y
     130        else
     131                ifeq ($(CONFIG_USE_SHARED_LIBS), y)
     132                        STATIC_BUILD = n
     133                else
     134                        STATIC_BUILD = y
     135                endif
     136        endif
     137endif
     138
     139# Build static whenever we use libusb because that library uses
     140# thread local variables
     141ifneq ($(findstring usb, $(LIBS)),)
     142        STATIC_BUILD = y
     143endif
     144
     145ifeq ($(STATIC_BUILD), y)
    92146BASE_LIBS = $(LIBC_PREFIX)/libc.a $(LIBSOFTINT_PREFIX)/libsoftint.a
    93 
    94147LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld
     148else
     149BASE_LIBS = $(LIBC_PREFIX)/libc.so0 $(LIBSOFTINT_PREFIX)/libsofti.so0
     150LFLAGS = -Bdynamic
     151LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld
     152endif
    95153
    96154ifeq ($(CONFIG_OPTIMIZE_FOR_SIZE),y)
     
    102160.PHONY: all clean
    103161
    104 all: $(VERSION_DEF) $(COMMON_MAKEFILE) $(CONFIG_MAKEFILE) $(CONFIG_HEADER) $(LIBS) $(OUTPUT) $(EXTRA_OUTPUT)
     162all: $(VERSION_DEF) $(COMMON_MAKEFILE) $(CONFIG_MAKEFILE) $(CONFIG_HEADER) $(LIBS) $(OUTPUT) $(LOUTPUT) $(EXTRA_OUTPUT)
    105163        -[ -f $(DEPEND) ] && cp -a $(DEPEND) $(DEPEND_PREV)
    106164
    107165clean:
    108         rm -f $(DEPEND) $(DEPEND_PREV) $(JOB) $(OUTPUT) $(EXTRA_OUTPUT) $(EXTRA_CLEAN)
     166        rm -f $(DEPEND) $(DEPEND_PREV) $(JOB) $(OUTPUT) $(LARCHIVE) $(LOUTPUT) $(EXTRA_OUTPUT) $(EXTRA_CLEAN)
    109167        find . -name '*.o' -follow -exec rm \{\} \;
     168        find . -name '*.lo' -follow -exec rm \{\} \;
    110169
    111170GCC_CFLAGS = -I$(LIBC_PREFIX)/include -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
     
    113172        -finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
    114173        -Wall -Wextra -Wno-clobbered -Wno-unused-parameter -Wmissing-prototypes \
    115         -Werror-implicit-function-declaration -Wwrite-strings \
     174        -std=gnu99 -Werror-implicit-function-declaration -Wwrite-strings \
    116175        -pipe -g -D__$(ENDIANESS)__
    117176
     
    130189        -pipe -g -arch $(CLANG_ARCH) -D__$(ENDIANESS)__
    131190
     191LIB_CFLAGS = $(CFLAGS) -fPIC -D__IN_SHARED_LIBC__
     192LIB_LFLAGS = $(LFLAGS) -shared -soname $(LSONAME) --whole-archive
     193
    132194ifeq ($(CONFIG_DEBUG),y)
    133195        GCC_CFLAGS += -Werror
     
    175237
    176238OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
     239LOBJECTS := $(addsuffix .lo,$(basename $(SOURCES)))
    177240
    178241ifneq ($(BINARY),)
     
    185248
    186249$(BINARY): $(LINKER_SCRIPT) $(OBJECTS) $(LIBS) $(BASE_LIBS)
    187         $(LD) -N $(LFLAGS) -T $(LINKER_SCRIPT) -M -Map $(BINARY).map -o $(BINARY) $(OBJECTS) $(LIBS) $(BASE_LIBS)
     250        $(LD) -n $(LFLAGS) -T $(LINKER_SCRIPT) -M -Map $(BINARY).map -o $(BINARY) $(OBJECTS) $(LIBS) $(BASE_LIBS)
    188251ifeq ($(CONFIG_STRIP_BINARIES),y)
    189252        $(STRIP) $(BINARY)
    190253endif
     254endif
     255
     256ifneq ($(SLIBRARY),)
     257%.disasm: $(LOUTPUT)
     258ifeq ($(CONFIG_LINE_DEBUG),y)
     259        $(OBJDUMP) -d -S $< > $@
     260else
     261        $(OBJDUMP) -d $< > $@
     262endif
     263
     264$(LOUTPUT): $(LARCHIVE) $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld
     265        $(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld $(LIB_LFLAGS) $(LARCHIVE) -o $@ -Map $(LOUTPUT).map
     266
     267$(LIBRARY).so:
     268        ln -s $(SLIBRARY) $@
     269
     270$(LSONAME):
     271        ln -s $(SLIBRARY) $@
    191272endif
    192273
     
    196277endif
    197278
     279ifneq ($(SLIBRARY),)
     280%.la: $(LOBJECTS)
     281        $(AR) rc $@ $(LOBJECTS)
     282endif
     283
    198284%.o: %.S $(DEPEND)
    199285        $(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@
     
    210296%.o: %.c $(DEPEND)
    211297        $(CC) $(DEFS) $(CFLAGS) -c $< -o $@
     298ifeq ($(PRECHECK),y)
     299        $(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS)
     300endif
     301
     302%.lo: %.S $(DEPEND)
     303        $(CC) $(DEFS) $(LIB_CFLAGS) -D__ASM__ -c $< -o $@
     304ifeq ($(PRECHECK),y)
     305        $(JOBFILE) $(JOB) $< $@ as asm/preproc $(DEFS) $(CFLAGS) -D__ASM__
     306endif
     307
     308%.lo: %.s $(DEPEND)
     309        $(AS) $(AFLAGS) -o $@ $<
     310ifeq ($(PRECHECK),y)
     311        $(JOBFILE) $(JOB) $< $@ as asm
     312endif
     313
     314%.lo: %.c $(DEPEND)
     315        $(CC) $(DEFS) $(LIB_CFLAGS) -c $< -o $@
    212316ifeq ($(PRECHECK),y)
    213317        $(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS)
     
    223327$(OUTPUT): $(OBJECTS)
    224328
     329$(LARCHIVE): $(LOBJECTS)
Note: See TracChangeset for help on using the changeset viewer.