Skip to content

Commit

Permalink
Merge pull request #8 from digego/master
Browse files Browse the repository at this point in the history
Latest from upstream
  • Loading branch information
Jim Kuhn committed Mar 31, 2016
2 parents e4d20e2 + 8694cf6 commit 2c23ebb
Show file tree
Hide file tree
Showing 21 changed files with 1,283 additions and 1,617 deletions.
216 changes: 92 additions & 124 deletions CMakeLists.txt
Expand Up @@ -7,7 +7,7 @@ option(ASIO "use the ASIO Portaudio backend" OFF)
option(JACK "use the Jack Portaudio backend" OFF)
option(DOWNLOAD_LLVM "download and build LLVM (patched for Extempore)" ON)
option(PACKAGE "set up install targets for packaging" OFF)
option(EXTENDED_DEPS "download & build deps for aot_extended" OFF)
option(EXTENDED_DEPS "download & build deps for aot_extended" ON)

if(PACKAGE)
# this needs to be set before project() is called
Expand Down Expand Up @@ -225,75 +225,62 @@ endif()
##############

# if you need to build LLVM by hand, the command will be something like
# cmake .. -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ZLIB=OFF -DCMAKE_INSTALL_PREFIX=c:/Users/ben/Code/extempore/llvm-3.8.0rc2-release

if(PACKAGE)
# when packaging, we'll build LLVM a bit differently (see the "deps
# for AOT-extended" section further down in this file)
set(EXT_LLVM_DIR ${CMAKE_BINARY_DIR}/deps-install)
set(DOWNLOAD_LLVM OFF)
elseif(DEFINED ENV{EXT_LLVM_DIR})
# if there's an environment variable, use that
set(EXT_LLVM_DIR $ENV{EXT_LLVM_DIR})
set(DOWNLOAD_LLVM OFF)
else()
if(WIN32)
set(EXT_LLVM_DIR ${CMAKE_SOURCE_DIR}/llvm)
else()
set(EXT_LLVM_DIR ${EXT_SHARE_DIR}/llvm)
endif()
endif()
# cmake .. -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ZLIB=OFF -DCMAKE_INSTALL_PREFIX=c:/Users/ben/Code/extempore/llvm-3.8.0-release

# assume that if we can find llvm-config, we already have a working LLVM install
find_program(LLVM_CONFIG llvm-config
${EXT_LLVM_DIR}/bin
NO_DEFAULT_PATH)

if(LLVM_CONFIG)
# logic for deciding whether to download & build LLVM
if(EXTENDED_DEPS)
set(DOWNLOAD_LLVM ON)
set(EXT_LLVM_DIR ${EXT_SHARE_DIR}/llvm)
set(EXT_DEPS_INSTALL_DIR ${CMAKE_BINARY_DIR}/deps-install)
if(WIN32)
set(EXT_PLATFORM_SHLIBS_DIR ${CMAKE_SOURCE_DIR}/libs/platform-shlibs)
else()
set(EXT_PLATFORM_SHLIBS_DIR ${EXT_SHARE_DIR}/libs/platform-shlibs)
endif()
if(PACKAGE)
set(EXT_DEPS_C_FLAGS "${CMAKE_C_FLAGS_RELEASE} -mtune=generic")
set(EXT_DEPS_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELEASE} -mtune=generic")
message(STATUS "compiler flags for packaging:\nC ${EXT_DEPS_C_FLAGS}\nCXX ${EXT_DEPS_CXX_FLAGS}")
endif()
elseif(DEFINED ENV{EXT_LLVM_DIR} AND LLVM_CONFIG)
# if there's an environment variable, use that
set(EXT_LLVM_DIR $ENV{EXT_LLVM_DIR})
set(DOWNLOAD_LLVM OFF)
else()
message(FATAL_ERROR "Environment variable EXT_LLVM_DIR must be set if you're using EXTENDED_DEPS=OFF")
endif()

# if we're gonna download and build LLVM, do it here

if(DOWNLOAD_LLVM)
message(STATUS "Downloading and building LLVM (patched for Extempore)")

include(ExternalProject)
find_program(PATCH_PROGRAM patch)

if(WIN32)
if(DEFINED PYTHON_EXECUTABLE)
message(STATUS "building LLVM using using python at ${PYTHON_EXECUTABLE}")
ExternalProject_Add(LLVM
PREFIX llvm
URL http://extempore.moso.com.au/extras/extempore-llvm-3.7.0.src.zip
URL_MD5 a2fb39e154f62c1731d32f0c789d8f99
CMAKE_ARGS
-DLLVM_TARGETS_TO_BUILD=X86
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DLLVM_ENABLE_TERMINFO=OFF
-DLLVM_ENABLE_ZLIB=OFF
-DCMAKE_INSTALL_PREFIX=${EXT_LLVM_DIR}
-DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE})
else()
ExternalProject_Add(LLVM
PREFIX llvm
URL http://extempore.moso.com.au/extras/extempore-llvm-3.7.0.src.zip
URL_MD5 a2fb39e154f62c1731d32f0c789d8f99
CMAKE_ARGS
CMAKE_ARGS
-DLLVM_TARGETS_TO_BUILD=X86
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DLLVM_ENABLE_TERMINFO=OFF
-DLLVM_ENABLE_ZLIB=OFF
-DCMAKE_INSTALL_PREFIX=${EXT_LLVM_DIR})
endif()
else()
find_program(PATCH_PROGRAM patch)

