diff --git a/build/win/release/64/config_double.sh b/build/win/release/64/config_double.sh index 1bbaaf74bc..340c8232f8 100644 --- a/build/win/release/64/config_double.sh +++ b/build/win/release/64/config_double.sh @@ -6,6 +6,7 @@ SUBDIR=$(echo $BUILD | tr '[:upper:]' '[:lower:]') ARCH=$(echo $MSYSTEM | cut -c6-) TYPE="double" ROOT="/opt/local/pd/mingw${ARCH}/${SUBDIR}/${TYPE}" +export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig cmake -G Ninja \ -DCMAKE_BUILD_TYPE=$BUILD \ diff --git a/build/win/release/64/config_single.sh b/build/win/release/64/config_single.sh index 17007a4603..21c81e9c46 100644 --- a/build/win/release/64/config_single.sh +++ b/build/win/release/64/config_single.sh @@ -6,6 +6,7 @@ SUBDIR=$(echo $BUILD | tr '[:upper:]' '[:lower:]') ARCH=$(echo $MSYSTEM | cut -c6-) TYPE="single" ROOT="/opt/local/pd/mingw${ARCH}/${SUBDIR}/${TYPE}" +export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig cmake -G Ninja \ -DCMAKE_BUILD_TYPE=$BUILD \ diff --git a/ceammc/distrib/win/fix_dll_deps.py b/ceammc/distrib/win/fix_dll_deps.py index 181af08628..e9a7ae3474 100644 --- a/ceammc/distrib/win/fix_dll_deps.py +++ b/ceammc/distrib/win/fix_dll_deps.py @@ -8,8 +8,10 @@ OBJDUMP_BIN = "@OBJDUMP_EXE@" MINGW_PREFIX = b"@CEAMMC_MINGW_PREFIX@" +LOCAL_PREFIX = b"C:/msys64/opt/local" DEST_DIR = b"@CMAKE_INSTALL_PREFIX@/@PD_EXE_INSTALL_PATH@" DLL_SET = set() +DLL_DIRS = [MINGW_PREFIX, LOCAL_PREFIX] def find_all_bins(): @@ -35,14 +37,15 @@ def find_bin_dlls(path): idx = line.find(b'DLL Name: ') if idx > 0: dll = line[idx+10:] - dll_path = os.path.join(MINGW_PREFIX, b"bin", dll) - if dll_path in DLL_SET: - continue - - if os.path.exists(dll_path): - DLL_SET.add(dll_path) - print(" + ", dll.decode()) - find_bin_dlls(dll_path) + for prefix in DLL_DIRS: + dll_path = os.path.join(prefix, b"bin", dll) + if dll_path in DLL_SET: + continue + + if os.path.exists(dll_path): + DLL_SET.add(dll_path) + print(" + ", dll.decode()) + find_bin_dlls(dll_path) if __name__ == "__main__": diff --git a/ceammc/extra/CMakeLists.txt b/ceammc/extra/CMakeLists.txt index 44e1adb4b2..a6121be6e7 100644 --- a/ceammc/extra/CMakeLists.txt +++ b/ceammc/extra/CMakeLists.txt @@ -134,7 +134,7 @@ if(WITH_SFIZZ) add_subdirectory(${sfizz_SOURCE_DIR} ${sfizz_BINARY_DIR} EXCLUDE_FROM_ALL) if(WIN32) - #install(TARGETS sfizz_shared RUNTIME DESTINATION extra/ceammc) + install(TARGETS sfizz_shared RUNTIME DESTINATION extra/ceammc) endif() endif() endif() @@ -143,59 +143,11 @@ if(WITH_FAUST) if(APPLE OR UNIX) add_subdirectory(faust) else() - cmake_minimum_required(VERSION 3.14) - - include(FetchContent) - set(FETCHCONTENT_QUIET FALSE) - set(INCLUDE_STATIC ON CACHE INTERNAL "") - set(INCLUDE_EXECUTABLE OFF CACHE INTERNAL "") - set(INCLUDE_DYNAMIC OFF CACHE INTERNAL "") - set(INCLUDE_OSC OFF CACHE INTERNAL "") - set(INCLUDE_HTTP OFF CACHE INTERNAL "") - set(INCLUDE_EMCC OFF CACHE INTERNAL "") - set(INCLUDE_WASM_GLUE OFF CACHE INTERNAL "") - set(INCLUDE_LLVM OFF CACHE INTERNAL "") - - ## Hardcoded backends for faust - set(ASMJS_BACKEND OFF CACHE INTERNAL "") - set(C_BACKEND OFF CACHE INTERNAL "") - set(CPP_BACKEND OFF CACHE INTERNAL "") - set(FIR_BACKEND OFF CACHE INTERNAL "") - set(INTERP_BACKEND OFF CACHE INTERNAL "") - set(JAVA_BACKEND OFF CACHE INTERNAL "") - set(JS_BACKEND OFF CACHE INTERNAL "") - set(LLVM_BACKEND STATIC DYNAMIC CACHE INTERNAL "") - set(OLDCPP_BACKEND OFF CACHE INTERNAL "") - set(RUST_BACKEND OFF CACHE INTERNAL "") - set(WASM_BACKEND OFF CACHE INTERNAL "") - - find_package(Patch REQUIRED) - - FetchContent_Declare( - faust - URL https://github.com/grame-cncm/faust/releases/download/2.60.3/faust-2.60.3.tar.gz - URL_HASH MD5=d0c436cebafbce0b5affc082bc2f8297 - PATCH_COMMAND ${Patch_EXECUTABLE} -i "${CMAKE_CURRENT_SOURCE_DIR}/faust/cstdint.patch" -l -N -u --verbose ${PROJECT_BINARY_DIR}/_deps/faust-src/compiler/generator/Text.hh - UPDATE_DISCONNECTED 1 - DOWNLOAD_EXTRACT_TIMESTAMP ON - ) - FetchContent_GetProperties(faust) - if(NOT faust_POPULATED) - FetchContent_Populate(faust) - file(REMOVE ${faust_SOURCE_DIR}/compiler/libcode.cpp) - add_subdirectory(${faust_SOURCE_DIR}/build ${faust_BINARY_DIR} EXCLUDE_FROM_ALL) - target_compile_options(staticlib PRIVATE -Wno-unused-variable -Wno-cast-function-type -Wno-attributes) - - set(DOC_INSTALL_PATH "${PD_DOC_INSTALL_PATH}/extra/ceammc") - - install(DIRECTORY ${faust_SOURCE_DIR}/libraries/ - DESTINATION ${DOC_INSTALL_PATH}/faust - FILES_MATCHING PATTERN "*.lib" - PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) - - message(STATUS "############## ${LLVM_LIB_DIR} ############") + find_package(LLVM REQUIRED CONFIG) + message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") + message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") - endif() + find_package(Faust REQUIRED) # ceammc binding add_library(ceammc_faust STATIC ${PROJECT_SOURCE_DIR}/ceammc/extra/faust/ceammc_llvm.cpp) @@ -203,10 +155,16 @@ if(WITH_FAUST) target_include_directories(ceammc_faust PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/faust/architecture ${faust_SOURCE_DIR}/architecture - ${PROJECT_SOURCE_DIR}/src) - target_link_libraries(ceammc_faust PUBLIC staticlib) + ${PROJECT_SOURCE_DIR}/src + ${Faust_INCLUDE_DIRS}) + target_link_libraries(ceammc_faust PUBLIC ${Faust_LIBRARIES}) target_link_directories(ceammc_faust PUBLIC ${LLVM_LIB_DIR}) + set(DOC_INSTALL_PATH "${PD_DOC_INSTALL_PATH}/extra/ceammc") + install(DIRECTORY ${FAUST_DSP_LIBRARY_DIR} + DESTINATION ${DOC_INSTALL_PATH} + FILES_MATCHING PATTERN "*.lib" + PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) if(COMMAND llvm_map_components_to_libnames) @@ -227,9 +185,184 @@ if(WITH_FAUST) target_link_libraries(ceammc_faust PRIVATE ${llvm_libs_x86}) endif() elseif(WIN32 OR UNIX) - llvm_map_components_to_libnames(llvm_libs_x86 - x86asmparser x86info x86desc x86codegen) list(APPEND llvm_libs ${llvm_libs_x86}) + target_link_libraries(ceammc_faust PRIVATE + LLVMWindowsManifest + LLVMXRay + LLVMLibDriver + LLVMDlltoolDriver + LLVMCoverage + LLVMLineEditor + LLVMXCoreDisassembler + LLVMXCoreCodeGen + LLVMXCoreDesc + LLVMXCoreInfo + LLVMX86TargetMCA + LLVMX86Disassembler + LLVMX86AsmParser + LLVMX86CodeGen + LLVMX86Desc + LLVMX86Info + LLVMWebAssemblyDisassembler + LLVMWebAssemblyAsmParser + LLVMWebAssemblyCodeGen + LLVMWebAssemblyDesc + LLVMWebAssemblyUtils + LLVMWebAssemblyInfo + LLVMVEDisassembler + LLVMVEAsmParser + LLVMVECodeGen + LLVMVEDesc + LLVMVEInfo + LLVMSystemZDisassembler + LLVMSystemZAsmParser + LLVMSystemZCodeGen + LLVMSystemZDesc + LLVMSystemZInfo + LLVMSparcDisassembler + LLVMSparcAsmParser + LLVMSparcCodeGen + LLVMSparcDesc + LLVMSparcInfo + LLVMRISCVTargetMCA + LLVMRISCVDisassembler + LLVMRISCVAsmParser + LLVMRISCVCodeGen + LLVMRISCVDesc + LLVMRISCVInfo + LLVMPowerPCDisassembler + LLVMPowerPCAsmParser + LLVMPowerPCCodeGen + LLVMPowerPCDesc + LLVMPowerPCInfo + LLVMNVPTXCodeGen + LLVMNVPTXDesc + LLVMNVPTXInfo + LLVMMSP430Disassembler + LLVMMSP430AsmParser + LLVMMSP430CodeGen + LLVMMSP430Desc + LLVMMSP430Info + LLVMMipsDisassembler + LLVMMipsAsmParser + LLVMMipsCodeGen + LLVMMipsDesc + LLVMMipsInfo + LLVMLoongArchDisassembler + LLVMLoongArchAsmParser + LLVMLoongArchCodeGen + LLVMLoongArchDesc + LLVMLoongArchInfo + LLVMLanaiDisassembler + LLVMLanaiCodeGen + LLVMLanaiAsmParser + LLVMLanaiDesc + LLVMLanaiInfo + LLVMHexagonDisassembler + LLVMHexagonCodeGen + LLVMHexagonAsmParser + LLVMHexagonDesc + LLVMHexagonInfo + LLVMBPFDisassembler + LLVMBPFAsmParser + LLVMBPFCodeGen + LLVMBPFDesc + LLVMBPFInfo + LLVMAVRDisassembler + LLVMAVRAsmParser + LLVMAVRCodeGen + LLVMAVRDesc + LLVMAVRInfo + LLVMARMDisassembler + LLVMARMAsmParser + LLVMARMCodeGen + LLVMARMDesc + LLVMARMUtils + LLVMARMInfo + LLVMAMDGPUTargetMCA + LLVMAMDGPUDisassembler + LLVMAMDGPUAsmParser + LLVMAMDGPUCodeGen + LLVMAMDGPUDesc + LLVMAMDGPUUtils + LLVMAMDGPUInfo + LLVMAArch64Disassembler + LLVMAArch64AsmParser + LLVMAArch64CodeGen + LLVMAArch64Desc + LLVMAArch64Utils + LLVMAArch64Info + LLVMOrcJIT + LLVMWindowsDriver + LLVMMCJIT + LLVMJITLink + LLVMInterpreter + LLVMExecutionEngine + LLVMRuntimeDyld + LLVMOrcTargetProcess + LLVMOrcShared + LLVMDWP + LLVMDebugInfoLogicalView + LLVMDebugInfoGSYM + LLVMOption + LLVMObjectYAML + LLVMObjCopy + LLVMMCA + LLVMMCDisassembler + LLVMLTO + LLVMPasses + LLVMCFGuard + LLVMCoroutines + LLVMipo + LLVMVectorize + LLVMLinker + LLVMInstrumentation + LLVMFrontendOpenMP + LLVMFrontendOpenACC + LLVMFrontendHLSL + LLVMExtensions + LLVMDWARFLinkerParallel + LLVMDWARFLinker + LLVMGlobalISel + LLVMMIRParser + LLVMAsmPrinter + LLVMSelectionDAG + LLVMCodeGen + LLVMObjCARCOpts + LLVMIRPrinter + LLVMInterfaceStub + LLVMFileCheck + LLVMFuzzMutate + LLVMTarget + LLVMScalarOpts + LLVMInstCombine + LLVMAggressiveInstCombine + LLVMTransformUtils + LLVMBitWriter + LLVMAnalysis + LLVMProfileData + LLVMSymbolize + LLVMDebugInfoPDB + LLVMDebugInfoMSF + LLVMDebugInfoDWARF + LLVMObject + LLVMTextAPI + LLVMMCParser + LLVMIRReader + LLVMAsmParser + LLVMMC + LLVMDebugInfoCodeView + LLVMBitReader + LLVMFuzzerCLI + LLVMCore + LLVMRemarks + LLVMBitstreamReader + LLVMBinaryFormat + LLVMTargetParser + LLVMTableGen + LLVMSupport + LLVMDemangle + ) endif() endif() endif() diff --git a/cmake/FindFaust.cmake b/cmake/FindFaust.cmake new file mode 100644 index 0000000000..fcaf50dbdb --- /dev/null +++ b/cmake/FindFaust.cmake @@ -0,0 +1,82 @@ +# - Find the Faust library +# +# Usage: +# find_package(Faust [REQUIRED] [QUIET]) +# +# It sets the following variables: +# Faust_FOUND ... true if libfaust is found on the system +# Faust_LIBRARIES ... full path to libfaust library +# Faust_INCLUDE_DIRS ... libfaust include directory +# +# The following variables will be checked by the function +# FAUST_ROOT ... if set, the libraries are exclusively searched +# under this path + +# If environment variable FAUST_DIR is specified, it has same effect as LTC_ROOT +if(NOT FAUST_ROOT AND ENV{FAUST_DIR}) + set(FAUST_ROOT $ENV{FAUST_DIR}) +endif() + +if(FAUST_ROOT) + + find_path(FAUST_INCLUDE_DIR + NAMES "faust/dsp/faust-engine.h" + PATHS ${FAUST_ROOT} + PATH_SUFFIXES "include" + NO_DEFAULT_PATH) + + find_library(FAUST_LIBRARY + NAMES "faust" "libfaust" + PATHS ${FAUST_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH) + +else() + + find_path(FAUST_INCLUDE_DIR + NAMES "faust/dsp/faust-engine.h" + HINTS C:/msys64/opt/local/include + PATH_SUFFIXES "include" + PATHS + /usr/include + /usr/local/include + /opt/local/include) + + find_library(FAUST_LIBRARY + NAMES "faust" "libfaust" + HINTS C:/msys64/opt/local/lib + PATHS + ${LIB_INSTALL_DIR} + /usr/lib + /usr/local/lib + /opt/local/lib + /opt/local/bin) + + + find_path(FAUST_DSP_LIBRARY + NAMES stdfaust.lib + HINTS C:/msys64/opt/local/share + PATH_SUFFIXES "faust" + PATHS + ${LIB_INSTALL_DIR} + /usr/lib + /usr/local/lib + /opt/local/lib + /opt/local/bin) + + if(FAUST_DSP_LIBRARY) + get_filename_component(FAUST_DSP_LIBRARY_DIR ${FAUST_DSP_LIBRARY} DIRECTORY) + endif() + +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Faust DEFAULT_MSG FAUST_INCLUDE_DIR FAUST_LIBRARY) + +if(Faust_FOUND) + set(Faust_INCLUDE_DIRS ${FAUST_INCLUDE_DIR}) + set(Faust_LIBRARIES ${FAUST_LIBRARY}) + message(STATUS "Found Faust DSP library: ${FAUST_DSP_LIBRARY_DIR}") +endif() + +mark_as_advanced(Faust_INCLUDE_DIRS Faust_LIBRARIES) diff --git a/cmake/FindLTC.cmake b/cmake/FindLTC.cmake index 0e79f62fa5..9c96ad118a 100644 --- a/cmake/FindLTC.cmake +++ b/cmake/FindLTC.cmake @@ -53,13 +53,14 @@ else() C:/MinGW/msys/1.0/usr/local/include) find_library(LTC_LIBRARY - NAMES "ltc" + NAMES "ltc" "ltc-11" HINTS ${PKGCONFIG_LTC_LIBDIR} ${PKGCONFIG_LTC_LIBRARY_DIRS} PATHS ${LIB_INSTALL_DIR} /usr/lib /usr/local/lib /opt/local/lib + /opt/local/bin /sw/lib /usr/local/mingw/i686-w64-mingw32/lib C:/MinGW/msys/1.0/usr/lib