|
- #!/usr/bin/make -f
- # Makefile for Cardinal #
- # --------------------- #
- # Created by falkTX
- #
-
- DEP_PATH = $(abspath ../src/Rack/dep)
-
- # --------------------------------------------------------------
- # Import base definitions
-
- include ../dpf/Makefile.base.mk
-
- # --------------------------------------------------------------
- # custom build flags
-
- BASE_FLAGS += -DZSTDLIB_VISIBILITY=
- BASE_FLAGS += -I../include
- BASE_FLAGS += -I../include/neon-compat
-
- ifeq ($(HEADLESS),true)
- ifeq ($(WITH_LTO),true)
- BASE_FLAGS += -ffat-lto-objects
- endif
- endif
-
- ifeq ($(WASM),true)
- BASE_FLAGS += -msse -msse2 -msse3 -msimd128
- else
- BASE_FLAGS += -pthread
- endif
-
- ifeq ($(WINDOWS),true)
- BASE_FLAGS += -D_USE_MATH_DEFINES
- BASE_FLAGS += -DWIN32_LEAN_AND_MEAN
- BASE_FLAGS += -I../include/mingw-compat
- BASE_FLAGS += -I../include/mingw-std-threads
- endif
-
- BUILD_C_FLAGS += -fno-finite-math-only
- BUILD_CXX_FLAGS += -fno-finite-math-only
-
- # --------------------------------------------------------------
- # override VCV arch.mk stuff so we can build more architectures
-
- ifeq ($(CPU_AARCH64),true)
- ARCH_NAME = aarch64
- MACHINE = x86_64-the-rack
- else ifeq ($(CPU_ARM64),true)
- ARCH_NAME = arm64
- MACHINE = x86_64-the-rack
- else ifeq ($(CPU_ARM),true)
- ARCH_NAME = arm
- MACHINE = i686-the-rack
- else ifeq ($(WASM),true)
- MACHINE = i686-wasm
- else
- MACHINE = $(TARGET_MACHINE)
- endif
-
- ifeq ($(MACOS),true)
- MACHINE_SUFFIX = -darwin
- else ifeq ($(WINDOWS),true)
- MACHINE_SUFFIX = -mingw32
- else
- MACHINE_SUFFIX = -linux
- endif
-
- # --------------------------------------------------------------
- # Fix up cmake
-
- SPACE =
- SPACE +=
-
- CMAKE = cmake
-
- CMAKE += -DCMAKE_INSTALL_LIBDIR=lib
- CMAKE += -DCMAKE_INSTALL_PREFIX='$(DEP_PATH)'
- CMAKE += -DBUILD_SHARED_LIBS=OFF
-
- # make sure macOS target matches ours
- ifneq (,$(findstring -arch$(SPACE),$(CXXFLAGS)))
- CMAKE += -DCMAKE_OSX_ARCHITECTURES='$(subst $(SPACE),;,$(subst -arch=,,$(filter -arch=%,$(subst -arch$(SPACE),-arch=,$(CXXFLAGS)))))'
- endif
- ifneq (,$(findstring -mmacosx-version-min=,$(CXXFLAGS)))
- CMAKE += -DCMAKE_OSX_DEPLOYMENT_TARGET=$(subst -mmacosx-version-min=,,$(filter -mmacosx-version-min=%,$(CXXFLAGS)))
- endif
-
- # make sure debug/release matches
- ifeq ($(DEBUG),true)
- CMAKE += -DCMAKE_BUILD_TYPE=Debug
- else
- CMAKE += -DCMAKE_BUILD_TYPE=Release
- endif
-
- # fix cross-compilation for windows
- ifeq ($(WINDOWS),true)
- CMAKE += -G 'Unix Makefiles'
- CMAKE += -DCMAKE_RC_COMPILER=$(subst gcc,windres,$(CC))
- CMAKE += -DCMAKE_SYSTEM_NAME=Windows
- endif
-
- # --------------------------------------------------------------
- # Fix up configure
-
- CONFIGURE = ./configure
- CONFIGURE += --prefix="$(DEP_PATH)"
- CONFIGURE += --host=$(TARGET_MACHINE)
- CONFIGURE += --enable-static
- CONFIGURE += --disable-shared
- # NOTE libsamplerate wants to link against alsa, so we disable that
- CONFIGURE += --disable-alsa
- # NOTE speex fails to build when neon is enabled, so we disable that
- CONFIGURE += --disable-neon
- # NOTE libsamplerate fails with invalid host, so we force ac_cv_host
- CONFIGURE += ac_cv_host=$(TARGET_MACHINE)
-
- # --------------------------------------------------------------
- # Fix up make
-
- DEP_MAKE = $(MAKE)
- DEP_MAKE += ARCH_NAME=$(ARCH_NAME)
- DEP_MAKE += CC=$(CC)
- DEP_MAKE += CXX=$(CXX)
- DEP_MAKE += CFLAGS="$(BUILD_C_FLAGS)"
- DEP_MAKE += CXXFLAGS="$(BUILD_CXX_FLAGS)"
- DEP_MAKE += LDFLAGS="$(LINK_FLAGS)"
- DEP_MAKE += CMAKE="$(CMAKE)"
- DEP_MAKE += CONFIGURE="$(CONFIGURE)"
- DEP_MAKE += DEP_FLAGS="$(BASE_FLAGS)"
- DEP_MAKE += DEP_MAC_SDK_FLAGS=
- DEP_MAKE += MACHINE=$(MACHINE)$(MACHINE_SUFFIX)
-
- ifeq ($(MACOS),true)
- DEP_MAKE += SHA256SUM="shasum5.28 -a 256"
- endif
-
- # --------------------------------------------------------------
- # Rack internal dependencies target
-
- $(DEP_PATH)/lib/%.a:
- $(DEP_MAKE) -C $(DEP_PATH) lib/$*.a
-
- # libarchive: skip shared lib and ensure libzstd is enabled
- $(DEP_PATH)/lib/libarchive.a: $(DEP_PATH)/lib/libzstd.a $(DEP_PATH)/libarchive-3.4.3/.stamp-patched
-
- $(DEP_PATH)/lib/libarchive_static.a: $(DEP_PATH)/lib/libzstd.a $(DEP_PATH)/libarchive-3.4.3/.stamp-patched
-
- $(DEP_PATH)/libarchive-3.4.3/.stamp-patched:
- $(DEP_MAKE) -C $(DEP_PATH) libarchive-3.4.3
- sed -i -e "618,625d" $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt
- 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
- mv $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt2 $(DEP_PATH)/libarchive-3.4.3/CMakeLists.txt
- sed -i -e "238,243d" $(DEP_PATH)/libarchive-3.4.3/libarchive/CMakeLists.txt
- sed -i -e "s/TARGETS archive archive_static/TARGETS archive_static/" $(DEP_PATH)/libarchive-3.4.3/libarchive/CMakeLists.txt
- touch $@
-
- # libsamplerate: skip tests, fails to build in some systems and are not needed or wanted anyway
- $(DEP_PATH)/lib/libsamplerate.a: $(DEP_PATH)/libsamplerate-0.1.9/.stamp-patched
-
- $(DEP_PATH)/libsamplerate-0.1.9/.stamp-patched:
- $(DEP_MAKE) -C $(DEP_PATH) libsamplerate-0.1.9
- sed -i -e "s/src doc examples tests/src/" $(DEP_PATH)/libsamplerate-0.1.9/Makefile.in
- touch $@
-
- # libspeexdsp: hide symbols
- $(DEP_PATH)/lib/libspeexdsp.a: $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/.stamp-patched
-
- $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/.stamp-patched:
- $(DEP_MAKE) -C $(DEP_PATH) speexdsp-SpeexDSP-1.2rc3
- sed -i -e "s/#pragma GCC visibility push/#error we dont want this/" $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3/configure
- touch $@
-
- # zstd cmake is borked, see https://github.com/facebook/zstd/issues/1401
- # zstd also fails to build on old systems, patch that too
- $(DEP_PATH)/lib/libzstd.a: $(DEP_PATH)/zstd-1.4.5/.stamp-patched
-
- $(DEP_PATH)/zstd-1.4.5/.stamp-patched:
- $(DEP_MAKE) -C $(DEP_PATH) zstd-1.4.5
- sed -i -e "56,66d" $(DEP_PATH)/zstd-1.4.5/build/cmake/CMakeModules/AddZstdCompilationFlags.cmake
- sed -i -e "146,175d" $(DEP_PATH)/zstd-1.4.5/programs/util.c
- sed -i -e "142,144d" $(DEP_PATH)/zstd-1.4.5/programs/util.c
- touch $@
-
- # --------------------------------------------------------------
- # QuickJS target, needed for AriaModules
-
- QUICKJS_MAKE_FLAGS = CFLAGS="$(BUILD_C_FLAGS) -D_GNU_SOURCE -DCONFIG_VERSION='\"Cardinal\"' -w"
- QUICKJS_MAKE_FLAGS += PROGS=libquickjs.a
-
- ifeq ($(WITH_LTO),true)
- QUICKJS_MAKE_FLAGS += CONFIG_LTO=y
- else
- QUICKJS_MAKE_FLAGS += CONFIG_LTO=n
- endif
-
- ifeq ($(WINDOWS),true)
- QUICKJS_MAKE_FLAGS += CONFIG_WIN32=y
- else ifeq ($(MACOS),true)
- QUICKJS_MAKE_FLAGS += CONFIG_DARWIN=y
- endif
-
- $(DEP_PATH)/lib/libquickjs.a:
- $(DEP_MAKE) $(QUICKJS_MAKE_FLAGS) -C $(CURDIR)/QuickJS
- install -d $(DEP_PATH)/include
- install -d $(DEP_PATH)/lib
- install -m644 $(CURDIR)/QuickJS/libquickjs.a $@
- install -m644 $(CURDIR)/QuickJS/quickjs.h $(DEP_PATH)/include/quickjs.h
-
- # --------------------------------------------------------------
- # Build targets
-
- TARGETS += $(DEP_PATH)/lib/libjansson.a
- TARGETS += $(DEP_PATH)/lib/libquickjs.a
- TARGETS += $(DEP_PATH)/lib/libsamplerate.a
- TARGETS += $(DEP_PATH)/lib/libspeexdsp.a
-
- ifeq ($(WINDOWS),true)
- TARGETS += $(DEP_PATH)/lib/libarchive_static.a
- else
- TARGETS += $(DEP_PATH)/lib/libarchive.a
- endif
-
- TARGETS += $(DEP_PATH)/lib/libzstd.a
-
- all: $(TARGETS)
-
- clean:
- rm -f $(TARGETS)
- rm -f $(DEP_PATH)/*.tgz
- rm -f $(DEP_PATH)/*.tar.gz
- rm -rf $(DEP_PATH)/bin
- rm -rf $(DEP_PATH)/include
- rm -rf $(DEP_PATH)/lib
- rm -rf $(DEP_PATH)/share
- rm -rf $(DEP_PATH)/jansson-2.12
- rm -rf $(DEP_PATH)/libarchive-3.4.3
- rm -rf $(DEP_PATH)/libsamplerate-0.1.9
- rm -rf $(DEP_PATH)/speexdsp-SpeexDSP-1.2rc3
- rm -rf $(DEP_PATH)/zstd-1.4.5
- rm -rf $(DEP_PATH)/QuickJS
-
- quickjs: $(DEP_PATH)/lib/libquickjs.a
-
- # --------------------------------------------------------------
|