if(NOT PATCH_PROGRAM)
message(FATAL_ERROR "Cannot find \"patch\" to patch LLVM")
endif()
if(NOT PATCH_PROGRAM)
message(FATAL_ERROR "Cannot find \"patch\", which is required to patch LLVM")
endif()

if(PACKAGE)
ExternalProject_Add(LLVM
PREFIX llvm
URL http://www.llvm.org/releases/3.7.0/llvm-3.7.0.src.tar.xz
URL_MD5 b98b9495e5655a672d6cb83e1a180f8e
PATCH_COMMAND patch -p0 < ${CMAKE_SOURCE_DIR}/extras/extempore-llvm-3.7.0.patch
CMAKE_ARGS
-DCMAKE_OSX_SYSROOT=macosx
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.9
-DLLVM_TARGETS_TO_BUILD=X86
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DLLVM_ENABLE_TERMINFO=OFF
-DLLVM_ENABLE_ZLIB=OFF
-DCMAKE_C_FLAGS=${EXT_DEPS_C_FLAGS}
-DCMAKE_CXX_FLAGS=${EXT_DEPS_CXX_FLAGS}
-DCMAKE_INSTALL_PREFIX=${EXT_LLVM_DIR})
else()
ExternalProject_Add(LLVM
PREFIX llvm
URL http://www.llvm.org/releases/3.7.0/llvm-3.7.0.src.tar.xz
Expand All @@ -306,7 +293,11 @@ if(DOWNLOAD_LLVM)
-DLLVM_ENABLE_ZLIB=OFF
-DCMAKE_INSTALL_PREFIX=${EXT_LLVM_DIR})
endif()
endif()
add_custom_target(LLVM_install
COMMENT "This is necessary to get CMake to install LLVM (needed to build Extempore) before the Extempore install step"
DEPENDS LLVM
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/llvm/src/LLVM-build/cmake_install.cmake)
endif()

# the ordering of these libs matters, especially with the gcc linker.
# Check the output of "llvm-config --libnames" to be sure
Expand Down Expand Up @@ -364,7 +355,7 @@ endif()
add_dependencies(extempore pcre portaudio)

if(DOWNLOAD_LLVM)
add_dependencies(extempore LLVM)
add_dependencies(extempore LLVM LLVM_install)
endif()

