This commit is contained in:
Yatao Li 2018-08-28 19:21:32 +08:00
Родитель 2cf001f17e
Коммит 26b06c55cb
7 изменённых файлов: 96 добавлений и 59 удалений

Просмотреть файл

@ -2,6 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.0.0)
LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
FIND_PACKAGE(dotnet 2.0 REQUIRED)
INCLUDE(PostBuild)
PROJECT(GraphEngine VERSION 2.0.9328 LANGUAGES CXX)
SET(TRINITY_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
@ -14,25 +15,11 @@ SET(TRINITY_REPO_ROOT ${CMAKE_CURRENT_LIST_DIR})
SET(TRINITY_OUTPUT_DIR ${TRINITY_REPO_ROOT}/bin)
SET(TRINITY_TEST_DIR ${TRINITY_REPO_ROOT}/tests)
SET(TRINITY_TOOLS_DIR ${TRINITY_REPO_ROOT}/tools)
SET(TRINITY_LIB_DIR ${TRINITY_REPO_ROOT}/lib)
SET(TRINITY_SRC_DIR ${TRINITY_REPO_ROOT}/src)
SET(TRINITY_NUGET_EXE ${TRINITY_TOOLS_DIR}/NuGet.exe)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TRINITY_OUTPUT_DIR})
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${TRINITY_OUTPUT_DIR})
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${TRINITY_OUTPUT_DIR})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${TRINITY_OUTPUT_DIR})
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${TRINITY_OUTPUT_DIR})
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${TRINITY_OUTPUT_DIR})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${TRINITY_OUTPUT_DIR})
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${TRINITY_OUTPUT_DIR})
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${TRINITY_OUTPUT_DIR})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${TRINITY_OUTPUT_DIR})
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${TRINITY_OUTPUT_DIR})
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${TRINITY_OUTPUT_DIR})
SET(XPLAT_LIB_DIR ${TRINITY_REPO_ROOT}/lib)
SET_OUTPUT_DIRECTORY(${TRINITY_OUTPUT_DIR})
IF(WIN32 AND NOT EXISTS ${TRINITY_NUGET_EXE})
FILE(DOWNLOAD https://dist.nuget.org/win-x86-commandline/latest/nuget.exe ${TRINITY_NUGET_EXE})
@ -49,31 +36,6 @@ ELSE()
MESSAGE(FATAL_ERROR "Unsupported platform")
ENDIF()
FUNCTION(POSTBUILD_COPY_OUTPUT target file)
GET_FILENAME_COMPONENT(filename ${file} NAME)
ADD_CUSTOM_COMMAND(
TARGET ${target}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${TRINITY_OUTPUT_DIR}"
COMMAND ${CMAKE_COMMAND} -E copy ${file} "${TRINITY_OUTPUT_DIR}/"
BYPRODUCTS "${TRINITY_OUTPUT_DIR}/${filename}"
)
ENDFUNCTION()
FUNCTION(POSTBUILD_XPLAT_OUTPUT target)
INSTALL(TARGETS ${target} ARCHIVE DESTINATION lib)
IF(UNIX)
POSTBUILD_COPY_OUTPUT(${target} "${TRINITY_LIB_DIR}/${target}.dll")
POSTBUILD_COPY_OUTPUT(${target} "${TRINITY_LIB_DIR}/${target}.lib")
INSTALL(FILES ${TRINITY_LIB_DIR}/${target}.dll ARCHIVE DESTINATION lib)
ELSEIF(WIN32)
POSTBUILD_COPY_OUTPUT(${target} "${TRINITY_LIB_DIR}/lib${target}.so")
INSTALL(FILES ${TRINITY_LIB_DIR}/lib${target}.so ARCHIVE DESTINATION lib)
# TODO debug symbol
# POSTBUILD_COPY_OUTPUT(GraphEngine.Jit.Native "${PROJECT_BINARY_DIR}/GraphEngine.Jit.Native.pdb")
ENDIF()
ENDFUNCTION()
ADD_SUBDIRECTORY(src/GraphEngine)
ADD_SUBDIRECTORY(src/Trinity.TSL)
ADD_SUBDIRECTORY(src/Trinity.C)

88
cmake/PostBuild.cmake Normal file
Просмотреть файл

@ -0,0 +1,88 @@
FUNCTION(POSTBUILD_COPY_OUTPUT target file)
CMAKE_PARSE_ARGUMENTS(
# prefix
_PB
# options (flags)
"ARCHIVE;RUNTIME;LIBRARY"
# oneValueArgs
"RENAME"
# multiValueArgs
""
# the input arguments
${ARGN})
GET_FILENAME_COMPONENT(filename ${file} NAME)
SET(dir ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
IF(_PB_ARCHIVE)
SET(dir ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
ELSEIF(_PB_RUNTIME)
SET(dir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
ELSEIF(_PB_LIBRARY)
SET(dir ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
ENDIF()
ADD_CUSTOM_COMMAND(
TARGET ${target}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${dir}"
COMMAND ${CMAKE_COMMAND} -E copy ${file} "${dir}/${_PB_RENAME}"
BYPRODUCTS "${dir}/${filename}"
)
ENDFUNCTION()
FUNCTION(POSTBUILD_XPLAT_OUTPUT target xplat_dir)
GET_TARGET_PROPERTY(target_type ${target} TYPE)
IF(target_type STREQUAL "EXECUTABLE")
INSTALL(TARGETS ${target} RUNTIME DESTINATION bin)
IF(UNIX)
POSTBUILD_COPY_OUTPUT(${target} "${xplat_dir}/${target}.exe" RUNTIME)
INSTALL(FILES ${TRINITY_LIB_DIR}/${target}.exe RUNTIME DESTINATION bin)
ELSEIF(WIN32)
POSTBUILD_COPY_OUTPUT(${target} "${xplat_dir}/${target}" RUNTIME)
INSTALL(FILES ${TRINITY_LIB_DIR}/${target} RUNTIME DESTINATION bin)
ENDIF()
ELSEIF(target_type STREQUAL "SHARED_LIBRARY")
INSTALL(TARGETS ${target} DESTINATION lib)
IF(UNIX)
POSTBUILD_COPY_OUTPUT(${target} "${xplat_dir}/${target}.dll" LIBRARY)
POSTBUILD_COPY_OUTPUT(${target} "${xplat_dir}/${target}.lib" LIBRARY)
INSTALL(FILES ${TRINITY_LIB_DIR}/${target}.dll LIBRARY DESTINATION lib)
ELSEIF(WIN32)
POSTBUILD_COPY_OUTPUT(${target} "${xplat_dir}/lib${target}.so" LIBRARY)
INSTALL(FILES ${TRINITY_LIB_DIR}/lib${target}.so LIBRARY DESTINATION lib)
ENDIF()
ELSE()
MESSAGE(ERROR "Unsupported target type")
ENDIF()
IF(WIN32)
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /PDB:${target}.pdb" PARENT_SCOPE)
POSTBUILD_COPY_OUTPUT(${target} "${PROJECT_BINARY_DIR}/${target}.pdb" LIBRARY)
ENDIF()
ENDFUNCTION()
FUNCTION(SET_OUTPUT_DIRECTORY dir)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dir} PARENT_SCOPE)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${dir} PARENT_SCOPE)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${dir} PARENT_SCOPE)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${dir} PARENT_SCOPE)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${dir} PARENT_SCOPE)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${dir} PARENT_SCOPE)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${dir} PARENT_SCOPE)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${dir} PARENT_SCOPE)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${dir} PARENT_SCOPE)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${dir} PARENT_SCOPE)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${dir} PARENT_SCOPE)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${dir} PARENT_SCOPE)
ENDFUNCTION()

