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.

246 lines
7.5KB

  1. #!/usr/bin/make -f
  2. # Makefile for Cardinal #
  3. # --------------------- #
  4. # Created by falkTX
  5. #
  6. DEP_PATH = $(abspath ../src/Rack/dep)
  7. # --------------------------------------------------------------
  8. # Import base definitions
  9. USE_NANOVG_FBO = true
  10. include ../dpf/Makefile.base.mk
  11. # --------------------------------------------------------------
  12. # custom build flags
  13. BASE_FLAGS += -DZSTDLIB_VISIBILITY=
  14. BASE_FLAGS += -I../include
  15. BASE_FLAGS += -I../include/neon-compat
  16. ifeq ($(WASM),true)
  17. BASE_FLAGS += -msse -msse2 -msse3 -msimd128
  18. else
  19. BASE_FLAGS += -pthread
  20. endif
  21. ifeq ($(WINDOWS),true)
  22. BASE_FLAGS += -D_USE_MATH_DEFINES
  23. BASE_FLAGS += -DWIN32_LEAN_AND_MEAN
  24. BASE_FLAGS += -I../include/mingw-compat
  25. BASE_FLAGS += -I../include/mingw-std-threads
  26. endif
  27. ifeq ($(WITH_LTO),true)
  28. BASE_FLAGS += -fno-strict-aliasing -flto
  29. LINK_FLAGS += -fno-strict-aliasing -flto -Werror=odr -Werror=lto-type-mismatch
  30. endif
  31. BUILD_C_FLAGS += -fno-finite-math-only
  32. BUILD_CXX_FLAGS += -fno-finite-math-only
  33. # --------------------------------------------------------------
  34. # override VCV arch.mk stuff so we can build more architectures
  35. ifeq ($(CPU_AARCH64),true)
  36. ARCH_NAME = aarch64
  37. MACHINE = x86_64-the-rack
  38. else ifeq ($(CPU_ARM64),true)
  39. ARCH_NAME = arm64
  40. MACHINE = x86_64-the-rack
  41. else ifeq ($(CPU_ARM),true)
  42. ARCH_NAME = arm
  43. MACHINE = i686-the-rack
  44. else ifeq ($(WASM),true)
  45. MACHINE = i686-wasm
  46. else
  47. MACHINE = $(TARGET_MACHINE)
  48. endif
  49. ifeq ($(MACOS),true)
  50. MACHINE_SUFFIX = -darwin
  51. else ifeq ($(WINDOWS),true)
  52. MACHINE_SUFFIX = -mingw32
  53. else
  54. MACHINE_SUFFIX = -linux
  55. endif
  56. # --------------------------------------------------------------
  57. # Fix up cmake
  58. SPACE =
  59. SPACE +=
  60. CMAKE = cmake
  61. CMAKE += -DCMAKE_INSTALL_LIBDIR=lib
  62. CMAKE += -DCMAKE_INSTALL_PREFIX='$(DEP_PATH)'
  63. CMAKE += -DBUILD_SHARED_LIBS=OFF
  64. # make sure macOS target matches ours
  65. ifneq (,$(findstring -arch$(SPACE),$(CXXFLAGS)))
  66. CMAKE += -DCMAKE_OSX_ARCHITECTURES='$(subst $(SPACE),;,$(subst -arch=,,$(filter -arch=%,$(subst -arch$(SPACE),-arch=,$(CXXFLAGS)))))'
  67. endif
  68. ifneq (,$(findstring -mmacosx-version-min=,$(CXXFLAGS)))
  69. CMAKE += -DCMAKE_OSX_DEPLOYMENT_TARGET=$(subst -mmacosx-version-min=,,$(filter -mmacosx-version-min=%,$(CXXFLAGS)))
  70. endif
  71. # make sure debug/release matches
  72. ifeq ($(DEBUG),true)
  73. CMAKE += -DCMAKE_BUILD_TYPE=Debug
  74. else
  75. CMAKE += -DCMAKE_BUILD_TYPE=Release
  76. endif
  77. # fix cross-compilation for windows
  78. ifeq ($(WINDOWS),true)
  79. CMAKE += -G 'Unix Makefiles'
  80. CMAKE += -DCMAKE_RC_COMPILER=$(subst gcc,windres,$(CC))
  81. CMAKE += -DCMAKE_SYSTEM_NAME=Windows
  82. endif
  83. # --------------------------------------------------------------
  84. # Fix up configure
  85. CONFIGURE = ./configure
  86. CONFIGURE += --prefix="$(DEP_PATH)"
  87. CONFIGURE += --host=$(TARGET_MACHINE)
  88. CONFIGURE += --enable-static
  89. CONFIGURE += --disable-shared
  90. # NOTE libsamplerate wants to link against alsa, so we disable that
  91. CONFIGURE += --disable-alsa
  92. # NOTE speex fails to build when neon is enabled, so we disable that
  93. CONFIGURE += --disable-neon
  94. # NOTE libsamplerate fails with invalid host, so we force ac_cv_host
  95. CONFIGURE += ac_cv_host=$(TARGET_MACHINE)
  96. # --------------------------------------------------------------
  97. # Fix up make
  98. DEP_MAKE = $(MAKE)
  99. DEP_MAKE += ARCH_NAME=$(ARCH_NAME)
  100. DEP_MAKE += CC=$(CC)
  101. DEP_MAKE += CXX=$(CXX)
  102. DEP_MAKE += CFLAGS="$(BUILD_C_FLAGS)"
  103. DEP_MAKE += CXXFLAGS="$(BUILD_CXX_FLAGS)"
  104. DEP_MAKE += LDFLAGS="$(LINK_FLAGS)"
  105. DEP_MAKE += CMAKE="$(CMAKE)"
  106. DEP_MAKE += CONFIGURE="$(CONFIGURE)"
  107. DEP_MAKE += DEP_FLAGS="$(BASE_FLAGS)"
  108. DEP_MAKE += DEP_MAC_SDK_FLAGS=
  109. DEP_MAKE += MACHINE=$(MACHINE)$(MACHINE_SUFFIX)
  110. # --------------------------------------------------------------
  111. # Rack internal dependencies target
  112. $(DEP_PATH)/lib/%.a:
  113. $(DEP_MAKE) -C $(DEP_PATH) lib/$*.a
  114. # libarchive: skip shared lib and ensure libzstd is enabled
  115. $(DEP_PATH)/lib/libarchive.a: $(DEP_PATH)/lib/libzstd.a $(DEP_PATH)/libarchive-3.4.3/.stamp-patched
  116. $(DEP_PATH)/lib/libarchive_static.a: $(DEP_PATH)/lib/libzstd.a $(DEP_PATH)/libarchive-3.4.3/.stamp-patched
  117. $(DEP_PATH)/libarchive-3.4.3/.stamp-patched:
  118. $(DEP_MAKE) -C $(DEP_PATH) libarchive-3.4.3
  119. sed -i -e "618,625d" $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt
  120. 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
  121. mv $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt2 $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt
  122. sed -i -e "238,243d" $(DEP_PATH)/libarchive-3.4.3/libarchive/CMakeLists.txt
  123. sed -i -e "s/TARGETS archive archive_static/TARGETS archive_static/" $(DEP_PATH)/libarchive-3.4.3/libarchive/CMakeLists.txt
  124. touch $@
  125. # libsamplerate: skip tests, fails to build in some systems and are not needed or wanted anyway
  126. $(DEP_PATH)/lib/libsamplerate.a: $(DEP_PATH)/libsamplerate-0.1.9/.stamp-patched
  127. $(DEP_PATH)/libsamplerate-0.1.9/.stamp-patched:
  128. $(DEP_MAKE) -C $(DEP_PATH) libsamplerate-0.1.9
  129. sed -i -e "s/src doc examples tests/src/" $(DEP_PATH)/libsamplerate-0.1.9/Makefile.in
  130. touch $@
  131. # libspeexdsp: hide symbols
  132. $(DEP_PATH)/lib/libspeexdsp.a: $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/.stamp-patched
  133. $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/.stamp-patched:
  134. $(DEP_MAKE) -C $(DEP_PATH) speexdsp-SpeexDSP-1.2rc3
  135. sed -i -e "s/#pragma GCC visibility push/#error we dont want this/" $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/configure
  136. touch $@
  137. # zstd cmake is borked, see https://github.com/facebook/zstd/issues/1401
  138. # zstd also fails to build on old systems, patch that too
  139. $(DEP_PATH)/lib/libzstd.a: $(DEP_PATH)/zstd-1.4.5/.stamp-patched
  140. $(DEP_PATH)/zstd-1.4.5/.stamp-patched:
  141. $(DEP_MAKE) -C $(DEP_PATH) zstd-1.4.5
  142. sed -i -e "56,66d" $(DEP_PATH)/zstd-1.4.5/build/cmake/CMakeModules/AddZstdCompilationFlags.cmake
  143. sed -i -e "146,175d" $(DEP_PATH)/zstd-1.4.5/programs/util.c
  144. sed -i -e "142,144d" $(DEP_PATH)/zstd-1.4.5/programs/util.c
  145. touch $@
  146. # --------------------------------------------------------------
  147. # QuickJS target, needed for AriaModules
  148. QUICKJS_MAKE_FLAGS = CFLAGS="$(BUILD_C_FLAGS) -D_GNU_SOURCE -DCONFIG_VERSION='\"Cardinal\"' -w"
  149. QUICKJS_MAKE_FLAGS += PROGS=libquickjs.a
  150. ifeq ($(WITH_LTO),true)
  151. QUICKJS_MAKE_FLAGS += CONFIG_LTO=y
  152. else
  153. QUICKJS_MAKE_FLAGS += CONFIG_LTO=n
  154. endif
  155. ifeq ($(WINDOWS),true)
  156. QUICKJS_MAKE_FLAGS += CONFIG_WIN32=y
  157. else ifeq ($(MACOS),true)
  158. QUICKJS_MAKE_FLAGS += CONFIG_DARWIN=y
  159. endif
  160. $(DEP_PATH)/lib/libquickjs.a: $(DEP_PATH)/QuickJS
  161. $(DEP_MAKE) $(QUICKJS_MAKE_FLAGS) -C $(DEP_PATH)/QuickJS
  162. install -d $(DEP_PATH)/include
  163. install -d $(DEP_PATH)/lib
  164. install -m644 $(DEP_PATH)/QuickJS/libquickjs.a $@
  165. install -m644 $(DEP_PATH)/QuickJS/quickjs.h $(DEP_PATH)/include/quickjs.h
  166. $(DEP_PATH)/QuickJS:
  167. git clone "https://github.com/JerrySievert/QuickJS.git" $(DEP_PATH)/QuickJS
  168. git -C $(DEP_PATH)/QuickJS checkout b70d5344013836544631c361ae20569b978176c9
  169. # --------------------------------------------------------------
  170. # Build targets
  171. TARGETS += $(DEP_PATH)/lib/libjansson.a
  172. TARGETS += $(DEP_PATH)/lib/libquickjs.a
  173. TARGETS += $(DEP_PATH)/lib/libsamplerate.a
  174. TARGETS += $(DEP_PATH)/lib/libspeexdsp.a
  175. ifeq ($(WINDOWS),true)
  176. TARGETS += $(DEP_PATH)/lib/libarchive_static.a
  177. else
  178. TARGETS += $(DEP_PATH)/lib/libarchive.a
  179. endif
  180. TARGETS += $(DEP_PATH)/lib/libzstd.a
  181. all: $(TARGETS)
  182. clean:
  183. rm -f $(TARGETS)
  184. rm -f $(DEP_PATH)/*.tgz
  185. rm -f $(DEP_PATH)/*.tar.gz
  186. rm -rf $(DEP_PATH)/bin
  187. rm -rf $(DEP_PATH)/include
  188. rm -rf $(DEP_PATH)/lib
  189. rm -rf $(DEP_PATH)/share
  190. rm -rf $(DEP_PATH)/jansson-2.12
  191. rm -rf $(DEP_PATH)/libarchive-3.4.3
  192. rm -rf $(DEP_PATH)/libsamplerate-0.1.9
  193. rm -rf $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3
  194. rm -rf $(DEP_PATH)/zstd-1.4.5
  195. rm -rf $(DEP_PATH)/QuickJS
  196. quickjs: $(DEP_PATH)/lib/libquickjs.a
  197. # --------------------------------------------------------------