-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile-mingw64-dll
65 lines (47 loc) · 2.13 KB
/
Makefile-mingw64-dll
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
CC=gcc
CXX=g++
AS=g++
LD=g++
TARGET_ROOT = ./target
TARGET = $(TARGET_ROOT)/release-win-gcc-dll-x64
OBJ_ROOT = ./obj
OBJ ?= $(OBJ_ROOT)/release-win-gcc-dll-x64
LIB_NAME=io-mingw64
SHARED_EXT=dll
PLATFORM_SHARED_LINK_OPTIONS?=-shared -Wl,--dll -Wl,--output-def=$(TARGET)/libio.def -Wl,--out-implib=$(TARGET)/libio.a
LIBS?=-liconv.dll -lWs2_32 -lgnutls.dll
INCLUEDS?=-Iinclude -Iinclude/win -Iinclude/net -Isrc
PLATFORM_OPT_OPTIONS?= -minline-stringops-dynamically -mavx -mavx2 -mlzcnt -mmovbe
OPTIMIZE?=-mtune=generic -O3 -s -fwhole-program -fno-exceptions -fno-rtti -fdeclone-ctor-dtor -fdevirtualize-at-ltrans $(PLATFORM_OPT_OPTIONS)
SHARED-DEFINES?= -DIO_SHARED_LIB -DIO_BUILD
DEFINES ?= -DNDEBUG $(SHARED-DEFINES) -DIO_TLS_PROVIDER_GNUTLS
CPPFLAGS?= -std=gnu++17 -fno-exceptions -fno-rtti -Winline -pedantic -flto -Wl,-allow-multiple-definition $(INCLUEDS)
LDFLAGS?= -fno-exceptions -fno-rtti -flto -Wl,-allow-multiple-definition $(OPTIMIZE) -fvisibility=hidden $(LIBS)
MODULES=. win net
SRC_DIR := $(addprefix ./src/,$(MODULES))
SOURCE_FILES := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.cpp))
OBJ_FILES := $(addprefix $(OBJ)/, $(notdir $(SOURCE_FILES:.cpp=.o)) )
SOURCE_FILES := $(SOURCE_FILES) src/tls/gnutls_secure_channel.cpp
OBJ_FILES := $(OBJ_FILES) $(OBJ)/gnutls_secure_channel.o
DESTDIR?=target
all: clean link
link: compile
$(LD) $(PLATFORM_SHARED_LINK_OPTIONS) $(OBJ_FILES) -o $(TARGET)/$(LIB_NAME).$(SHARED_EXT) $(LDFLAGS)
compile: $(OBJ)/stdafx.hpp.gch $(OBJ_FILES)
$(OBJ)/stdafx.hpp.gch: src/stdafx.hpp
$(CXX) $(CPPFLAGS) $(DEFINES) -c src/stdafx.hpp -o $(OBJ)/stdafx.hpp.gch
$(OBJ)/%.o: src/%.cpp
$(CXX) $(CPPFLAGS) $(DEFINES) -iquoteobj$(OBJ)/stdafx.hpp.gch -c $< -o $@
$(OBJ)/%.o: src/win/%.cpp
$(CXX) $(CPPFLAGS) $(DEFINES) -iquoteobj$(OBJ)/stdafx.hpp.gch -c $< -o $@
$(OBJ)/%.o: src/net/%.cpp
$(CXX) $(CPPFLAGS) $(DEFINES) -iquoteobj$(OBJ)/stdafx.hpp.gch -c $< -o $@
$(OBJ)/gnutls_secure_channel.o: src/tls/gnutls_secure_channel.cpp
$(CXX) $(CPPFLAGS) $(DEFINES) -iquoteobj$(OBJ)/stdafx.hpp.gch -c $< -o $@
clean:
mkdir -p $(OBJ_ROOT)
mkdir -p $(TARGET_ROOT)
rm -rf $(OBJ)
rm -rf $(TARGET)
mkdir $(OBJ)
mkdir $(TARGET)