Update README.md
[nemesis.git] / Makefile
1 # nemesis is not TrueCrypt
2 #
3 # Governed by the TrueCrypt License 3.0 the full text of which is contained in
4 # the file License.txt included in TrueCrypt binary and source code distribution
5 # packages.
6 #
7
8 #------ Command line arguments ------
9 # DEBUG:                Disable optimizations and enable debugging checks
10 # DEBUGGER:             Enable debugging information for use by debuggers
11 # NOASM:                Exclude modules requiring assembler
12 # NOGUI:                Disable graphical user interface (build console-only application)
13 # NOSTRIP:              Do not strip release binary
14 # NOTEST:               Do not test release binary
15 # RESOURCEDIR:  Run-time resource directory
16 # VERBOSE:              Enable verbose messages
17 # WXSTATIC:             Use static wxWidgets library
18
19 #------ Targets ------
20 # all
21 # clean
22 # wxbuild:              Configure and build wxWidgets - source code must be located at $(WX_ROOT)
23
24
25 #------ Build configuration ------
26
27 export APPNAME := nemesis
28 export BASE_DIR := $(CURDIR)
29 export BUILD_INC := $(BASE_DIR)/Build/Include
30 export NOTEST := 1
31 export AR ?= ar
32 export CC = clang
33 export CXX = clang++
34 export AS := nasm
35 export RANLIB ?= ranlib
36
37 export CFLAGS := -Wall
38 export CXXFLAGS := -Wall -Wno-unused-parameter -lstdc++
39 export ASFLAGS := -Ox -D __GNUC__
40 export LFLAGS :=
41 export LDLIBS += -lX11
42 export PKG_CONFIG_PATH ?= /usr/local/lib/pkgconfig
43
44 export WX_CONFIG_ARGS := --unicode
45 WX_CONFIGURE_FLAGS :=
46 export WXCONFIG_CFLAGS :=
47 export WXCONFIG_CXXFLAGS :=
48 WX_ROOT = $(BASE_DIR)/wxWidgets-3.1.0
49 WX_BUILD_DIR = wxrelease
50 WX_STATIC := 1
51 ifdef WX_STATIC
52         export WX_CONFIG = $(BASE_DIR)/$(WX_BUILD_DIR)/wx-config
53         export WX_CONFIG_ARGS = --static
54 else
55         export WX_CONFIG = wx-config
56 endif
57 C_CXX_FLAGS := -MMD -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES -I$(BASE_DIR) -I$(BASE_DIR)/Crypto -I/usr/include `$(WX_CONFIG) --cxxflags`
58
59 export TC_BUILD_CONFIG := Release
60
61 ifeq "$(shell uname -s)" "Darwin"
62         CPU_ARCH = x64
63         ASM_OBJ_FORMAT = macho64
64 endif
65 ifeq "$(origin DEBUG)" "command line"
66         ifneq "$(DEBUG)" "0"
67                 TC_BUILD_CONFIG := Debug
68         endif
69 endif
70
71 ifeq "$(origin NOGUI)" "command line"
72         export TC_NO_GUI := 1
73         C_CXX_FLAGS += -DTC_NO_GUI
74         WX_CONFIGURE_FLAGS += --disable-gui
75 endif
76
77 ifdef PKCS11_INC
78         C_CXX_FLAGS += -I$(PKCS11_INC)
79 endif
80
81 ifeq "$(origin RESOURCEDIR)" "command line"
82         C_CXX_FLAGS += -DTC_RESOURCE_DIR="$(RESOURCEDIR)"
83 endif
84
85 ifneq "$(origin VERBOSE)" "command line"
86         MAKEFLAGS += -s
87 endif
88 ifeq "$(CPU_ARCH)" "x86"
89         C_CXX_FLAGS += -D TC_ARCH_X86
90 else ifeq "$(CPU_ARCH)" "x64"
91         C_CXX_FLAGS += -D TC_ARCH_X64
92 endif
93
94
95 #------ Release configuration ------
96
97 ifeq "$(TC_BUILD_CONFIG)" "Release"
98
99         C_CXX_FLAGS += -O2 -fno-strict-aliasing  # Do not enable strict aliasing
100         WX_CONFIGURE_FLAGS += --disable-debug_flag --disable-debug_gdb --disable-debug_info
101
102 else
103
104 #------ Debug configuration ------
105
106         C_CXX_FLAGS += -DDEBUG
107         CXXFLAGS += -fno-default-inline -Wno-unused-function -Wno-unused-variable
108         export WX_BUILD_DIR ?= $(BASE_DIR)/wxdebug
109         WX_CONFIGURE_FLAGS += --enable-debug_flag --disable-debug_gdb --disable-debug_info
110
111 endif
112
113
114 #------ Debugger configuration ------
115
116 ifeq "$(origin DEBUGGER)" "command line"
117
118         C_CXX_FLAGS += -ggdb  
119         WX_CONFIGURE_FLAGS += --enable-debug_gdb --enable-debug_info
120
121 endif
122
123
124 #------ Platform configuration ------
125
126 export PLATFORM := "Unknown"
127 export PLATFORM_UNSUPPORTED := 0
128
129 export CPU_ARCH ?= unknown
130
131 ARCH = $(shell uname -p)
132 ifeq "$(ARCH)" "unknown"
133         ARCH = $(shell uname -m)
134 endif
135 ifeq "$(shell uname -s)" "Darwin"
136         CPU_ARCH = x64
137         ASM_OBJ_FORMAT = macho64
138 else ifneq (,$(filter i386 i486 i586 i686 x86,$(ARCH)))
139         CPU_ARCH = x86
140         ASM_OBJ_FORMAT = elf32
141 else ifneq (,$(filter x86_64 x86-64 amd64 x64,$(ARCH)))
142         CPU_ARCH = x64
143         ASM_OBJ_FORMAT = elf64
144 endif
145
146 ifeq "$(origin NOASM)" "command line"
147         CPU_ARCH = unknown
148 endif
149
150 ifeq "$(CPU_ARCH)" "x86"
151         C_CXX_FLAGS += -D TC_ARCH_X86
152 else ifeq "$(CPU_ARCH)" "x64"
153         C_CXX_FLAGS += -D TC_ARCH_X64
154 endif
155 ifeq "$(CPU_ARCH)" "x86"
156         C_CXX_FLAGS += -D TC_ARCH_X86
157 else ifeq "$(CPU_ARCH)" "x64"
158         C_CXX_FLAGS += -D TC_ARCH_X64
159 endif
160
161
162 #------ Linux configuration ------
163
164 ifeq "$(shell uname -s)" "Linux"
165
166         PLATFORM := Linux
167         C_CXX_FLAGS += -DTC_UNIX -DTC_LINUX -stdlib=libstdc++
168         OBJCXXFLAGS += -stdlib=libstdc++ -std=c++11
169         CXXFLAGS += -stdlib=libstdc++ -std=c++11
170
171         ifeq "$(TC_BUILD_CONFIG)" "Release"
172                 C_CXX_FLAGS += -fdata-sections -ffunction-sections
173                 LFLAGS += -Wl,--gc-sections
174
175                 ifneq "$(shell ld --help 2>&1 | grep sysv | wc -l)" "0"
176                         LFLAGS += -Wl,--hash-style=sysv
177                 endif
178
179                 WXCONFIG_CFLAGS += -fdata-sections -ffunction-sections
180                 WXCONFIG_CXXFLAGS += -fdata-sections -ffunction-sections
181         endif
182
183 endif
184
185
186 #------ Mac OS X configuration ------
187
188 ifeq "$(shell uname -s)" "Darwin"
189
190         PLATFORM := MacOSX
191         APPNAME := nemesis
192
193         TC_OSX_SDK ?= /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk
194         CC := clang
195         CXX := clang++
196
197         OBJCXXFLAGS += -stdlib=libstdc++ -std=c++11
198         LDFLAGS += -stdlib=libstdc++
199         CXXFLAGS += -stdlib=libstdc++
200         C_CXX_FLAGS += -DTC_UNIX -DTC_BSD -DTC_MACOSX -mmacosx-version-min=10.7 -isysroot $(TC_OSX_SDK)
201 #       LFLAGS += -mmacosx-version-min=10.4 -Wl,-syslibroot $(TC_OSX_SDK)
202 #       WX_CONFIGURE_FLAGS += --with-macosx-version-min=10.4 --with-macosx-sdk=$(TC_OSX_SDK)
203
204 #       ifeq "$(CPU_ARCH)" "x64"
205 #               CPU_ARCH = x86_64
206 #       endif
207         CPU_ARCH = x64
208         ASM_OBJ_FORMAT = macho64
209         ASFLAGS += --prefix _
210
211                 export DISABLE_PRECOMPILED_HEADERS := 1
212
213                 S := $(C_CXX_FLAGS)
214                 C_CXX_FLAGS = $(subst -MMD,,$(S))
215
216                 C_CXX_FLAGS += -gfull
217                 LFLAGS += -Wl,-dead_strip
218
219                 WXCONFIG_CFLAGS += -gfull
220                 WXCONFIG_CXXFLAGS += -gfull
221
222 endif
223
224
225 #------ FreeBSD configuration ------
226
227 ifeq "$(shell uname -s)" "FreeBSD"
228
229         PLATFORM := FreeBSD
230         PLATFORM_UNSUPPORTED := 1
231         C_CXX_FLAGS += -DTC_UNIX -DTC_BSD -DTC_FREEBSD
232
233 endif
234
235
236 #------ Solaris configuration ------
237
238 ifeq "$(shell uname -s)" "SunOS"
239
240         PLATFORM := Solaris
241         PLATFORM_UNSUPPORTED := 1
242         C_CXX_FLAGS += -DTC_UNIX -DTC_SOLARIS
243         WX_CONFIGURE_FLAGS += --with-gtk
244
245 endif
246
247
248 #------ Common configuration ------
249
250 CFLAGS := $(C_CXX_FLAGS) $(CFLAGS) $(TC_EXTRA_CFLAGS)
251 CXXFLAGS := $(C_CXX_FLAGS) $(CXXFLAGS) $(TC_EXTRA_CXXFLAGS)
252 ASFLAGS += -f $(ASM_OBJ_FORMAT)
253 LFLAGS := $(LFLAGS) $(TC_EXTRA_LFLAGS)
254
255 WX_CONFIGURE_FLAGS += --enable-unicode -disable-shared --disable-dependency-tracking --disable-compat26 --enable-exceptions --enable-std_string --enable-dataobj --enable-mimetype \
256
257
258 #------ Project build ------
259
260 PROJ_DIRS := Platform Volume Driver/Fuse Core Main
261
262 .PHONY: all clean wxbuild nembuild
263
264 all clean:
265         @if pwd | grep -q ' '; then echo 'Error: source code is stored in a path containing spaces' >&2; exit 1; fi
266 #       $(MAKE) -C $(BASE_DIR)/Core/libntru
267         @for DIR in $(PROJ_DIRS); do \
268                 PROJ=$$(echo $$DIR | cut -d/ -f1); \
269                 $(MAKE) -C $$DIR -f $$PROJ.make NAME=$$PROJ $(MAKECMDGOALS) || exit $?; \
270                 export LIBS="$(BASE_DIR)/$$DIR/$$PROJ.a $$LIBS"; \
271         done
272
273 #------ wxWidgets build ------
274
275 ifeq "$(MAKECMDGOALS)" "wxbuild"
276 CFLAGS :=
277 CXXFLAGS :=
278 LFLAGS :=
279 endif
280
281 wxbuild:
282
283 ifneq "$(shell test -f $(WX_ROOT)/configure || test -f $(WX_BUILD_DIR)/../configure && echo 1)" "1"
284         @echo 'Error: WX_ROOT must point to wxWidgets source code directory' >&2
285         @exit 1
286 endif
287
288         rm -rf "$(WX_BUILD_DIR)"
289         mkdir -p "$(WX_BUILD_DIR)"
290         @echo Configuring wxWidgets library...
291         cd "$(WX_BUILD_DIR)" && "$(WX_ROOT)/configure" $(WX_CONFIGURE_FLAGS) >/dev/null
292         
293         @echo Building wxWidgets library...
294 #       cd "$(WX_BUILD_DIR)" && $(MAKE)
295         cd "$(WX_BUILD_DIR)" && $(MAKE) -j16
This page took 0.029288 seconds and 3 git commands to generate. Download a nemesis OSX (sierra+high sierra, tested/working) binary, with fuse-ext3 via e2fsprogs, at this link. application and installer are signed by screwjack, llc. must install fuse with macFUSE layer first.