1#
2# Copyright (C) 2006-2016 OpenWrt.org
3#
4# This is free software, licensed under the GNU General Public License v2.
5# See /LICENSE for more information.
6#
7
8include $(TOPDIR)/rules.mk
9
10PKG_NAME:=openssl
11PKG_BASE:=1.0.2
12PKG_BUGFIX:=m
13PKG_VERSION:=$(PKG_BASE)$(PKG_BUGFIX)
14PKG_RELEASE:=1
15PKG_USE_MIPS16:=0
16
17PKG_BUILD_PARALLEL:=0
18
19PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
20PKG_SOURCE_URL:=http://www.openssl.org/source/ \
21	ftp://ftp.openssl.org/source/ \
22	http://www.openssl.org/source/old/$(PKG_BASE)/ \
23	ftp://ftp.funet.fi/pub/crypt/mirrors/ftp.openssl.org/source \
24	ftp://ftp.sunet.se/pub/security/tools/net/openssl/source/
25PKG_MD5SUM:=10e9e37f492094b9ef296f68f24a7666
26
27PKG_LICENSE:=OpenSSL
28PKG_LICENSE_FILES:=LICENSE
29PKG_CONFIG_DEPENDS:= \
30	CONFIG_OPENSSL_ENGINE_CRYPTO \
31	CONFIG_OPENSSL_ENGINE_DIGEST \
32	CONFIG_OPENSSL_WITH_EC \
33	CONFIG_OPENSSL_WITH_EC2M \
34	CONFIG_OPENSSL_WITH_SSL3 \
35	CONFIG_OPENSSL_HARDWARE_SUPPORT
36
37include $(INCLUDE_DIR)/package.mk
38
39ifneq ($(CONFIG_CCACHE),)
40HOSTCC=$(HOSTCC_NOCACHE)
41HOSTCXX=$(HOSTCXX_NOCACHE)
42endif
43
44define Package/openssl/Default
45  TITLE:=Open source SSL toolkit
46  URL:=http://www.openssl.org/
47endef
48
49define Package/libopenssl/config
50source "$(SOURCE)/Config.in"
51endef
52
53define Package/openssl/Default/description
54The OpenSSL Project is a collaborative effort to develop a robust,
55commercial-grade, full-featured, and Open Source toolkit implementing the Secure
56Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well
57as a full-strength general purpose cryptography library.
58endef
59
60define Package/libopenssl
61$(call Package/openssl/Default)
62  SECTION:=libs
63  SUBMENU:=SSL
64  CATEGORY:=Libraries
65  DEPENDS:=+zlib
66  TITLE+= (libraries)
67  ABI_VERSION:=$(PKG_VERSION)
68  MENU:=1
69endef
70
71define Package/libopenssl/description
72$(call Package/openssl/Default/description)
73This package contains the OpenSSL shared libraries, needed by other programs.
74endef
75
76define Package/openssl-util
77  $(call Package/openssl/Default)
78  SECTION:=utils
79  CATEGORY:=Utilities
80  DEPENDS:=+libopenssl
81  TITLE+= (utility)
82endef
83
84define Package/openssl-util/conffiles
85/etc/ssl/openssl.cnf
86endef
87
88define Package/openssl-util/description
89$(call Package/openssl/Default/description)
90This package contains the OpenSSL command-line utility.
91endef
92
93
94OPENSSL_NO_CIPHERS:= no-idea no-md2 no-mdc2 no-rc5 no-sha0 no-camellia no-krb5
95OPENSSL_OPTIONS:= shared no-err zlib-dynamic no-sse2 no-ssl2
96
97ifdef CONFIG_OPENSSL_ENGINE_CRYPTO
98  OPENSSL_OPTIONS += -DHAVE_CRYPTODEV
99  ifdef CONFIG_OPENSSL_ENGINE_DIGEST
100    OPENSSL_OPTIONS += -DUSE_CRYPTODEV_DIGESTS
101  endif
102else
103  OPENSSL_OPTIONS += no-engines
104endif
105
106ifndef CONFIG_OPENSSL_WITH_EC
107  OPENSSL_OPTIONS += no-ec
108endif
109
110ifndef CONFIG_OPENSSL_WITH_EC2M
111  OPENSSL_OPTIONS += no-ec2m
112endif
113
114ifndef CONFIG_OPENSSL_WITH_SSL3
115  OPENSSL_OPTIONS += no-ssl3
116endif
117
118ifndef CONFIG_OPENSSL_HARDWARE_SUPPORT
119  OPENSSL_OPTIONS += no-hw
120endif
121
122ifeq ($(CONFIG_x86_64),y)
123  OPENSSL_TARGET:=linux-x86_64-openwrt
124  OPENSSL_MAKEFLAGS += LIBDIR=lib
125else
126  OPENSSL_OPTIONS+=no-sse2
127  ifeq ($(CONFIG_mips)$(CONFIG_mipsel),y)
128    OPENSSL_TARGET:=linux-mips-openwrt
129#  else ifeq ($(CONFIG_arm)$(CONFIG_armeb),y)
130#    OPENSSL_TARGET:=linux-armv4-openwrt
131  else
132    OPENSSL_TARGET:=linux-generic-openwrt
133    OPENSSL_OPTIONS+=no-perlasm
134  endif
135endif
136
137STAMP_CONFIGURED := $(STAMP_CONFIGURED)_$(subst $(space),_,$(OPENSSL_OPTIONS))
138
139define Build/Configure
140	[ -f $(STAMP_CONFIGURED) ] || { \
141		rm -f $(PKG_BUILD_DIR)/*.so.* $(PKG_BUILD_DIR)/*.a; \
142		find $(PKG_BUILD_DIR) -name \*.o | xargs rm -f; \
143	}
144	(cd $(PKG_BUILD_DIR); \
145		./Configure $(OPENSSL_TARGET) \
146			--prefix=/usr \
147			--openssldir=/etc/ssl \
148			$(TARGET_CPPFLAGS) \
149			$(TARGET_LDFLAGS) -ldl \
150			-DOPENSSL_SMALL_FOOTPRINT \
151			$(OPENSSL_NO_CIPHERS) \
152			$(OPENSSL_OPTIONS) \
153	)
154	# XXX: OpenSSL "make depend" will look for installed headers before its own,
155	# so remove installed stuff first
156	-$(SUBMAKE) -j1 clean-staging
157	+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
158		MAKEDEPPROG="$(TARGET_CROSS)gcc" \
159		OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
160		$(OPENSSL_MAKEFLAGS) \
161		depend
162endef
163
164TARGET_CFLAGS += $(FPIC) -I$(CURDIR)/include
165
166define Build/Compile
167	+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
168		CC="$(TARGET_CC)" \
169		ASFLAGS="$(TARGET_ASFLAGS) -I$(PKG_BUILD_DIR)/crypto -c" \
170		AR="$(TARGET_CROSS)ar r" \
171		RANLIB="$(TARGET_CROSS)ranlib" \
172		OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
173		$(OPENSSL_MAKEFLAGS) \
174		all
175	+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
176		CC="$(TARGET_CC)" \
177		ASFLAGS="$(TARGET_ASFLAGS) -I$(PKG_BUILD_DIR)/crypto -c" \
178		AR="$(TARGET_CROSS)ar r" \
179		RANLIB="$(TARGET_CROSS)ranlib" \
180		OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
181		$(OPENSSL_MAKEFLAGS) \
182		build-shared
183	# Work around openssl build bug to link libssl.so with libcrypto.so.
184	-rm $(PKG_BUILD_DIR)/libssl.so.*.*.*
185	+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
186		CC="$(TARGET_CC)" \
187		OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
188		$(OPENSSL_MAKEFLAGS) \
189		do_linux-shared
190	$(MAKE) -C $(PKG_BUILD_DIR) \
191		CC="$(TARGET_CC)" \
192		INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \
193		$(OPENSSL_MAKEFLAGS) \
194		install
195endef
196
197define Build/InstallDev
198	$(INSTALL_DIR) $(1)/usr/include
199	$(CP) $(PKG_INSTALL_DIR)/usr/include/openssl $(1)/usr/include/
200	$(INSTALL_DIR) $(1)/usr/lib/
201	$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{crypto,ssl}.{a,so*} $(1)/usr/lib/
202	$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
203	$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/{openssl,libcrypto,libssl}.pc $(1)/usr/lib/pkgconfig/
204	[ -n "$(TARGET_LDFLAGS)" ] && $(SED) 's#$(TARGET_LDFLAGS)##g' $(1)/usr/lib/pkgconfig/{openssl,libcrypto,libssl}.pc || true
205endef
206
207define Package/libopenssl/install
208	$(INSTALL_DIR) $(1)/usr/lib
209	$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libcrypto.so.* $(1)/usr/lib/
210	$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libssl.so.* $(1)/usr/lib/
211endef
212
213define Package/openssl-util/install
214	$(INSTALL_DIR) $(1)/etc/ssl
215	$(CP) $(PKG_INSTALL_DIR)/etc/ssl/openssl.cnf $(1)/etc/ssl/
216	$(INSTALL_DIR) $(1)/etc/ssl/certs
217	$(INSTALL_DIR) $(1)/etc/ssl/private
218	chmod 0700 $(1)/etc/ssl/private
219	$(INSTALL_DIR) $(1)/usr/bin
220	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/openssl $(1)/usr/bin/
221endef
222
223$(eval $(call BuildPackage,libopenssl))
224$(eval $(call BuildPackage,openssl-util))
225