diff options
Diffstat (limited to 'src/Makefile')
-rw-r--r-- | src/Makefile | 298 |
1 files changed, 298 insertions, 0 deletions
diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 00000000..265bb6f2 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,298 @@ +# +# Copyright (c) 2008-2010 TrueCrypt Developers Association. All rights reserved. +# +# Governed by the TrueCrypt License 3.0 the full text of which is contained in +# the file License.txt included in TrueCrypt binary and source code distribution +# packages. +# + +#------ Command line arguments ------ +# DEBUG: Disable optimizations and enable debugging checks +# DEBUGGER: Enable debugging information for use by debuggers +# NOASM: Exclude modules requiring assembler +# NOGUI: Disable graphical user interface (build console-only application) +# NOSTRIP: Do not strip release binary +# NOTEST: Do not test release binary +# RESOURCEDIR: Run-time resource directory +# VERBOSE: Enable verbose messages +# WXSTATIC: Use static wxWidgets library + +#------ Targets ------ +# all +# clean +# wxbuild: Configure and build wxWidgets - source code must be located at $(WX_ROOT) + + +#------ Build configuration ------ + +export APPNAME := truecrypt +export BASE_DIR := $(CURDIR) +export BUILD_INC := $(BASE_DIR)/Build/Include + +export AR ?= ar +export CC ?= gcc +export CXX ?= g++ +export AS := nasm +export RANLIB ?= ranlib + +export CFLAGS := -Wall +export CXXFLAGS := -Wall -Wno-unused-parameter +C_CXX_FLAGS := -MMD -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES -I$(BASE_DIR) -I$(BASE_DIR)/Crypto +export ASFLAGS := -Ox -D __GNUC__ +export LFLAGS := + +export PKG_CONFIG_PATH ?= /usr/local/lib/pkgconfig + +export WX_CONFIG ?= wx-config +export WX_CONFIG_ARGS := --unicode +WX_CONFIGURE_FLAGS := +export WXCONFIG_CFLAGS := +export WXCONFIG_CXXFLAGS := +WX_ROOT ?= .. + + +export TC_BUILD_CONFIG := Release + +ifeq "$(origin DEBUG)" "command line" + ifneq "$(DEBUG)" "0" + TC_BUILD_CONFIG := Debug + endif +endif + +ifeq "$(origin NOGUI)" "command line" + export TC_NO_GUI := 1 + C_CXX_FLAGS += -DTC_NO_GUI + WX_CONFIGURE_FLAGS += --disable-gui +endif + +ifdef PKCS11_INC + C_CXX_FLAGS += -I$(PKCS11_INC) +endif + +ifeq "$(origin RESOURCEDIR)" "command line" + C_CXX_FLAGS += -DTC_RESOURCE_DIR="$(RESOURCEDIR)" +endif + +ifneq "$(origin VERBOSE)" "command line" + MAKEFLAGS += -s +endif + +ifeq "$(origin WXSTATIC)" "command line" + WX_CONFIG = $(WX_BUILD_DIR)/wx-config + WX_CONFIG_ARGS += --static +endif + + +#------ Release configuration ------ + +ifeq "$(TC_BUILD_CONFIG)" "Release" + + C_CXX_FLAGS += -O2 -fno-strict-aliasing # Do not enable strict aliasing + export WX_BUILD_DIR ?= $(BASE_DIR)/wxrelease + WX_CONFIGURE_FLAGS += --disable-debug_flag --disable-debug_gdb --disable-debug_info + +else + +#------ Debug configuration ------ + + C_CXX_FLAGS += -DDEBUG + CXXFLAGS += -fno-default-inline -Wno-unused-function -Wno-unused-variable + export WX_BUILD_DIR ?= $(BASE_DIR)/wxdebug + WX_CONFIGURE_FLAGS += --enable-debug_flag --disable-debug_gdb --disable-debug_info + +endif + + +#------ Debugger configuration ------ + +ifeq "$(origin DEBUGGER)" "command line" + + C_CXX_FLAGS += -ggdb + WX_CONFIGURE_FLAGS += --enable-debug_gdb --enable-debug_info + +endif + + +#------ Platform configuration ------ + +export PLATFORM := "Unknown" +export PLATFORM_UNSUPPORTED := 0 + +export CPU_ARCH ?= unknown + +ARCH = $(shell uname -p) +ifeq "$(ARCH)" "unknown" + ARCH = $(shell uname -m) +endif + +ifneq (,$(filter i386 i486 i586 i686 x86,$(ARCH))) + CPU_ARCH = x86 + ASM_OBJ_FORMAT = elf32 +else ifneq (,$(filter x86_64 x86-64 amd64 x64,$(ARCH))) + CPU_ARCH = x64 + ASM_OBJ_FORMAT = elf64 +endif + +ifeq "$(origin NOASM)" "command line" + CPU_ARCH = unknown +endif + +ifeq "$(CPU_ARCH)" "x86" + C_CXX_FLAGS += -D TC_ARCH_X86 +else ifeq "$(CPU_ARCH)" "x64" + C_CXX_FLAGS += -D TC_ARCH_X64 +endif + + +#------ Linux configuration ------ + +ifeq "$(shell uname -s)" "Linux" + + PLATFORM := Linux + C_CXX_FLAGS += -DTC_UNIX -DTC_LINUX + + ifeq "$(TC_BUILD_CONFIG)" "Release" + C_CXX_FLAGS += -fdata-sections -ffunction-sections + LFLAGS += -Wl,--gc-sections + + ifneq "$(shell ld --help 2>&1 | grep sysv | wc -l)" "0" + LFLAGS += -Wl,--hash-style=sysv + endif + + WXCONFIG_CFLAGS += -fdata-sections -ffunction-sections + WXCONFIG_CXXFLAGS += -fdata-sections -ffunction-sections + endif + +endif + + +#------ Mac OS X configuration ------ + +ifeq "$(shell uname -s)" "Darwin" + + PLATFORM := MacOSX + APPNAME := TrueCrypt + + TC_OSX_SDK ?= /Developer/SDKs/MacOSX10.4u.sdk + CC := gcc-4.0 + CXX := g++-4.0 + + C_CXX_FLAGS += -DTC_UNIX -DTC_BSD -DTC_MACOSX -mmacosx-version-min=10.4 -isysroot $(TC_OSX_SDK) + LFLAGS += -mmacosx-version-min=10.4 -Wl,-syslibroot $(TC_OSX_SDK) + WX_CONFIGURE_FLAGS += --with-macosx-version-min=10.4 --with-macosx-sdk=$(TC_OSX_SDK) + + ifeq "$(CPU_ARCH)" "x64" + CPU_ARCH = x86 + endif + + ASM_OBJ_FORMAT = macho + ASFLAGS += --prefix _ + + ifeq "$(TC_BUILD_CONFIG)" "Release" + + export DISABLE_PRECOMPILED_HEADERS := 1 + + S := $(C_CXX_FLAGS) + C_CXX_FLAGS = $(subst -MMD,,$(S)) + + C_CXX_FLAGS += -gfull -arch i386 -arch ppc + LFLAGS += -Wl,-dead_strip -arch i386 -arch ppc + + WX_CONFIGURE_FLAGS += --enable-universal_binary + WXCONFIG_CFLAGS += -gfull + WXCONFIG_CXXFLAGS += -gfull + + else + + WX_CONFIGURE_FLAGS += --disable-universal_binary + + endif + +endif + + +#------ FreeBSD configuration ------ + +ifeq "$(shell uname -s)" "FreeBSD" + + PLATFORM := FreeBSD + PLATFORM_UNSUPPORTED := 1 + C_CXX_FLAGS += -DTC_UNIX -DTC_BSD -DTC_FREEBSD + +endif + + +#------ Solaris configuration ------ + +ifeq "$(shell uname -s)" "SunOS" + + PLATFORM := Solaris + PLATFORM_UNSUPPORTED := 1 + C_CXX_FLAGS += -DTC_UNIX -DTC_SOLARIS + WX_CONFIGURE_FLAGS += --with-gtk + +endif + + +#------ Common configuration ------ + +CFLAGS := $(C_CXX_FLAGS) $(CFLAGS) $(TC_EXTRA_CFLAGS) +CXXFLAGS := $(C_CXX_FLAGS) $(CXXFLAGS) $(TC_EXTRA_CXXFLAGS) +ASFLAGS += -f $(ASM_OBJ_FORMAT) +LFLAGS := $(LFLAGS) $(TC_EXTRA_LFLAGS) + +WX_CONFIGURE_FLAGS += --enable-unicode -disable-shared --disable-dependency-tracking --disable-compat26 --enable-exceptions --enable-std_string --enable-dataobj --enable-mimetype \ + --disable-protocol --disable-protocols --disable-url --disable-ipc --disable-sockets --disable-fs_inet --disable-ole --disable-docview --disable-clipboard \ + --disable-help --disable-html --disable-mshtmlhelp --disable-htmlhelp --disable-mdi --disable-metafile --disable-webkit \ + --disable-xrc --disable-aui --disable-postscript --disable-printarch \ + --disable-arcstream --disable-fs_archive --disable-fs_zip --disable-tarstream --disable-zipstream \ + --disable-animatectrl --disable-bmpcombobox --disable-calendar --disable-caret --disable-checklst --disable-collpane --disable-colourpicker --disable-comboctrl \ + --disable-datepick --disable-display --disable-dirpicker --disable-filepicker --disable-fontpicker --disable-grid --disable-dataviewctrl \ + --disable-listbook --disable-odcombobox --disable-sash --disable-searchctrl --disable-slider --disable-splitter --disable-togglebtn \ + --disable-toolbar --disable-tbarnative --disable-treebook --disable-toolbook --disable-tipwindow --disable-popupwin \ + --disable-commondlg --disable-aboutdlg --disable-coldlg --disable-finddlg --disable-fontdlg --disable-numberdlg --disable-splash \ + --disable-tipdlg --disable-progressdlg --disable-wizarddlg --disable-miniframe --disable-tooltips --disable-splines --disable-palette \ + --disable-richtext --disable-dialupman --disable-debugreport --disable-filesystem \ + --disable-graphics_ctx --disable-sound --disable-mediactrl --disable-joystick --disable-apple_ieee \ + --disable-gif --disable-pcx --disable-tga --disable-iff --disable-gif --disable-pnm \ + --without-expat --without-libtiff --without-libjpeg --without-libpng -without-regex --without-zlib + + +#------ Project build ------ + +PROJ_DIRS := Platform Volume Driver/Fuse Core Main + +.PHONY: all clean wxbuild + +all clean: + @if pwd | grep -q ' '; then echo 'Error: source code is stored in a path containing spaces' >&2; exit 1; fi + + @for DIR in $(PROJ_DIRS); do \ + PROJ=$$(echo $$DIR | cut -d/ -f1); \ + $(MAKE) -C $$DIR -f $$PROJ.make NAME=$$PROJ $(MAKECMDGOALS) || exit $?; \ + export LIBS="$(BASE_DIR)/$$DIR/$$PROJ.a $$LIBS"; \ + done + + +#------ wxWidgets build ------ + +ifeq "$(MAKECMDGOALS)" "wxbuild" +CFLAGS := +CXXFLAGS := +LFLAGS := +endif + +wxbuild: + +ifneq "$(shell test -f $(WX_ROOT)/configure || test -f $(WX_BUILD_DIR)/../configure && echo 1)" "1" + @echo 'Error: WX_ROOT must point to wxWidgets source code directory' >&2 + @exit 1 +endif + + rm -rf "$(WX_BUILD_DIR)" + mkdir -p "$(WX_BUILD_DIR)" + @echo Configuring wxWidgets library... + cd "$(WX_BUILD_DIR)" && "$(WX_ROOT)/configure" $(WX_CONFIGURE_FLAGS) >/dev/null + + @echo Building wxWidgets library... + cd "$(WX_BUILD_DIR)" && $(MAKE) |