target_include_directories(extempore
Expand Down Expand Up @@ -566,7 +557,7 @@ else(WIN32)
--port=${port}
--eval "(impc:aot:compile-xtm-file \"${lib}\" #t #t)"
BYPRODUCTS libs/aot-cache/xtm${basename}${CMAKE_SHARED_LIBRARY_SUFFIX}
$<PLATFORM_ID:Windows>:WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}>
$<$<PLATFORM_ID:Windows>:WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}>
VERBATIM)
add_dependencies(${targetname} extempore)
add_dependencies(${group} ${targetname})
Expand Down Expand Up @@ -624,19 +615,6 @@ add_custom_target(clean_aot

if(EXTENDED_DEPS)

set(EXT_DEPS_INSTALL_DIR ${CMAKE_BINARY_DIR}/deps-install)
if(WIN32)
set(EXT_PLATFORM_SHLIBS_DIR ${CMAKE_SOURCE_DIR}/libs/platform-shlibs)
else()
set(EXT_PLATFORM_SHLIBS_DIR ${EXT_SHARE_DIR}/libs/platform-shlibs)
endif()

if(PACKAGE)
set(EXT_DEPS_C_FLAGS "${CMAKE_C_FLAGS_RELEASE} -mtune=generic")
set(EXT_DEPS_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELEASE} -mtune=generic")
message(STATUS "compiler flags for packaging:\nC ${EXT_DEPS_C_FLAGS}\nCXX ${EXT_DEPS_CXX_FLAGS}")
endif()

include(ExternalProject)

ExternalProject_Add(portmidi
Expand Down Expand Up @@ -766,67 +744,57 @@ if(EXTENDED_DEPS)
ExternalProject_Add(apr
PREFIX apr
URL http://mirror.ventraip.net.au/apache/apr/apr-1.5.2.tar.gz
CONFIGURE_COMMAND sh configure --prefix=${CMAKE_BINARY_DIR}/deps-install --enable-threads --disable-static
CONFIGURE_COMMAND sh configure --prefix=${EXT_DEPS_INSTALL_DIR} --enable-threads --disable-static
BUILD_COMMAND make
INSTALL_COMMAND make install
BUILD_IN_SOURCE ON)
endif()

if(PACKAGE)
ExternalProject_Add(LLVM-packaging
PREFIX llvm
URL http://www.llvm.org/releases/3.7.0/llvm-3.7.0.src.tar.xz
URL_MD5 b98b9495e5655a672d6cb83e1a180f8e
PATCH_COMMAND patch -p0 < ${CMAKE_SOURCE_DIR}/extras/extempore-llvm-3.7.0.patch
CMAKE_ARGS
-DCMAKE_OSX_SYSROOT=macosx
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.9
-DLLVM_TARGETS_TO_BUILD=X86
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DLLVM_ENABLE_TERMINFO=OFF
-DLLVM_ENABLE_ZLIB=OFF
-DCMAKE_C_FLAGS=${EXT_DEPS_C_FLAGS}
-DCMAKE_CXX_FLAGS=${EXT_DEPS_CXX_FLAGS}
-DCMAKE_INSTALL_PREFIX=${EXT_DEPS_INSTALL_DIR})

add_dependencies(extempore LLVM-packaging)
endif()

# wrap the whole thing in a target

if(APPLE)
if(UNIX)
add_custom_target(extended_deps
COMMENT "moving shared libs into libs/platform-shlibs"
DEPENDS sndfile assimp glfw3 stb_image kiss_fft nanovg portmidi LLVM-packaging sndfile apr
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libassimp.dylib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libkiss_fft.dylib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libnanovg.dylib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libportmidi.dylib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libsndfile.dylib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libstb_image.dylib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libglfw.3.dylib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libapr-1.0.dylib ${EXT_PLATFORM_SHLIBS_DIR})
COMMENT "moving shared libs into ${EXT_PLATFORM_SHLIBS_DIR}"
DEPENDS sndfile assimp glfw3 stb_image kiss_fft nanovg portmidi LLVM sndfile apr
COMMAND ${CMAKE_COMMAND} -E make_directory ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND ${CMAKE_COMMAND} -E copy
libassimp${CMAKE_SHARED_LIBRARY_SUFFIX}
libkiss_fft${CMAKE_SHARED_LIBRARY_SUFFIX}
libnanovg${CMAKE_SHARED_LIBRARY_SUFFIX}
libportmidi${CMAKE_SHARED_LIBRARY_SUFFIX}
libsndfile${CMAKE_SHARED_LIBRARY_SUFFIX}
libstb_image${CMAKE_SHARED_LIBRARY_SUFFIX}
libglfw.3${CMAKE_SHARED_LIBRARY_SUFFIX}
libapr-1.0${CMAKE_SHARED_LIBRARY_SUFFIX}
# destination
${EXT_PLATFORM_SHLIBS_DIR}
WORKING_DIRECTORY ${EXT_DEPS_INSTALL_DIR}/lib)
elseif(WIN32)
add_custom_target(extended_deps
COMMENT "moving shared libs into libs/platform-shlibs"
DEPENDS sndfile assimp glfw3 stb_image kiss_fft nanovg portmidi LLVM-packaging sndfile apr
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/bin/assimp.dll ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/kiss_fft.dll ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/nanovg.dll ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/portmidi.dll ${EXT_PLATFORM_SHLIBS_DIR}
# COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libsndfile-1.dll ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/stb_image.dll ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/glfw3.dll ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/bin/libapr-1.dll ${EXT_PLATFORM_SHLIBS_DIR}
# on Windows, move the .lib files as well
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/assimp.lib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/kiss_fft.lib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/nanovg.lib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/portmidi.lib ${EXT_PLATFORM_SHLIBS_DIR}
# COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libsndfile-1.lib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/stb_image.lib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/glfw3dll.lib ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND cmake -E copy ${EXT_DEPS_INSTALL_DIR}/lib/libapr-1.lib ${EXT_PLATFORM_SHLIBS_DIR})
COMMENT "moving shared libs into ${EXT_PLATFORM_SHLIBS_DIR}"
DEPENDS sndfile assimp glfw3 stb_image kiss_fft nanovg portmidi LLVM sndfile apr
COMMAND ${CMAKE_COMMAND} -E make_directory ${EXT_PLATFORM_SHLIBS_DIR}
COMMAND ${CMAKE_COMMAND} -E copy
bin/assimp.dll
lib/kiss_fft.dll
lib/nanovg.dll
lib/portmidi.dll
# lib/libsndfile-1.dll
lib/stb_image.dll
lib/glfw3.dll
bin/libapr-1.dll
#on Windows, move the .lib files as well
lib/assimp.lib
lib/kiss_fft.lib
lib/nanovg.lib
lib/portmidi.lib
# lib/libsndfile-1.lib
lib/stb_image.lib
lib/glfw3dll.lib
lib/libapr-1.lib
# destination
${EXT_PLATFORM_SHLIBS_DIR}
WORKING_DIRECTORY ${EXT_DEPS_INSTALL_DIR})
endif()

add_dependencies(aot_extended extended_deps)
Expand Down Expand Up @@ -884,7 +852,7 @@ set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The Extempore programming environment (ht
if(APPLE)
set(CPACK_GENERATOR DragNDrop)
elseif(UNIX AND NOT APPLE)
set(CPACK_GENERATOR DEB)
set(CPACK_GENERATOR TGZ)
elseif(WIN32)
set(CPACK_GENERATOR ZIP)
# set(CPACK_GENERATOR NSIS64)
Expand Down

0 comments on commit 2c23ebb

Please sign in to comment.