~zooko/cryptopp/trunk

« back to all changes in this revision

Viewing changes to GNUmakefile-cross

  • Committer: noloader
  • Date: 2015-06-29 03:46:43 UTC
  • Revision ID: svn-v4:57ff6487-cd31-0410-9ec3-f628ee90f5f0:trunk/c5:554
Added GNUmakefile-cross for Android, iOS and Embedded

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
CXXFLAGS += -DNDEBUG -g2 -Os -fPIC -pipe
 
2
 
 
3
# The following options reduce code size, but breaks link or makes link very slow on some systems
 
4
# CXXFLAGS += -ffunction-sections -fdata-sections
 
5
# LDFLAGS += -Wl,--gc-sections
 
6
CXXFLAGS += -Wno-unused-function -Wno-unused-parameter -Wno-unused-variable
 
7
ARFLAGS = -cr   # ar needs the dash on OpenBSD
 
8
RANLIB ?= ranlib
 
9
CP = cp
 
10
MKDIR = mkdir
 
11
EGREP = egrep
 
12
CHMOD = chmod
 
13
 
 
14
CLANG_COMPILER = $(shell $(CXX) --version 2>&1 | $(EGREP) -i -c "clang")
 
15
 
 
16
IS_X86=0
 
17
IS_LINUX=0
 
18
IS_MINGW=0
 
19
IS_DARWIN=0
 
20
UNAME=CrossCompile
 
21
 
 
22
# Default prefix for make install
 
23
ifeq ($(PREFIX),)
 
24
PREFIX = /usr/local
 
25
endif
 
26
 
 
27
# iOS cross-compile configuration. Works in conjunction with IS_CROSS_COMPILE.
 
28
#   See http://www.cryptopp.com/wiki/iOS_(Command_Line).
 
29
ifeq ($(IS_IOS),1)
 
30
  CXX = clang++
 
31
 
 
32
  CXXFLAGS = -DNDEBUG -g2 -Os -fPIC -pipe
 
33
  CXXFLAGS += -DCRYPTOPP_DISABLE_ASM  $(IOS_FLAGS)
 
34
  CXXFLAGS += -arch $(IOS_ARCH) -isysroot $(IOS_SYSROOT)
 
35
  CXXFLAGS += -stdlib=libc++
 
36
 
 
37
  AR = libtool
 
38
  ARFLAGS = -static -o
 
39
endif
 
40
 
 
41
# Android cross-compile configuration. Works in conjunction with IS_CROSS_COMPILE.
 
42
#   See http://www.cryptopp.com/wiki/Android_(Command_Line).
 
43
ifeq ($(IS_ANDROID),1)
 
44
  # CPP, CXX, AR, RANLIB, LD, etc are set in 'setenv-android.sh'
 
45
  CXXFLAGS = -DNDEBUG -g2 -Os -pipe -fPIC
 
46
  CXXFLAGS += -DCRYPTOPP_DISABLE_ASM $(ANDROID_FLAGS)
 
47
  CXXFLAGS += --sysroot=$(ANDROID_SYSROOT) -I$(ANDROID_STL_INC)
 
48
  LDLIBS += $(ANDROID_STL_LIB)
 
49
endif
 
50
 
 
51
# ARM embedded cross-compile configuration. Works in conjunction with IS_CROSS_COMPILE.
 
52
#   See http://www.cryptopp.com/wiki/ARM_Embedded_(Command_Line)
 
53
#   and http://www.cryptopp.com/wiki/ARM_Embedded_(Bare Metal).
 
54
ifeq ($(IS_ARM_EMBEDDED),1)
 
55
  # CPP, CXX, AR, RANLIB, LD, etc are set in 'setenv-embedded.sh'
 
56
  CXXFLAGS = -DNDEBUG -g2 -Os -pipe -fPIC
 
57
  CXXFLAGS += -DCRYPTOPP_DISABLE_ASM $(ARM_EMBEDDED_FLAGS)
 
58
  CXXFLAGS += --sysroot=$(ARM_EMBEDDED_SYSROOT)
 
59
endif
 
60
 
 
61
ifneq ($(CLANG_COMPILER),0)
 
62
CXXFLAGS += -Wno-tautological-compare -Wno-unused-value
 
63
endif
 
