Skip to content

Commit cb62a37

Browse files
committed
Merge pull request #1344 from mgreter/feature/win-dll-build-mingw
Improve Makefile for builds under MSYS/MinGW (Windows)
2 parents e974ddd + bab5f73 commit cb62a37

File tree

1 file changed

+78
-13
lines changed

1 file changed

+78
-13
lines changed

Makefile

Lines changed: 78 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,48 +33,74 @@ else
3333
endif
3434
endif
3535

36-
ifeq "$(LIBSASS_VERSION)" ""
37-
ifneq "$(wildcard ./.git/ )" ""
36+
ifeq ($(LIBSASS_VERSION),)
37+
ifneq ($(wildcard ./.git/ ),)
3838
LIBSASS_VERSION ?= $(shell git describe --abbrev=4 --dirty --always --tags)
3939
endif
4040
endif
4141

42-
ifeq "$(LIBSASS_VERSION)" ""
43-
ifneq ("$(wildcard VERSION)","")
42+
ifeq ($(LIBSASS_VERSION),)
43+
ifneq ($(wildcard VERSION),)
4444
LIBSASS_VERSION ?= $(shell $(CAT) VERSION)
4545
endif
4646
endif
4747

48-
ifneq "$(LIBSASS_VERSION)" ""
48+
ifneq ($(LIBSASS_VERSION),)
4949
CFLAGS += -DLIBSASS_VERSION="\"$(LIBSASS_VERSION)\""
5050
CXXFLAGS += -DLIBSASS_VERSION="\"$(LIBSASS_VERSION)\""
5151
endif
5252

5353
# enable mandatory flag
5454
ifeq (MinGW,$(UNAME))
55+
ifneq ($(BUILD),shared)
56+
STATIC_ALL ?= 1
57+
endif
58+
STATIC_LIBGCC ?= 1
59+
STATIC_LIBSTDCPP ?= 1
5560
CXXFLAGS += -std=gnu++0x
5661
LDFLAGS += -std=gnu++0x
5762
else
63+
STATIC_ALL ?= 0
64+
STATIC_LIBGCC ?= 0
65+
STATIC_LIBSTDCPP ?= 0
5866
CXXFLAGS += -std=c++0x
5967
LDFLAGS += -std=c++0x
6068
endif
6169

62-
ifneq "$(SASS_LIBSASS_PATH)" ""
70+
ifneq ($(SASS_LIBSASS_PATH),)
6371
CFLAGS += -I $(SASS_LIBSASS_PATH)
6472
CXXFLAGS += -I $(SASS_LIBSASS_PATH)
6573
endif
6674

67-
ifneq "$(EXTRA_CFLAGS)" ""
75+
ifneq ($(EXTRA_CFLAGS),)
6876
CFLAGS += $(EXTRA_CFLAGS)
6977
endif
70-
ifneq "$(EXTRA_CXXFLAGS)" ""
78+
ifneq ($(EXTRA_CXXFLAGS),)
7179
CXXFLAGS += $(EXTRA_CXXFLAGS)
7280
endif
73-
ifneq "$(EXTRA_LDFLAGS)" ""
81+
ifneq ($(EXTRA_LDFLAGS),)
7482
LDFLAGS += $(EXTRA_LDFLAGS)
7583
endif
7684

77-
LDLIBS = -lstdc++ -lm
85+
LDLIBS = -lm
86+
87+
ifneq ($(BUILD),shared)
88+
LDLIBS += -lstdc++
89+
endif
90+
91+
# link statically into lib
92+
# makes it a lot more portable
93+
# increases size by about 50KB
94+
ifeq ($(STATIC_ALL),1)
95+
LDFLAGS += -static
96+
endif
97+
ifeq ($(STATIC_LIBGCC),1)
98+
LDFLAGS += -static-libgcc
99+
endif
100+
ifeq ($(STATIC_LIBSTDCPP),1)
101+
LDFLAGS += -static-libstdc++
102+
endif
103+
78104
ifeq ($(UNAME),Darwin)
79105
CFLAGS += -stdlib=libc++
80106
CXXFLAGS += -stdlib=libc++
@@ -104,6 +130,21 @@ SASS_SPEC_SPEC_DIR ?= spec
104130
SASSC_BIN = $(SASS_SASSC_PATH)/bin/sassc
105131
RUBY_BIN = ruby
106132

133+
LIB_STATIC = $(SASS_LIBSASS_PATH)/lib/libsass.a
134+
LIB_SHARED = $(SASS_LIBSASS_PATH)/lib/libsass.so
135+
136+
ifeq (MinGW,$(UNAME))
137+
ifeq (shared,$(BUILD))
138+
CFLAGS += -D ADD_EXPORTS
139+
CXXFLAGS += -D ADD_EXPORTS
140+
LIB_SHARED = $(SASS_LIBSASS_PATH)/lib/libsass.dll
141+
endif
142+
else
143+
CFLAGS += -fPIC
144+
CXXFLAGS += -fPIC
145+
LDFLAGS += -fPIC
146+
endif
147+
107148
ifeq (MinGW,$(UNAME))
108149
SASSC_BIN = $(SASS_SASSC_PATH)/bin/sassc.exe
109150
endif
@@ -225,11 +266,15 @@ install-shared: lib/libsass.so
225266
install -pm0755 $< $(DESTDIR)$(PREFIX)/$<
226267

227268
$(SASSC_BIN): $(BUILD)
228-
cd $(SASS_SASSC_PATH) && $(MAKE)
269+
$(MAKE) -C $(SASS_SASSC_PATH)
229270

230271
sassc: $(SASSC_BIN)
231272
$(SASSC_BIN) -v
232273

274+
version: $(SASSC_BIN)
275+
$(SASSC_BIN) -h
276+
$(SASSC_BIN) -v
277+
233278
test: $(SASSC_BIN)
234279
$(RUBY_BIN) $(SASS_SPEC_PATH)/sass-spec.rb -c $(SASSC_BIN) -s $(LOG_FLAGS) $(SASS_SPEC_PATH)/$(SASS_SPEC_SPEC_DIR)
235280

@@ -242,5 +287,25 @@ test_issues: $(SASSC_BIN)
242287
clean:
243288
$(RM) $(RCOBJECTS) $(COBJECTS) $(OBJECTS) $(LIBRARIES) lib/*.a lib/*.so lib/*.dll lib/*.la
244289

245-
246-
.PHONY: all debug debug-static debug-shared static shared install install-static install-shared sassc clean
290+
clean-all:
291+
$(MAKE) -C $(SASS_SASSC_PATH) clean
292+
293+
lib-file: lib-file-$(BUILD)
294+
lib-opts: lib-opts-$(BUILD)
295+
296+
lib-file-static:
297+
@echo $(LIB_STATIC)
298+
lib-file-shared:
299+
@echo $(LIB_SHARED)
300+
lib-opts-static:
301+
@echo -L"$(SASS_LIBSASS_PATH)/lib"
302+
lib-opts-shared:
303+
@echo -L"$(SASS_LIBSASS_PATH)/lib -lsass"
304+
305+
.PHONY: all static shared sassc \
306+
version clean clean-all \
307+
debug debug-static debug-shared \
308+
install install-static install-shared \
309+
lib-opts lib-opts-shared lib-opts-static \
310+
lib-file lib-file-shared lib-file-static
311+
.DELETE_ON_ERROR:

0 commit comments

Comments
 (0)