Merge pull request #69 from pcwalton/static
Add support for static linking.
This commit is contained in:
commit
f2e8dab465
|
@ -46,9 +46,14 @@ export DESTDIR
|
||||||
# other important variables
|
# other important variables
|
||||||
export OBJDIR
|
export OBJDIR
|
||||||
export OUTDIR
|
export OUTDIR
|
||||||
|
export STATIC
|
||||||
|
|
||||||
|
ifneq (,$(STATIC))
|
||||||
|
STATICLIB = STATICLIB=1
|
||||||
|
endif
|
||||||
|
|
||||||
libui:
|
libui:
|
||||||
@$(MAKE) -f build/GNUmakefile.libui inlibuibuild=1
|
@$(MAKE) -f build/GNUmakefile.libui inlibuibuild=1 $(STATICLIB)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(OBJDIR) $(OUTDIR)
|
rm -rf $(OBJDIR) $(OUTDIR)
|
||||||
|
|
|
@ -50,12 +50,7 @@ else
|
||||||
reallinker = $(CXX)
|
reallinker = $(CXX)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(OUT): $(OFILES) | $(OUTDIR)
|
include $(OS)/GNUosspecificlink.mk
|
||||||
@$(reallinker) -o $(OUT) $(OFILES) $(LDFLAGS)
|
|
||||||
ifeq ($(USESSONAME),1)
|
|
||||||
@ln -sf $(NAME)$(SUFFIX) $(OUTNOSONAME)
|
|
||||||
endif
|
|
||||||
@echo ====== Linked $(OUT)
|
|
||||||
|
|
||||||
.SECONDEXPANSION:
|
.SECONDEXPANSION:
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,11 @@ OUT = $(OUTDIR)/$(NAME)$(SUFFIX)
|
||||||
# TODO use $(CC), $(CXX), $(LD), and s$(RC)
|
# TODO use $(CC), $(CXX), $(LD), and s$(RC)
|
||||||
|
|
||||||
$(OUT): $(OFILES) | $(OUTDIR)
|
$(OUT): $(OFILES) | $(OUTDIR)
|
||||||
|
ifeq (,$(STATICLIB))
|
||||||
@link -out:$(OUT) $(OFILES) $(LDFLAGS)
|
@link -out:$(OUT) $(OFILES) $(LDFLAGS)
|
||||||
|
else
|
||||||
|
@lib -out:$(OUT) $(OFILES)
|
||||||
|
endif
|
||||||
@echo ====== Linked $(OUT)
|
@echo ====== Linked $(OUT)
|
||||||
|
|
||||||
.SECONDEXPANSION:
|
.SECONDEXPANSION:
|
||||||
|
|
|
@ -30,7 +30,11 @@ SUFFIX = $(EXESUFFIX)
|
||||||
|
|
||||||
# TODO merge with the one in build/GNUmakefile.test
|
# TODO merge with the one in build/GNUmakefile.test
|
||||||
ifeq ($(TOOLCHAIN),gcc)
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
LDFLAGS += -L$(OUTDIR) -lui
|
ifeq (,$(STATIC))
|
||||||
|
LDFLAGS += -L$(OUTDIR) -lui
|
||||||
|
else
|
||||||
|
LDFLAGS += -L$(OUTDIR) -lui $(NATIVE_UI_LDFLAGS)
|
||||||
|
endif
|
||||||
# see build/GNUmakefile.test
|
# see build/GNUmakefile.test
|
||||||
ifeq ($(OS),darwin)
|
ifeq ($(OS),darwin)
|
||||||
LDFLAGS += -Wl,-rpath,@executable_path/
|
LDFLAGS += -Wl,-rpath,@executable_path/
|
||||||
|
|
|
@ -17,10 +17,14 @@ HFILES += \
|
||||||
ui_$(OS)$(OSHSUFFIX)
|
ui_$(OS)$(OSHSUFFIX)
|
||||||
|
|
||||||
NAME = libui
|
NAME = libui
|
||||||
|
ifeq (,$(STATIC))
|
||||||
SUFFIX = $(LIBSUFFIX)
|
SUFFIX = $(LIBSUFFIX)
|
||||||
ifeq ($(USESSONAME),1)
|
ifeq ($(USESSONAME),1)
|
||||||
SUFFIX = $(SONAMEEXT)
|
SUFFIX = $(SONAMEEXT)
|
||||||
endif
|
endif
|
||||||
|
else
|
||||||
|
SUFFIX = $(STATICLIBSUFFIX)
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(TOOLCHAIN),gcc)
|
ifeq ($(TOOLCHAIN),gcc)
|
||||||
# make every symbol hidden by default except _UI_EXTERN ones
|
# make every symbol hidden by default except _UI_EXTERN ones
|
||||||
|
|
|
@ -42,10 +42,7 @@ HFILES += \
|
||||||
# LONGTERM split into a separate file or put in GNUmakefile.libui somehow?
|
# LONGTERM split into a separate file or put in GNUmakefile.libui somehow?
|
||||||
|
|
||||||
# flags for Cocoa
|
# flags for Cocoa
|
||||||
LDFLAGS += \
|
LDFLAGS += $(NATIVE_UI_LDFLAGS)
|
||||||
-lobjc \
|
|
||||||
-framework Foundation \
|
|
||||||
-framework AppKit
|
|
||||||
|
|
||||||
# flags for OS X versioning
|
# flags for OS X versioning
|
||||||
CFLAGS += \
|
CFLAGS += \
|
||||||
|
@ -57,9 +54,11 @@ CXXFLAGS += \
|
||||||
LDFLAGS += \
|
LDFLAGS += \
|
||||||
-mmacosx-version-min=10.8
|
-mmacosx-version-min=10.8
|
||||||
|
|
||||||
|
ifeq (,$(STATIC))
|
||||||
# flags for building a shared library
|
# flags for building a shared library
|
||||||
LDFLAGS += \
|
LDFLAGS += \
|
||||||
-dynamiclib
|
-dynamiclib
|
||||||
|
endif
|
||||||
|
|
||||||
# on warning about undefined symbols:
|
# on warning about undefined symbols:
|
||||||
# the gcc flags don't work with Apple's linker
|
# the gcc flags don't work with Apple's linker
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
EXESUFFIX =
|
EXESUFFIX =
|
||||||
LIBSUFFIX = .dylib
|
LIBSUFFIX = .dylib
|
||||||
OSHSUFFIX = .h
|
OSHSUFFIX = .h
|
||||||
|
STATICLIBSUFFIX = .a
|
||||||
TOOLCHAIN = gcc
|
TOOLCHAIN = gcc
|
||||||
|
|
||||||
USESSONAME = 1
|
USESSONAME = 1
|
||||||
|
@ -11,3 +12,9 @@ SONAMEEXT = .$(SOVERSION)$(LIBSUFFIX)
|
||||||
# note the explicit need for @rpath
|
# note the explicit need for @rpath
|
||||||
# LONGTERM -current_version, -compatibility_version
|
# LONGTERM -current_version, -compatibility_version
|
||||||
SONAMEFLAG = -Wl,-install_name,@rpath/
|
SONAMEFLAG = -Wl,-install_name,@rpath/
|
||||||
|
|
||||||
|
NATIVE_UI_LDFLAGS += \
|
||||||
|
-lobjc \
|
||||||
|
-framework Foundation \
|
||||||
|
-framework AppKit
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
# 28 may 2016
|
||||||
|
|
||||||
|
$(OUT): $(OFILES) | $(OUTDIR)
|
||||||
|
ifeq (,$(STATICLIB))
|
||||||
|
@$(reallinker) -o $(OUT) $(OFILES) $(LDFLAGS)
|
||||||
|
ifeq ($(USESSONAME),1)
|
||||||
|
@ln -sf $(NAME)$(SUFFIX) $(OUTNOSONAME)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
nm -m $(OFILES) | sed -E -n 's/^[0-9a-f]* \([A-Z_]+,[a-z_]+\) external //p' > $(OBJDIR)/symbols
|
||||||
|
$(LD) -exported_symbols_list $(OBJDIR)/symbols -r $(OFILES) -o $(OUT:%.a=%.o)
|
||||||
|
$(AR) rcs $(OUT) $(OUT:%.a=%.o)
|
||||||
|
endif
|
||||||
|
@echo ====== Linked $(OUT)
|
||||||
|
|
|
@ -43,17 +43,16 @@ HFILES += \
|
||||||
# LONGTERM split into a separate file or put in GNUmakefile.libui somehow?
|
# LONGTERM split into a separate file or put in GNUmakefile.libui somehow?
|
||||||
|
|
||||||
# flags for GTK+
|
# flags for GTK+
|
||||||
CFLAGS += \
|
CFLAGS += $(NATIVE_UI_CFLAGS)
|
||||||
`pkg-config --cflags gtk+-3.0`
|
CXXFLAGS += $(NATIVE_UI_CXXFLAGS)
|
||||||
CXXFLAGS += \
|
LDFLAGS += $(NATIVE_UI_LDFLAGS)
|
||||||
`pkg-config --cflags gtk+-3.0`
|
|
||||||
LDFLAGS += \
|
|
||||||
`pkg-config --libs gtk+-3.0` -lm -ldl
|
|
||||||
|
|
||||||
# flags for building a shared library
|
# flags for building a shared library
|
||||||
# OS X does support -shared but it has a preferred name for this so let's use that there instead; hence this is not gcc-global
|
# OS X does support -shared but it has a preferred name for this so let's use that there instead; hence this is not gcc-global
|
||||||
|
ifeq (,$(STATIC))
|
||||||
LDFLAGS += \
|
LDFLAGS += \
|
||||||
-shared
|
-shared
|
||||||
|
endif
|
||||||
|
|
||||||
# flags for warning on undefined symbols
|
# flags for warning on undefined symbols
|
||||||
# this is not gcc-global because OS X doesn't support these flags
|
# this is not gcc-global because OS X doesn't support these flags
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
EXESUFFIX =
|
EXESUFFIX =
|
||||||
LIBSUFFIX = .so
|
LIBSUFFIX = .so
|
||||||
OSHSUFFIX = .h
|
OSHSUFFIX = .h
|
||||||
|
STATICLIBSUFFIX = .a
|
||||||
TOOLCHAIN = gcc
|
TOOLCHAIN = gcc
|
||||||
|
|
||||||
# LONGTERM clean up all the NAMEs and SUFFIXs and NOSOSUFFIXs or whatever it was
|
# LONGTERM clean up all the NAMEs and SUFFIXs and NOSOSUFFIXs or whatever it was
|
||||||
|
@ -11,3 +12,11 @@ SOVERSION = $(SOVERSION0)
|
||||||
SONAMEEXT = $(LIBSUFFIX).$(SOVERSION)
|
SONAMEEXT = $(LIBSUFFIX).$(SOVERSION)
|
||||||
# this is not gcc-global because OS X uses a different filename format
|
# this is not gcc-global because OS X uses a different filename format
|
||||||
SONAMEFLAG = -Wl,-soname,
|
SONAMEFLAG = -Wl,-soname,
|
||||||
|
|
||||||
|
NATIVE_UI_CFLAGS = \
|
||||||
|
`pkg-config --cflags gtk+-3.0`
|
||||||
|
NATIVE_UI_CXXFLAGS = \
|
||||||
|
`pkg-config --cflags gtk+-3.0`
|
||||||
|
NATIVE_UI_LDFLAGS = \
|
||||||
|
`pkg-config --libs gtk+-3.0` -lm -ldl
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
# 28 may 2016
|
||||||
|
|
||||||
|
$(OUT): $(OFILES) | $(OUTDIR)
|
||||||
|
ifeq (,$(STATICLIB))
|
||||||
|
@$(reallinker) -o $(OUT) $(OFILES) $(LDFLAGS)
|
||||||
|
ifeq ($(USESSONAME),1)
|
||||||
|
@ln -sf $(NAME)$(SUFFIX) $(OUTNOSONAME)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
$(LD) -r $(OFILES) -o $(OUT:%.a=%.o)
|
||||||
|
objcopy --localize-hidden $(OUT:%.a=%.o)
|
||||||
|
$(AR) rcs $(OUT) $(OUT:%.a=%.o)
|
||||||
|
endif
|
||||||
|
@echo ====== Linked $(OUT)
|
||||||
|
|
|
@ -73,8 +73,10 @@ LDFLAGS += \
|
||||||
user32.lib kernel32.lib usp10.lib gdi32.lib comctl32.lib uxtheme.lib msimg32.lib comdlg32.lib d2d1.lib dwrite.lib ole32.lib oleaut32.lib oleacc.lib uuid.lib
|
user32.lib kernel32.lib usp10.lib gdi32.lib comctl32.lib uxtheme.lib msimg32.lib comdlg32.lib d2d1.lib dwrite.lib ole32.lib oleaut32.lib oleacc.lib uuid.lib
|
||||||
|
|
||||||
# flags for building a shared library
|
# flags for building a shared library
|
||||||
|
ifeq (,$(STATIC))
|
||||||
LDFLAGS += \
|
LDFLAGS += \
|
||||||
-dll
|
-dll
|
||||||
|
endif
|
||||||
|
|
||||||
# TODO flags for warning on undefined symbols
|
# TODO flags for warning on undefined symbols
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
EXESUFFIX = .exe
|
EXESUFFIX = .exe
|
||||||
LIBSUFFIX = .dll
|
LIBSUFFIX = .dll
|
||||||
OSHSUFFIX = .h
|
OSHSUFFIX = .h
|
||||||
|
STATICLIBSUFFIX = .lib
|
||||||
TOOLCHAIN = msvc
|
TOOLCHAIN = msvc
|
||||||
|
|
||||||
USESSONAME = 0
|
USESSONAME = 0
|
||||||
|
|
Loading…
Reference in New Issue