You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

328 lines
9.9KB

  1. #!/usr/bin/make -f
  2. # Makefile for Cardinal #
  3. # --------------------- #
  4. # Created by falkTX
  5. #
  6. # --------------------------------------------------------------
  7. # Import base definitions
  8. DISTRHO_NAMESPACE = CardinalDISTRHO
  9. DGL_NAMESPACE = CardinalDGL
  10. USE_NANOVG_FBO = true
  11. WASM_EXCEPTIONS = true
  12. include ../dpf/Makefile.base.mk
  13. # --------------------------------------------------------------
  14. # Build config
  15. ifeq ($(BSD),true)
  16. SYSDEPS ?= true
  17. else
  18. SYSDEPS ?= false
  19. endif
  20. ifeq ($(SYSDEPS),true)
  21. DEP_PATH = $(abspath sysroot)
  22. else
  23. DEP_PATH = $(abspath ../src/Rack/dep)
  24. endif
  25. # --------------------------------------------------------------
  26. # custom build flags
  27. BASE_FLAGS += -I../include
  28. BASE_FLAGS += -I../include/simd-compat
  29. ifeq ($(HEADLESS),true)
  30. ifeq ($(WITH_LTO),true)
  31. BASE_FLAGS += -ffat-lto-objects
  32. endif
  33. endif
  34. ifneq ($(SYSDEPS),true)
  35. BASE_FLAGS += -DZSTDLIB_VISIBILITY=
  36. endif
  37. ifneq ($(HAIKU),true)
  38. ifneq ($(WASM),true)
  39. BASE_FLAGS += -pthread
  40. endif
  41. endif
  42. ifeq ($(WINDOWS),true)
  43. BASE_FLAGS += -D_USE_MATH_DEFINES
  44. BASE_FLAGS += -DWIN32_LEAN_AND_MEAN
  45. BASE_FLAGS += -I../include/mingw-compat
  46. BASE_FLAGS += -I../include/mingw-std-threads
  47. endif
  48. BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing
  49. BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing
  50. # Rack code is not tested for this flag, unset it
  51. BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS
  52. # --------------------------------------------------------------
  53. # override VCV arch.mk stuff so we can build more architectures
  54. ifeq ($(CPU_ARM32),true)
  55. ARCH_NAME = arm
  56. MACHINE = i686-the-rack
  57. else ifeq ($(CPU_ARM64),true)
  58. ARCH_NAME = arm64
  59. MACHINE = x86_64-the-rack
  60. else ifeq ($(CPU_RISCV64),true)
  61. ARCH_NAME = riscv64
  62. MACHINE = x86_64-the-rack
  63. else ifeq ($(WASM),true)
  64. MACHINE = i686-wasm
  65. else
  66. MACHINE = $(TARGET_MACHINE)
  67. endif
  68. ifeq ($(MACOS),true)
  69. MACHINE_SUFFIX = -darwin
  70. else ifeq ($(WINDOWS),true)
  71. MACHINE_SUFFIX = -mingw32
  72. else
  73. MACHINE_SUFFIX = -linux
  74. endif
  75. # --------------------------------------------------------------
  76. # Set up env to pass to cmake and configure
  77. ENV = env
  78. ENV += AR=$(AR)
  79. ENV += CC=$(CC)
  80. ENV += CXX=$(CXX)
  81. ENV += CFLAGS='$(BUILD_C_FLAGS)'
  82. ENV += CXXFLAGS='$(BUILD_CXX_FLAGS)'
  83. ENV += LDFLAGS='$(LINK_FLAGS)'
  84. # --------------------------------------------------------------
  85. # Fix up cmake
  86. SPACE =
  87. SPACE +=
  88. CMAKE = cmake
  89. CMAKE += -DCMAKE_INSTALL_LIBDIR=lib
  90. CMAKE += -DCMAKE_INSTALL_PREFIX='$(DEP_PATH)'
  91. CMAKE += -DBUILD_SHARED_LIBS=OFF
  92. # make sure debug/release matches
  93. ifeq ($(DEBUG),true)
  94. CMAKE += -DCMAKE_BUILD_TYPE=Debug
  95. else
  96. CMAKE += -DCMAKE_BUILD_TYPE=Release
  97. endif
  98. # make sure macOS target matches ours
  99. ifeq ($(MACOS),true)
  100. ifneq (,$(findstring -arch$(SPACE),$(CXXFLAGS)))
  101. CMAKE += -DCMAKE_OSX_ARCHITECTURES='$(subst $(SPACE),;,$(subst -arch=,,$(filter -arch=%,$(subst -arch$(SPACE),-arch=,$(CXXFLAGS)))))'
  102. else ifeq ($(CIBUILD),true)
  103. $(error CI build requires -arch flag on macOS)
  104. endif
  105. ifneq (,$(findstring -mmacosx-version-min=,$(CXXFLAGS)))
  106. export MACOSX_DEPLOYMENT_TARGET = $(subst -mmacosx-version-min=,,$(filter -mmacosx-version-min=%,$(CXXFLAGS)))
  107. CMAKE += -DCMAKE_OSX_DEPLOYMENT_TARGET=$(MACOSX_DEPLOYMENT_TARGET)
  108. else ifeq ($(CIBUILD),true)
  109. $(error CI build requires -mmacosx-version-min flag on macOS)
  110. endif
  111. CMAKE += -DCMAKE_OSX_SYSROOT="macosx"
  112. endif
  113. # fix emar and emranlib usage
  114. ifeq ($(WASM),true)
  115. CMAKE_AR = $(shell which $(AR))
  116. CMAKE_RANLIB = $(shell which $(RANLIB))
  117. CMAKE += -DCMAKE_AR=$(CMAKE_AR)
  118. CMAKE += -DCMAKE_C_COMPILER_AR=$(CMAKE_AR)
  119. CMAKE += -DCMAKE_CXX_COMPILER_AR=$(CMAKE_AR)
  120. CMAKE += -DCMAKE_RANLIB=$(CMAKE_RANLIB)
  121. CMAKE += -DCMAKE_C_COMPILER_RANLIB=$(CMAKE_RANLIB)
  122. CMAKE += -DCMAKE_CXX_COMPILER_RANLIB=$(CMAKE_RANLIB)
  123. ifeq ($(shell uname -s),Darwin)
  124. CMAKE += -DCMAKE_CROSSCOMPILING=ON
  125. CMAKE += -DCMAKE_SYSTEM_NAME=Generic
  126. endif
  127. endif
  128. # fix cross-compilation for windows
  129. ifeq ($(WINDOWS),true)
  130. CMAKE += -G 'Unix Makefiles'
  131. CMAKE += -DCMAKE_RC_COMPILER=$(subst gcc,windres,$(CC))
  132. CMAKE += -DCMAKE_SYSTEM_NAME=Windows
  133. endif
  134. # --------------------------------------------------------------
  135. # Fix up configure
  136. CONFIGURE = ./configure
  137. CONFIGURE += --prefix="$(DEP_PATH)"
  138. CONFIGURE += --host=$(TARGET_MACHINE)
  139. CONFIGURE += --enable-static
  140. CONFIGURE += --disable-shared
  141. # NOTE libsamplerate wants to link against alsa, so we disable that
  142. CONFIGURE += --disable-alsa
  143. # NOTE speex fails to build when neon is enabled, so we disable that
  144. CONFIGURE += --disable-neon
  145. # NOTE libsamplerate fails with invalid host, so we force ac_cv_host
  146. CONFIGURE += ac_cv_host=$(TARGET_MACHINE)
  147. # --------------------------------------------------------------
  148. # Fix up make
  149. DEP_MAKE = $(MAKE)
  150. DEP_MAKE += ARCH_NAME=$(ARCH_NAME)
  151. DEP_MAKE += AR=$(AR)
  152. DEP_MAKE += CC=$(CC)
  153. DEP_MAKE += CXX=$(CXX)
  154. DEP_MAKE += CFLAGS="$(BUILD_C_FLAGS)"
  155. DEP_MAKE += CXXFLAGS="$(BUILD_CXX_FLAGS)"
  156. DEP_MAKE += LDFLAGS="$(LINK_FLAGS)"
  157. DEP_MAKE += DEP_FLAGS="$(BASE_FLAGS)"
  158. DEP_MAKE += DEP_MAC_SDK_FLAGS=
  159. DEP_MAKE += MACHINE=$(MACHINE)$(MACHINE_SUFFIX)
  160. DEP_MAKE += VERBOSE=1
  161. ifeq ($(shell uname -s),Darwin)
  162. ifeq ($(CIBUILD),true)
  163. DEP_MAKE += SHA256SUM="shasum5.30 -a 256"
  164. else
  165. DEP_MAKE += SHA256SUM="shasum5.30 -a 256"
  166. endif
  167. endif
  168. DEP_MAKE2 = $(DEP_MAKE)
  169. DEP_MAKE2 += CMAKE="$(ENV) $(CMAKE)"
  170. DEP_MAKE2 += CONFIGURE="$(ENV) $(CONFIGURE)"
  171. # --------------------------------------------------------------
  172. # Rack internal dependencies target
  173. $(DEP_PATH)/lib/%.a:
  174. $(DEP_MAKE2) -C $(DEP_PATH) lib/$*.a
  175. $(DEP_PATH)/jansson-2.12:
  176. $(DEP_MAKE2) -C $(DEP_PATH) jansson-2.12
  177. # libarchive: skip shared lib and ensure libzstd is enabled
  178. $(DEP_PATH)/lib/libarchive.a: $(DEP_PATH)/lib/libzstd.a $(DEP_PATH)/libarchive-3.4.3/.stamp-patched
  179. $(DEP_PATH)/lib/libarchive_static.a: $(DEP_PATH)/lib/libzstd.a $(DEP_PATH)/libarchive-3.4.3/.stamp-patched
  180. $(DEP_PATH)/libarchive-3.4.3/.stamp-patched:
  181. $(DEP_MAKE2) -C $(DEP_PATH) libarchive-3.4.3
  182. sed -i -e "618,625d" $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt
  183. awk 'NR==616{print " SET(HAVE_LIBZSTD 1)"}1' $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt > $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt2
  184. mv $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt2 $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt
  185. sed -i -e "238,243d" $(DEP_PATH)/libarchive-3.4.3/libarchive/CMakeLists.txt
  186. sed -i -e "s/TARGETS archive archive_static/TARGETS archive_static/" $(DEP_PATH)/libarchive-3.4.3/libarchive/CMakeLists.txt
  187. touch $@
  188. # libsamplerate: skip tests, fails to build in some systems and are not needed or wanted anyway
  189. $(DEP_PATH)/lib/libsamplerate.a: $(DEP_PATH)/libsamplerate-0.1.9/.stamp-patched
  190. $(DEP_PATH)/libsamplerate-0.1.9/.stamp-patched:
  191. $(DEP_MAKE2) -C $(DEP_PATH) libsamplerate-0.1.9
  192. sed -i -e "s/src doc examples tests/src/" $(DEP_PATH)/libsamplerate-0.1.9/Makefile.in
  193. touch $@
  194. # libspeexdsp: hide symbols
  195. $(DEP_PATH)/lib/libspeexdsp.a: $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/.stamp-patched
  196. $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/.stamp-patched:
  197. $(DEP_MAKE2) -C $(DEP_PATH) speexdsp-SpeexDSP-1.2rc3 \
  198. WGET="wget -c http://downloads.xiph.org/releases/speex/speexdsp-1.2rc3.tar.gz && mv speexdsp-1.2rc3.tar.gz speexdsp-SpeexDSP-1.2rc3.tgz #" \
  199. SHA256SUM="true" \
  200. UNTAR="mkdir -p speexdsp-SpeexDSP-1.2rc3 && tar -x --strip-components=1 --directory=$(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3 -f"
  201. sed -i -e "s/#pragma GCC visibility push/#error we dont want this/" $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/configure
  202. touch $@
  203. # custom zstd build for only building static libs
  204. $(DEP_PATH)/lib/libzstd.a: $(DEP_PATH)/zstd-1.4.5/.stamp-patched
  205. cd $(DEP_PATH)/zstd-1.4.5/build/cmake && $(CMAKE) -DZSTD_BUILD_STATIC=ON -DZSTD_BUILD_PROGRAMS=OFF -DZSTD_BUILD_SHARED=OFF -DZSTD_MULTITHREAD_SUPPORT=OFF .
  206. $(DEP_MAKE2) -C $(DEP_PATH)/zstd-1.4.5/build/cmake
  207. $(DEP_MAKE2) -C $(DEP_PATH)/zstd-1.4.5/build/cmake install
  208. # zstd cmake is borked, see https://github.com/facebook/zstd/issues/1401
  209. # zstd also fails to build on old systems, patch that too
  210. $(DEP_PATH)/zstd-1.4.5/.stamp-patched:
  211. $(DEP_MAKE2) -C $(DEP_PATH) zstd-1.4.5
  212. sed -i -e "56,66d" $(DEP_PATH)/zstd-1.4.5/build/cmake/CMakeModules/AddZstdCompilationFlags.cmake
  213. sed -i -e "146,175d" $(DEP_PATH)/zstd-1.4.5/programs/util.c
  214. sed -i -e "142,144d" $(DEP_PATH)/zstd-1.4.5/programs/util.c
  215. touch $@
  216. # --------------------------------------------------------------
  217. # QuickJS target, needed for AriaModules
  218. QUICKJS_MAKE_FLAGS = CFLAGS="$(BUILD_C_FLAGS) -D_GNU_SOURCE -DCONFIG_VERSION='\"Cardinal\"' -w"
  219. QUICKJS_MAKE_FLAGS += PROGS=libquickjs.a
  220. ifeq ($(WITH_LTO),true)
  221. QUICKJS_MAKE_FLAGS += CONFIG_LTO=y
  222. else
  223. QUICKJS_MAKE_FLAGS += CONFIG_LTO=
  224. endif
  225. ifeq ($(WINDOWS),true)
  226. QUICKJS_MAKE_FLAGS += CONFIG_WIN32=y
  227. else ifeq ($(MACOS),true)
  228. QUICKJS_MAKE_FLAGS += CONFIG_DARWIN=y
  229. endif
  230. $(DEP_PATH)/lib/libquickjs.a:
  231. $(DEP_MAKE) $(QUICKJS_MAKE_FLAGS) -C $(CURDIR)/QuickJS
  232. install -d $(DEP_PATH)/include
  233. install -d $(DEP_PATH)/lib
  234. install -m644 $(CURDIR)/QuickJS/libquickjs.a $@
  235. install -m644 $(CURDIR)/QuickJS/quickjs.h $(DEP_PATH)/include/quickjs.h
  236. # --------------------------------------------------------------
  237. # Build targets
  238. TARGETS += $(DEP_PATH)/lib/libjansson.a
  239. TARGETS += $(DEP_PATH)/lib/libquickjs.a
  240. TARGETS += $(DEP_PATH)/lib/libsamplerate.a
  241. TARGETS += $(DEP_PATH)/lib/libspeexdsp.a
  242. ifeq ($(WINDOWS),true)
  243. TARGETS += $(DEP_PATH)/lib/libarchive_static.a
  244. else
  245. TARGETS += $(DEP_PATH)/lib/libarchive.a
  246. endif
  247. TARGETS += $(DEP_PATH)/lib/libzstd.a
  248. all: $(TARGETS)
  249. clean:
  250. $(DEP_MAKE) $(QUICKJS_MAKE_FLAGS) -C $(CURDIR)/QuickJS clean
  251. rm -f $(TARGETS)
  252. rm -f $(DEP_PATH)/*.tgz
  253. rm -f $(DEP_PATH)/*.tar.gz
  254. rm -rf $(DEP_PATH)/bin
  255. rm -rf $(DEP_PATH)/include
  256. rm -rf $(DEP_PATH)/lib
  257. rm -rf $(DEP_PATH)/share
  258. rm -rf $(DEP_PATH)/jansson-2.12
  259. rm -rf $(DEP_PATH)/libarchive-3.4.3
  260. rm -rf $(DEP_PATH)/libsamplerate-0.1.9
  261. rm -rf $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3
  262. rm -rf $(DEP_PATH)/zstd-1.4.5
  263. download: \
  264. $(DEP_PATH)/jansson-2.12 \
  265. $(DEP_PATH)/libarchive-3.4.3/.stamp-patched \
  266. $(DEP_PATH)/libsamplerate-0.1.9/.stamp-patched \
  267. $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/.stamp-patched \
  268. $(DEP_PATH)/zstd-1.4.5/.stamp-patched
  269. quickjs: $(DEP_PATH)/lib/libquickjs.a
  270. # --------------------------------------------------------------