#!/usr/bin/cmake cmake_minimum_required (VERSION 3.18) # ------------------------------------------------------------------------------------------------- project( AsmJit VERSION 2.12.1 DESCRIPTION "True Type font parsing and rendering library" ) include("../../BuildSystem/cmake/cplusplus.cmake") # ------------------------------------------------------------------------------------------------- if(NOT EXISTS ${PROJECT_SOURCE_DIR}/downloads/asmjit-2022-11-25.zip) message(STATUS "Downloading AsmJit sources") file( DOWNLOAD https://github.com/asmjit/asmjit/archive/45f3b764b309dfca79923187c52499d6894cd2af.zip ${PROJECT_SOURCE_DIR}/downloads/asmjit-2022-11-25.zip SHOW_PROGRESS EXPECTED_HASH SHA256=29e205552b6f73530f9c81f49a361c6949e3b0ff79ea8303be8f83ae125fa60e STATUS DOWNLOAD_STATUS ) if(NOT DOWNLOAD_STATUS EQUAL 0) file(REMOVE ${PROJECT_SOURCE_DIR}/downloads/asmjit-2022-11-25.zip) message(FATAL_ERROR "Download failed, stopping build (error ${DOWNLOAD_STATUS})") endif() endif() # ------------------------------------------------------------------------------------------------- if(NOT EXISTS ${PROJECT_SOURCE_DIR}/build) message(STATUS "Extracting AsmJit sources") file( ARCHIVE_EXTRACT INPUT ${PROJECT_SOURCE_DIR}/downloads/asmjit-2022-11-25.zip DESTINATION ${CMAKE_BINARY_DIR}/extract ) file( RENAME ${CMAKE_BINARY_DIR}/extract/asmjit-45f3b764b309dfca79923187c52499d6894cd2af ${PROJECT_SOURCE_DIR}/build ) endif() #file( # COPY "${PROJECT_SOURCE_DIR}/example_config.h" # DESTINATION "${PROJECT_SOURCE_DIR}/build/include/asmjit/config/" #) # ------------------------------------------------------------------------------------------------- set( sourceFiles "build/src/asmjit/core/archtraits.cpp" "build/src/asmjit/core/assembler.cpp" "build/src/asmjit/core/builder.cpp" "build/src/asmjit/core/codewriter.cpp" "build/src/asmjit/core/compiler.cpp" "build/src/asmjit/core/codeholder.cpp" "build/src/asmjit/core/cpuinfo.cpp" "build/src/asmjit/core/emithelper.cpp" "build/src/asmjit/core/emitter.cpp" "build/src/asmjit/core/constpool.cpp" "build/src/asmjit/core/emitterutils.cpp" "build/src/asmjit/core/environment.cpp" "build/src/asmjit/core/formatter.cpp" "build/src/asmjit/core/errorhandler.cpp" "build/src/asmjit/core/func.cpp" "build/src/asmjit/core/funcargscontext.cpp" "build/src/asmjit/core/globals.cpp" "build/src/asmjit/core/jitallocator.cpp" "build/src/asmjit/core/jitruntime.cpp" "build/src/asmjit/core/inst.cpp" "build/src/asmjit/core/logger.cpp" "build/src/asmjit/core/osutils.cpp" "build/src/asmjit/core/operand.cpp" "build/src/asmjit/core/ralocal.cpp" "build/src/asmjit/core/rapass.cpp" "build/src/asmjit/core/rastack.cpp" "build/src/asmjit/core/string.cpp" "build/src/asmjit/core/support.cpp" "build/src/asmjit/core/target.cpp" "build/src/asmjit/core/type.cpp" "build/src/asmjit/core/virtmem.cpp" "build/src/asmjit/core/zone.cpp" "build/src/asmjit/core/zonehash.cpp" "build/src/asmjit/core/zonelist.cpp" "build/src/asmjit/core/zonestack.cpp" "build/src/asmjit/core/zonetree.cpp" "build/src/asmjit/core/zonevector.cpp" "build/src/asmjit/arm/a64assembler.cpp" "build/src/asmjit/arm/armformatter.cpp" "build/src/asmjit/arm/a64builder.cpp" "build/src/asmjit/arm/a64emithelper.cpp" "build/src/asmjit/arm/a64func.cpp" "build/src/asmjit/arm/a64formatter.cpp" "build/src/asmjit/arm/a64compiler.cpp" "build/src/asmjit/arm/a64instapi.cpp" "build/src/asmjit/arm/a64instdb.cpp" "build/src/asmjit/arm/a64operand.cpp" "build/src/asmjit/arm/a64rapass.cpp" "build/src/asmjit/x86/x86assembler.cpp" "build/src/asmjit/x86/x86builder.cpp" "build/src/asmjit/x86/x86compiler.cpp" "build/src/asmjit/x86/x86emithelper.cpp" "build/src/asmjit/x86/x86formatter.cpp" "build/src/asmjit/x86/x86func.cpp" "build/src/asmjit/x86/x86instdb.cpp" "build/src/asmjit/x86/x86operand.cpp" "build/src/asmjit/x86/x86instapi.cpp" "build/src/asmjit/x86/x86rapass.cpp" ) file( GLOB_RECURSE headerFiles CONFIGURE_DEPENDS "build/include/*.h" ) # ------------------------------------------------------------------------------------------------- add_library(AsmJit STATIC) add_library(AsmJit::Static ALIAS AsmJit) target_compile_definitions( AsmJit PUBLIC ASMJIT_STATIC ) target_include_directories( AsmJit PUBLIC "build/include/" PUBLIC "build/src/" ) target_sources( AsmJit PUBLIC ${headerFiles} PRIVATE ${sourceFiles} ) #set_target_properties(AsmJit PROPERTIES PREFIX "") set_target_properties(AsmJit PROPERTIES OUTPUT_NAME "asmjit") # ------------------------------------------------------------------------------------------------- #install( # DIRECTORY build/include/ # DESTINATION ${PROJECT_SOURCE_DIR}/Include #) install( TARGETS AsmJit ARCHIVE DESTINATION ${PROJECT_SOURCE_DIR}/bin/${NUCLEX_COMPILER_TAG} ) # ------------------------------------------------------------------------------------------------- file( WRITE "${PROJECT_SOURCE_DIR}/AsmJitConfig.cmake" "#!/usr/bin/cmake # Configuration to include AsmJit in a CMake-based project. If you want to # reference AsmJit as an externally compiled static library, do this: # # set(AsmJit_DIR \"../ThirdParty/asmjit\") # find_package(AsmJit REQUIRED CONFIG) # # target_link_libraries( # MyAwesomeProject # PRIVATE GTest::Static # PRIVATE GTest::Main # ) # # Alternatively, if you want to build AsmJit together with your project, # use the normal CMakeLists.txt with CMake's add_subdirectory() command: # # add_subdirectory( # \"\${PROJECT_SOURCE_DIR}/../ThirdParty/asmjit\" # \"\${CMAKE_BINARY_DIR}/asmjit\" # ) # # target_link_libraries( # MyAwesomeProject # PRIVATE AsmJit # PRIVATE AsmJitMain # ) # # ------------------------------------------------------------------------------------------------- if(NOT DEFINED NUCLEX_COMPILER_TAG) message( FATAL_ERROR \"NUCLEX_COMPILER_TAG not defined! Include cplusplus.cmake before importing this package \\ in order to generate a tag identifying the platform/compiler/architecture/variant!\" ) endif() # ------------------------------------------------------------------------------------------------- if(NOT EXISTS \"\${CMAKE_CURRENT_LIST_DIR}/bin/\${NUCLEX_COMPILER_TAG}\") # TODO: Warn and link release build when compiling in debug mode # TODO: Warn and link build for older compiler version if found message( FATAL_ERROR \"Directory '\${CMAKE_CURRENT_LIST_DIR}/bin/\${NUCLEX_COMPILER_TAG}' not found. \\ Please either build and install this project before importing it via \\ find_package() or use this project's main CMakeFiles.txt via add_subdirectory()!\" ) endif() # ------------------------------------------------------------------------------------------------- add_library(AsmJit::Static STATIC IMPORTED) add_library(AsmJit::Main STATIC IMPORTED) # This may cause warnings on recent GCC versions (10.0.0+?) with LTO because GCC detects # that the headers used during build (residing in build/) are not the same used when # linking the library (copies resising in Include/). # # CMake doesn't run the install step during build, so the only way to get the headers # in place before building would be by copying them rather than installing them. set_target_properties( AsmJit::Static PROPERTIES INTERFACE_INCLUDE_DIRECTORIES \"\${CMAKE_CURRENT_LIST_DIR}/Include\" IMPORTED_LINK_INTERFACE_LANGUAGES \"CXX\" ) set_target_properties( AsmJit::Main PROPERTIES INTERFACE_INCLUDE_DIRECTORIES \"\${CMAKE_CURRENT_LIST_DIR}/Include\" IMPORTED_LINK_INTERFACE_LANGUAGES \"CXX\" ) if(WIN32) set_target_properties( AsmJit::Static PROPERTIES IMPORTED_LOCATION \"\${CMAKE_CURRENT_LIST_DIR}/bin/\${NUCLEX_COMPILER_TAG}/asmjit.lib\" ) else() set_target_properties( AsmJit::Static PROPERTIES IMPORTED_LOCATION \"\${CMAKE_CURRENT_LIST_DIR}/bin/\${NUCLEX_COMPILER_TAG}/libasmjit.a\" ) endif() message(STATUS \"Imported AsmJit targets with binaries in '\${CMAKE_CURRENT_LIST_DIR}'\")" ) # -------------------------------------------------------------------------------------------------