Просмотреть файл

@ -22,4 +22,4 @@ ENDIF()
TARGET_INCLUDE_DIRECTORIES(trinity_host PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
POSTBUILD_XPLAT_OUTPUT(trinity_host)
POSTBUILD_XPLAT_OUTPUT(trinity_host ${XPLAT_LIB_DIR})

Просмотреть файл

@ -11,4 +11,4 @@ TARGET_INCLUDE_DIRECTORIES(GraphEngine.Jit.Native PRIVATE ${ASMJIT_SOURCE_DIR})
TARGET_COMPILE_DEFINITIONS(GraphEngine.Jit.Native PRIVATE -DASMJIT_EMBED -DASMJIT_RELEASE -DGRAPHENGINEJITNATIVE_EXPORTS)
TARGET_LINK_LIBRARIES(GraphEngine.Jit.Native Trinity)
POSTBUILD_XPLAT_OUTPUT(GraphEngine.Jit.Native)
POSTBUILD_XPLAT_OUTPUT(GraphEngine.Jit.Native ${XPLAT_LIB_DIR})

Просмотреть файл

@ -11,4 +11,4 @@ ADD_LIBRARY(trinity_ffi SHARED ${SRCS})
TARGET_COMPILE_DEFINITIONS(trinity_ffi PRIVATE -DTRINITYFFINATIVE_EXPORTS)
TARGET_LINK_LIBRARIES(trinity_ffi Trinity trinity_host)
POSTBUILD_XPLAT_OUTPUT(trinity_ffi)
POSTBUILD_XPLAT_OUTPUT(trinity_ffi ${XPLAT_LIB_DIR})

Просмотреть файл

@ -14,13 +14,7 @@ IF(UNIX)
ELSEIF(WIN32)
ADD_DEFINITIONS(-DWIN32 -DNDEBUG -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -D_USRDLL -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
TARGET_LINK_LIBRARIES(Trinity PRIVATE Psapi.lib;ws2_32.lib;Dbghelp.lib;Synchronization.lib)
POSTBUILD_COPY_OUTPUT(Trinity "${PROJECT_BINARY_DIR}/Trinity.pdb")
INSTALL(FILES ${PROJECT_BINARY_DIR}/Trinity.pdb
ARCHIVE DESTINATION lib)
ENDIF()
POSTBUILD_XPLAT_OUTPUT(Trinity)
POSTBUILD_XPLAT_OUTPUT(Trinity ${XPLAT_LIB_DIR})

Просмотреть файл

@ -7,11 +7,4 @@ ADD_EXECUTABLE(Trinity.TSL.CodeGen ${codegen_srcs})
TARGET_LINK_LIBRARIES(Trinity.TSL.CodeGen Trinity.TSL.Parser)
INSTALL(TARGETS Trinity.TSL.CodeGen RUNTIME DESTINATION bin)
IF(WIN32)
INSTALL(FILES ${TRINITY_LIB_DIR}/Trinity.TSL.CodeGen RUNTIME DESTINATION bin)
POSTBUILD_COPY_OUTPUT(Trinity.TSL.CodeGen ${TRINITY_LIB_DIR}/Trinity.TSL.CodeGen)
ELSEIF(UNIX)
INSTALL(FILES ${TRINITY_LIB_DIR}/Trinity.TSL.CodeGen.exe RUNTIME DESTINATION bin)
POSTBUILD_COPY_OUTPUT(Trinity.TSL.CodeGen ${TRINITY_LIB_DIR}/Trinity.TSL.CodeGen.exe)
ENDIF()
POSTBUILD_XPLAT_OUTPUT(Trinity.TSL.CodeGen ${XPLAT_LIB_DIR})