Makefile.opt_lib 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. #
  2. # Copyright (C) 2011-2018 Intel Corporation. All rights reserved.
  3. #
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions
  6. # are met:
  7. #
  8. # * Redistributions of source code must retain the above copyright
  9. # notice, this list of conditions and the following disclaimer.
  10. # * Redistributions in binary form must reproduce the above copyright
  11. # notice, this list of conditions and the following disclaimer in
  12. # the documentation and/or other materials provided with the
  13. # distribution.
  14. # * Neither the name of Intel Corporation nor the names of its
  15. # contributors may be used to endorse or promote products derived
  16. # from this software without specific prior written permission.
  17. #
  18. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  19. # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  20. # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  21. # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  22. # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  23. # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  24. # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  25. # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  26. # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  28. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29. #
  30. #
  31. # This Makefile will compile SDK to generate various components
  32. # including:
  33. # - Trusted libraries
  34. # - tstdc: libsgx_tstdc.a
  35. # - tstdcxx: libsgx_tstdcxx.a
  36. # - tcxx: libsgx_tcxx.a
  37. # - tservice: libsgx_tservice.a
  38. # - trts: libsgx_trts.a
  39. # - tcrypto: libsgx_tcrypto.a
  40. # - tkey_exchange: libsgx_tkey_exchange.a
  41. # - tprotected_fs: libsgx_tprotected_fs.a
  42. # - tcmalloc: libsgx_tcmalloc.a
  43. # - sgx_pcl: libsgx_pcl.a
  44. # - Untrtusted libraries
  45. # - ukey_exchange: libsgx_ukey_exchange.a
  46. # - uprotected_fs: libsgx_uprotected_fs.a
  47. # - sample_crypto: libsample_crypto.so (for sample code use)
  48. # - ptrace: libsgx_ptrace.so, gdb-sgx-plugin
  49. # - Standalone, untrusted libraries
  50. # - libcapable: libsgx_capable.a libsgx_capable.so
  51. # - Tools
  52. # - signtool: sgx_sign
  53. # - edger8r: sgx_edger8r
  54. # - sgx_encrypt: sgx_encrypt
  55. # - Simulation libraries and tools
  56. # - simulation: libsgx_trts_sim.a, libsgx_tservice_sim.a, libsgx_urts_sim.so, libsgx_uae_service_sim.so, sgx_config_cpusvn
  57. #
  58. include ../buildenv.mk
  59. LIBTLIBC := $(BUILD_DIR)/libsgx_tstdc.a
  60. LIBTLIBCXX := $(BUILD_DIR)/libsgx_tstdcxx.a
  61. LIBTCXX := $(BUILD_DIR)/libsgx_tcxx.a
  62. LIBTSE := $(BUILD_DIR)/libsgx_tservice.a
  63. .PHONY: components
  64. components: tstdc tstdcxx tcxx tservice trts tcrypto tkey_exchange ukey_exchange tprotected_fs uprotected_fs ptrace sample_crypto libcapable simulation signtool edger8r tcmalloc sgx_pcl sgx_encrypt
  65. # ---------------------------------------------------
  66. # tstdc
  67. # includes: tlibc, tlibthread, compiler-rt, tsafecrt
  68. # libimf, libirc, libsvml, etc.
  69. # ---------------------------------------------------
  70. .PHONY: tstdc
  71. tstdc: $(LIBTLIBC)
  72. ifeq ($(ARCH), x86_64)
  73. LIBM_PATH := $(LINUX_EXTERNAL_DIR)/libm/Libm_ct_Linux
  74. LIBIRC_PATH := $(LINUX_EXTERNAL_DIR)/libirc/efi2
  75. SVML_PATH := $(LINUX_EXTERNAL_DIR)/libm/SVML_Intel64_Linux
  76. else
  77. LIBM_PATH := $(LINUX_EXTERNAL_DIR)/libm/Libm_Linux
  78. LIBIRC_PATH := $(LINUX_EXTERNAL_DIR)/libirc/ia32
  79. SVML_PATH := $(LINUX_EXTERNAL_DIR)/libm/SVML_IA32_Linux
  80. endif
  81. LIBIRC_NAME := libirc.a
  82. $(LIBTLIBC): tlibthread compiler-rt tsafecrt tsetjmp $(LIBM_PATH)/libimf.a $(LIBIRC_PATH)/$(LIBIRC_NAME) $(SVML_PATH)/libsvml.a
  83. $(MAKE) -C tlibc/ -j4 2> /dev/null
  84. $(MKDIR) $(BUILD_DIR)/.libimf $(BUILD_DIR)/.libirc $(BUILD_DIR)/.compiler-rt $(BUILD_DIR)/.tlibc \
  85. $(BUILD_DIR)/.tlibthread $(BUILD_DIR)/.tsafecrt $(BUILD_DIR)/.tsetjmp
  86. $(RM) -f $(BUILD_DIR)/.libimf/* && cd $(BUILD_DIR)/.libimf && $(AR) x $(LIBM_PATH)/libimf.a
  87. $(RM) -f $(BUILD_DIR)/.libirc/* && cd $(BUILD_DIR)/.libirc && $(AR) x $(LIBIRC_PATH)/$(LIBIRC_NAME)
  88. $(RM) -f $(BUILD_DIR)/.compiler-rt/* && cd $(BUILD_DIR)/.compiler-rt && $(AR) x $(LINUX_SDK_DIR)/compiler-rt/libcompiler-rt.a
  89. $(RM) -f $(BUILD_DIR)/.tlibc/* && cd $(BUILD_DIR)/.tlibc && $(AR) x $(LINUX_SDK_DIR)/tlibc/libtlibc.a
  90. $(RM) -f $(BUILD_DIR)/.tlibthread/* && cd $(BUILD_DIR)/.tlibthread && $(AR) x $(LINUX_SDK_DIR)/tlibthread/libtlibthread.a
  91. $(RM) -f $(BUILD_DIR)/.tsafecrt/* && cd $(BUILD_DIR)/.tsafecrt && $(AR) x $(LINUX_SDK_DIR)/tsafecrt/libsgx_tsafecrt.a
  92. $(RM) -f $(BUILD_DIR)/.tsetjmp/* && cd $(BUILD_DIR)/.tsetjmp && $(AR) x $(LINUX_SDK_DIR)/tsetjmp/libsgx_tsetjmp.a
  93. $(CP) $(SVML_PATH)/libsvml.a $@
  94. $(AR) qD $@ $(BUILD_DIR)/.libimf/*.o
  95. $(AR) qD $@ $(BUILD_DIR)/.libirc/*.o
  96. $(AR) qD $@ $(BUILD_DIR)/.compiler-rt/*.o
  97. $(AR) qD $@ $(BUILD_DIR)/.tlibc/*.o
  98. $(AR) qD $@ $(BUILD_DIR)/.tlibthread/*.o
  99. $(AR) qD $@ $(BUILD_DIR)/.tsafecrt/*.o
  100. $(AR) qD $@ $(BUILD_DIR)/.tsetjmp/*.o
  101. @$(RM) -rf $(BUILD_DIR)/.libimf $(BUILD_DIR)/.libirc $(BUILD_DIR)/.compiler-rt $(BUILD_DIR)/.tlibc
  102. @$(RM) -rf $(BUILD_DIR)/.tlibthread $(BUILD_DIR)/.tsafecrt $(BUILD_DIR)/.tsetjmp
  103. .PHONY: tlibthread
  104. tlibthread:
  105. $(MAKE) -C tlibthread/
  106. .PHONY: tsafecrt
  107. tsafecrt:
  108. $(MAKE) -C tsafecrt/
  109. .PHONY: compiler-rt
  110. compiler-rt:
  111. $(MAKE) -C compiler-rt/ 2> /dev/null
  112. .PHONY: tsetjmp
  113. tsetjmp:
  114. $(MAKE) -C tsetjmp/
  115. # ---------------------------------------------------
  116. # tstdcxx
  117. # includes: cpprt, tlibstdcxx
  118. # ---------------------------------------------------
  119. .PHONY: tstdcxx
  120. tstdcxx: $(LIBTLIBCXX)
  121. $(LIBTLIBCXX): cpprt tlibstdcxx
  122. @$(MKDIR) $(BUILD_DIR)/.tlibstdcxx
  123. @$(RM) -f $(BUILD_DIR)/.tlibstdcxx/*
  124. @cd $(BUILD_DIR)/.tlibstdcxx && $(AR) x $(LINUX_SDK_DIR)/tlibstdcxx/libtlibstdcxx.a
  125. $(CP) $(LINUX_SDK_DIR)/cpprt/libcpprt.a $@
  126. $(AR) qD $@ $(BUILD_DIR)/.tlibstdcxx/*.o
  127. @$(RM) -rf $(BUILD_DIR)/.tlibstdcxx
  128. .PHONY: cpprt
  129. cpprt:
  130. $(MAKE) -C cpprt
  131. .PHONY: tlibstdcxx
  132. tlibstdcxx: $(BUILD_DIR)
  133. $(MAKE) -C tlibstdcxx/ 2> /dev/null
  134. $(CP) tlibstdcxx/README.sgx $(BUILD_DIR)/STLport_Changes_SGX.txt
  135. # ---------------------------------------------------
  136. # tcxx
  137. # includes: cpprt, tlibcxx
  138. # ---------------------------------------------------
  139. .PHONY: tcxx
  140. tcxx: $(LIBTCXX)
  141. $(LIBTCXX): cpprt tlibcxx
  142. @$(MKDIR) $(BUILD_DIR)/.tlibcxx
  143. @$(RM) -f $(BUILD_DIR)/.tlibcxx/*
  144. @cd $(BUILD_DIR)/.tlibcxx && $(AR) x $(LINUX_SDK_DIR)/tlibcxx/libcxx.a
  145. $(CP) $(LINUX_SDK_DIR)/cpprt/libcpprt.a $@
  146. $(AR) qD $@ $(BUILD_DIR)/.tlibcxx/*.o
  147. @$(RM) -rf $(BUILD_DIR)/.tlibcxx
  148. .PHONY: tlibcxx
  149. tlibcxx: $(BUILD_DIR)
  150. $(MAKE) -C tlibcxx/ 2> /dev/null
  151. $(CP) tlibcxx/README.sgx $(BUILD_DIR)/libc++_Changes_SGX.txt
  152. # ---------------------------------------------------
  153. # tservice
  154. # includes: selib, tseal, tae_service, ec_dh_lib
  155. # ---------------------------------------------------
  156. .PHONY: tservice
  157. tservice: $(LIBTSE)
  158. $(LIBTSE): selib tseal tae_service
  159. @$(MKDIR) $(BUILD_DIR)/.tservice
  160. @$(RM) -f $(BUILD_DIR)/.tservice/*
  161. cd $(BUILD_DIR)/.tservice && $(AR) x $(LINUX_SDK_DIR)/tseal/linux/libtSeal.a
  162. cd $(BUILD_DIR)/.tservice && $(AR) x $(LINUX_SDK_DIR)/tae_service/libtae_service.a
  163. $(CP) $(LINUX_SDK_DIR)/selib/linux/libselib.a $@
  164. $(AR) rsD $@ $(BUILD_DIR)/.tservice/*.o
  165. @$(RM) -rf $(BUILD_DIR)/.tservice
  166. .PHONY: selib
  167. selib:
  168. $(MAKE) -C selib/linux/
  169. .PHONY: tseal
  170. tseal:
  171. $(MAKE) -C tseal/linux/
  172. .PHONY: tae_service
  173. tae_service: edger8r
  174. $(MAKE) -C tae_service MODE=$(MODE)
  175. # ---------------------------------------------------
  176. # Other trusted libraries
  177. # ---------------------------------------------------
  178. .PHONY: trts
  179. trts:
  180. $(MAKE) -C trts/
  181. .PHONY: tcrypto
  182. tcrypto:
  183. $(MAKE) -C tlibcrypto/
  184. .PHONY: tkey_exchange
  185. tkey_exchange: edger8r
  186. $(MAKE) -C tkey_exchange
  187. .PHONY: tcmalloc
  188. tcmalloc:
  189. $(MAKE) -C gperftools/
  190. .PHONY: tprotected_fs
  191. tprotected_fs: edger8r
  192. $(MAKE) -C protected_fs/sgx_tprotected_fs
  193. .PHONY: sgx_pcl
  194. sgx_pcl:
  195. $(MAKE) -C protected_code_loader
  196. # ---------------------------------------------------
  197. # Untrusted libraries
  198. # ---------------------------------------------------
  199. .PHONY: ukey_exchange
  200. ukey_exchange:
  201. $(MAKE) -C ukey_exchange
  202. .PHONY: uprotected_fs
  203. uprotected_fs: edger8r
  204. $(MAKE) -C protected_fs/sgx_uprotected_fs
  205. .PHONY: ptrace
  206. ptrace:
  207. $(MAKE) -C debugger_interface/linux/
  208. .PHONY: sample_crypto
  209. sample_crypto:
  210. $(MAKE) -C sample_libcrypto
  211. # ---------------------------------------------------
  212. # standalone, untrusted libraries
  213. # ---------------------------------------------------
  214. .PHONY: libcapable
  215. libcapable:
  216. $(MAKE) -C libcapable/linux/
  217. # ---------------------------------------------------
  218. # simualtion libraries and tools
  219. # ---------------------------------------------------
  220. .PHONY: simulation
  221. simulation: edger8r
  222. $(MAKE) -C simulation/
  223. # ---------------------------------------------------
  224. # tools
  225. # ---------------------------------------------------
  226. .PHONY: signtool
  227. signtool:
  228. $(MAKE) -C sign_tool/SignTool/
  229. .PHONY: edger8r
  230. edger8r:
  231. $(MAKE) -C edger8r/linux/
  232. .PHONY: sgx_encrypt
  233. sgx_encrypt: tservice
  234. $(MAKE) -C encrypt_enclave
  235. $(BUILD_DIR):
  236. $(MKDIR) $@
  237. .PHONY: clean
  238. clean:
  239. $(MAKE) -C tlibc/ clean
  240. $(MAKE) -C tlibthread/ clean
  241. $(MAKE) -C compiler-rt/ clean
  242. $(MAKE) -C cpprt clean
  243. $(MAKE) -C tlibstdcxx/ clean
  244. $(MAKE) -C tlibcxx/ clean
  245. $(MAKE) -C tseal/linux/ clean
  246. $(MAKE) -C selib/linux/ clean
  247. $(MAKE) -C tae_service/ clean
  248. $(MAKE) -C trts/ clean
  249. $(MAKE) -C tsetjmp/ clean
  250. $(MAKE) -C tsafecrt/ clean
  251. $(MAKE) -C gperftools/ clean
  252. $(MAKE) -C tlibcrypto/ clean
  253. $(MAKE) -C tkey_exchange/ clean
  254. $(MAKE) -C ukey_exchange/ clean
  255. $(MAKE) -C protected_fs/sgx_tprotected_fs/ clean
  256. $(MAKE) -C protected_fs/sgx_uprotected_fs/ clean
  257. $(MAKE) -C debugger_interface/linux/ clean
  258. $(MAKE) -C sample_libcrypto/ clean
  259. $(MAKE) -C libcapable/linux/ clean
  260. $(MAKE) -C simulation/ clean
  261. $(MAKE) -C sign_tool/SignTool clean
  262. $(MAKE) -C edger8r/linux clean
  263. $(MAKE) -C protected_code_loader clean
  264. $(MAKE) -C encrypt_enclave clean
  265. @$(RM) $(LIBTLIBC) $(LIBTLIBCXX) $(LIBTSE)
  266. @$(RM) $(BUILD_DIR)/STLport_Changes_SGX.txt
  267. @$(RM) $(BUILD_DIR)/libc++_Changes_SGX.txt