64
 
 
65
SRCS = $(wildcard *.cpp)
 
66
ifeq ($(SRCS),)                         # workaround wildcard function bug in GNU Make 3.77
 
67
SRCS = $(shell echo *.cpp)
 
68
endif
 
69
 
 
70
OBJS = $(SRCS:.cpp=.o)
 
71
# test.o needs to be after bench.o for cygwin 1.1.4 (possible ld bug?)
 
72
TESTOBJS = bench.o bench2.o test.o validat1.o validat2.o validat3.o adhoc.o datatest.o regtest.o fipsalgt.o dlltest.o
 
73
LIBOBJS = $(filter-out $(TESTOBJS),$(OBJS))
 
74
 
 
75
DLLSRCS = algebra.cpp algparam.cpp asn.cpp basecode.cpp cbcmac.cpp channels.cpp cryptlib.cpp des.cpp dessp.cpp dh.cpp dll.cpp dsa.cpp ec2n.cpp eccrypto.cpp ecp.cpp eprecomp.cpp files.cpp filters.cpp fips140.cpp fipstest.cpp gf2n.cpp gfpcrypt.cpp hex.cpp hmac.cpp integer.cpp iterhash.cpp misc.cpp modes.cpp modexppc.cpp mqueue.cpp nbtheory.cpp oaep.cpp osrng.cpp pch.cpp pkcspad.cpp pubkey.cpp queue.cpp randpool.cpp rdtables.cpp rijndael.cpp rng.cpp rsa.cpp sha.cpp simple.cpp skipjack.cpp strciphr.cpp trdlocal.cpp
 
76
DLLOBJS = $(DLLSRCS:.cpp=.export.o)
 
77
LIBIMPORTOBJS = $(LIBOBJS:.o=.import.o)
 
78
TESTIMPORTOBJS = $(TESTOBJS:.o=.import.o)
 
79
DLLTESTOBJS = dlltest.dllonly.o
 
80
 
 
81
all: cryptest.exe
 
82
static: libcryptopp.a
 
83
dynamic: libcryptopp.so
 
84
 
 
85
test: cryptest.exe
 
86
        ./cryptest.exe v
 
87
 
 
88
clean:
 
89
        -$(RM) cryptest.exe libcryptopp.a libcryptopp.so $(LIBOBJS) $(DLLOBJS) $(TESTOBJS)
 
90
        -$(RM) -r *.dSYM
 
91
 
 
92
install:
 
93
        $(MKDIR) -p $(PREFIX)/include/cryptopp $(PREFIX)/lib $(PREFIX)/bin
 
94
        -$(CP) *.h $(PREFIX)/include/cryptopp
 
95
        -$(CP) *.a $(PREFIX)/lib
 
96
        -$(CP) *.so $(PREFIX)/lib
 
97
        -$(CP) *.exe $(PREFIX)/bin
 
98
 
 
99
remove:
 
100
        -$(RM) -rf $(PREFIX)/include/cryptopp
 
101
        -$(RM) $(PREFIX)/lib/libcryptopp.a
 
102
        -$(RM) $(PREFIX)/lib/libcryptopp.so
 
103
        -$(RM) $(PREFIX)/bin/cryptest.exe
 
104
 
 
105
libcryptopp.a: $(LIBOBJS)
 
106
        $(AR) $(ARFLAGS) $@ $(LIBOBJS)
 
107
        $(RANLIB) $@
 
108
 
 
109
libcryptopp.so: $(LIBOBJS)
 
110
        $(CXX) $(CXXFLAGS) -shared -o $@ $(LIBOBJS) $(LDFLAGS) $(LDLIBS)
 
111
 
 
112
cryptest.exe: libcryptopp.a $(TESTOBJS)
 
113
        $(CXX) -o $@ $(CXXFLAGS) $(TESTOBJS) ./libcryptopp.a $(LDFLAGS) $(LDLIBS)
 
114
 
 
115
adhoc.cpp: adhoc.cpp.proto
 
116
ifeq ($(wildcard adhoc.cpp),)
 
117
        cp adhoc.cpp.proto adhoc.cpp
 
118
else
 
119
        touch adhoc.cpp
 
120
endif
 
121
 
 
122
%.o : %.cpp
 
123
        $(CXX) $(CXXFLAGS) -c $<