Index: uspace/Makefile
===================================================================
--- uspace/Makefile	(revision 58168e01ce7842cf23ff1972205eee0da2d3467c)
+++ uspace/Makefile	(revision 83b64a598745abcede81513d8fcfbf896776a343)
@@ -223,11 +223,9 @@
 #
 
-BASE_LIBS = \
-	lib/c \
-	lib/cpp
-
-LIBS = \
+DIRS += \
 	lib/fs \
 	lib/block \
+	lib/c \
+	lib/cpp \
 	lib/crypto \
 	lib/clui \
@@ -266,15 +264,14 @@
 	lib/virtio
 
-BASE_BUILDS := $(addsuffix .build,$(BASE_LIBS))
-BUILDS := $(addsuffix .build,$(DIRS) $(LIBS))
-BUILDS_TESTS := $(addsuffix .build-test,$(DIRS) $(LIBS) $(BASE_LIBS))
-DEPS = $(addsuffix /deps.mk,$(DIRS) $(LIBS))
-CLEANS := $(addsuffix .clean,$(DIRS) $(LIBS) $(BASE_LIBS))
-
-.PHONY: all $(BASE_BUILDS) $(BUILDS) $(BUILDS_TESTS) $(CLEANS) clean export
+BUILDS := $(addsuffix .build,$(DIRS))
+BUILDS_TESTS := $(addsuffix .build-test,$(DIRS))
+DEPS = $(addsuffix /deps.mk,$(DIRS))
+CLEANS := $(addsuffix .clean,$(DIRS))
+
+.PHONY: all $(BUILDS) $(BUILDS_TESTS) $(CLEANS) clean export
 
 all: $(BUILDS) $(BUILDS_TESTS)
 
-$(BUILDS_TESTS): $(BASE_BUILDS) $(BUILDS)
+$(BUILDS_TESTS): $(BUILDS)
 	$(MAKE) -r -C $(basename $@) all-test PRECHECK=$(PRECHECK)
 
@@ -292,5 +289,5 @@
 	-$(MAKE) -r -C $(basename $@) fasterclean
 
-$(BASE_BUILDS) $(BUILDS):
+$(BUILDS):
 	$(MAKE) -r -C $(basename $@) all PRECHECK=$(PRECHECK)
 
@@ -298,5 +295,3 @@
 	$(MAKE) -r -C $(@D) deps.mk SELF_TARGET="$(@D).build"
 
-$(BUILDS): $(BASE_BUILDS)
-
 -include $(DEPS)
Index: uspace/Makefile.common
===================================================================
--- uspace/Makefile.common	(revision 58168e01ce7842cf23ff1972205eee0da2d3467c)
+++ uspace/Makefile.common	(revision 83b64a598745abcede81513d8fcfbf896776a343)
@@ -46,6 +46,4 @@
 #   STATIC_NEEDED      set to 'y' for init binaries, will build statically
 #                      linked version
-#   STATIC_ONLY        set to 'y' if binary cannot be linked dynamically
-#                      (e.g. uses thread-local variables)
 #
 # Optionally, for a library:
@@ -114,28 +112,22 @@
 LDFLAGS = -Wl,--fatal-warnings,--warn-common
 
+STATIC_BUILD = n
+
 ifeq ($(STATIC_NEEDED),y)
 	STATIC_BUILD = y
-else
-	ifeq ($(STATIC_ONLY),y)
+endif
+
+ifneq ($(CONFIG_BUILD_SHARED_LIBS),y)
+	STATIC_BUILD = y
+endif
+
+ifneq ($(CONFIG_USE_SHARED_LIBS),y)
+	ifeq ($(LIBRARY),)
 		STATIC_BUILD = y
-	else
-		ifeq ($(CONFIG_BUILD_SHARED_LIBS),y)
-			ifeq ($(CONFIG_USE_SHARED_LIBS),y)
-				STATIC_BUILD = n
-			else
-				ifeq ($(LIBRARY),)
-					STATIC_BUILD = y
-				else
-					STATIC_BUILD = n
-				endif
-			endif
-		else
-			STATIC_BUILD = y
-		endif
 	endif
 endif
 
-ifneq ($(STATIC_BUILD),y)
-	LINK_DYNAMIC = y
+ifeq ($(STATIC_BUILD),y)
+	LDFLAGS += -static
 endif
 
@@ -152,8 +144,4 @@
 BASE_LIBS += -lgcc
 
-ifneq ($(LINK_DYNAMIC),y)
-	LDFLAGS += -static
-endif
-
 INCLUDES_FLAGS = $(LIBC_INCLUDES_FLAGS)
 
@@ -164,7 +152,14 @@
 INCLUDES_FLAGS += $(foreach lib,$(LIBS), -I$(LIB_PREFIX)/$(lib) -I$(LIB_PREFIX)/$(lib)/include)
 
-# TODO: get rid of this special case
-ifneq ($(filter math, $(LIBS)),)
-	INCLUDES_FLAGS += $(LIBMATH_INCLUDES_FLAGS)
+DEPLIBS := $(LIBS)
+
+ifneq ($(filter %.cpp %.cc %.cxx, $(SOURCES)),)
+	ifneq ($(LIBRARY),libcpp)
+		DEPLIBS += cpp
+	endif
+endif
+
+ifneq ($(LIBRARY),libc)
+	DEPLIBS += c
 endif
 
@@ -305,10 +300,6 @@
 DEPENDS := $(addsuffix .d,$(basename $(SOURCES))) $(addsuffix .test.d,$(basename $(TEST_SOURCES)))
 
-LIBTAGS := $(foreach lib,$(LIBS), $(USPACE_PREFIX)/lib/$(lib)/tag)
+LIBTAGS := $(foreach lib,$(DEPLIBS), $(USPACE_PREFIX)/lib/$(lib)/tag)
 LIBARGS := $(addprefix -L$(USPACE_PREFIX)/lib/, $(LIBS)) $(addprefix -l, $(LIBS))
-
-ifneq ($(LIBRARY),libc)
-	LIBTAGS := $(LIBC_PREFIX)/tag $(LIBTAGS)
-endif
 
 .PHONY: all all-test clean fasterclean depend
@@ -339,5 +330,5 @@
 deps.mk: Makefile
 	echo > $@.new
-	for lib in $(LIBS); do \
+	for lib in $(DEPLIBS); do \
 		echo "$(SELF_TARGET): lib/$$lib.build" >> $@.new; \
 	done
Index: uspace/srv/loader/Makefile
===================================================================
--- uspace/srv/loader/Makefile	(revision 58168e01ce7842cf23ff1972205eee0da2d3467c)
+++ uspace/srv/loader/Makefile	(revision 83b64a598745abcede81513d8fcfbf896776a343)
@@ -46,5 +46,5 @@
 
 BINARY = loader
-STATIC_ONLY = y
+STATIC_NEEDED = y
 
 GENERIC_SOURCES = \
