2201a02272
git-subtree-dir: external/xbyak git-subtree-split: 431abd865e70a46d56f5aa0e1f87572decb60169
144 lines
4.9 KiB
CMake
144 lines
4.9 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
project(XbyakSamples)
|
|
|
|
# Set C++ standard
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# Include directories
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
|
|
|
|
# Read warning flags if available (only for GCC/Clang)
|
|
if(NOT MSVC AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../test/CFLAGS_WARN.cfg")
|
|
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/../test/CFLAGS_WARN.cfg" CFLAGS_WARN_STR)
|
|
separate_arguments(CFLAGS_WARN UNIX_COMMAND "${CFLAGS_WARN_STR}")
|
|
endif()
|
|
|
|
# Platform-specific compiler flags
|
|
if(WIN32)
|
|
if(MSVC)
|
|
set(COMMON_COMPILE_FLAGS /W3)
|
|
else()
|
|
set(COMMON_COMPILE_FLAGS -Wall -fomit-frame-pointer ${CFLAGS_WARN})
|
|
endif()
|
|
else()
|
|
set(COMMON_COMPILE_FLAGS -Wall -fomit-frame-pointer ${CFLAGS_WARN})
|
|
endif()
|
|
|
|
# Check for Boost (optional for calc samples)
|
|
find_package(Boost QUIET COMPONENTS system)
|
|
|
|
# Helper function to add sample executable
|
|
function(add_sample_target target_name source_file)
|
|
add_executable(${target_name} ${source_file})
|
|
target_compile_options(${target_name} PRIVATE ${COMMON_COMPILE_FLAGS})
|
|
|
|
# Set output directory
|
|
set_target_properties(${target_name} PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
|
)
|
|
|
|
# Platform-specific settings
|
|
if(NOT WIN32)
|
|
find_package(Threads)
|
|
if(Threads_FOUND)
|
|
target_link_libraries(${target_name} ${CMAKE_THREAD_LIBS_INIT})
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
# 64-bit targets (always available on 64-bit platforms)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
add_sample_target(test64 test0.cpp)
|
|
add_sample_target(bf64 bf.cpp)
|
|
add_sample_target(memfunc64 memfunc.cpp)
|
|
add_sample_target(test_util64 test_util.cpp)
|
|
add_sample_target(cputopology cputopology.cpp)
|
|
add_sample_target(jmp_table64 jmp_table.cpp)
|
|
add_sample_target(zero_upper zero_upper.cpp)
|
|
add_sample_target(ccmp ccmp.cpp)
|
|
add_sample_target(no_flags no_flags.cpp)
|
|
|
|
# Boost-dependent targets
|
|
if(Boost_FOUND)
|
|
add_sample_target(calc64 calc.cpp)
|
|
target_link_libraries(calc64 Boost::boost)
|
|
endif()
|
|
|
|
# Non-macOS targets
|
|
if(NOT APPLE)
|
|
if(UNIX)
|
|
# static_buf uses Linux-specific mmap feature
|
|
add_sample_target(static_buf64 static_buf.cpp)
|
|
add_sample_target(memfd memfd.cpp)
|
|
endif()
|
|
endif()
|
|
|
|
# Additional useful targets
|
|
add_sample_target(quantize quantize.cpp)
|
|
endif()
|
|
|
|
# Optional 32-bit targets (skip on macOS which is 64-bit only)
|
|
# Note: Building 32-bit on 64-bit requires multilib on Linux (gcc-multilib g++-multilib)
|
|
# Enable with: cmake -DBUILD_32BIT_TARGETS=ON ..
|
|
option(BUILD_32BIT_TARGETS "Build 32-bit targets on 64-bit systems (requires multilib)" OFF)
|
|
|
|
if(BUILD_32BIT_TARGETS AND NOT APPLE AND CMAKE_SIZEOF_VOID_P EQUAL 8 AND UNIX AND NOT WIN32)
|
|
message(STATUS "Building 32-bit targets (requires multilib)")
|
|
|
|
add_sample_target(test test0.cpp)
|
|
target_compile_options(test PRIVATE -m32)
|
|
target_link_options(test PRIVATE -m32)
|
|
|
|
add_sample_target(bf bf.cpp)
|
|
target_compile_options(bf PRIVATE -m32)
|
|
target_link_options(bf PRIVATE -m32)
|
|
|
|
add_sample_target(toyvm toyvm.cpp)
|
|
target_compile_options(toyvm PRIVATE -m32)
|
|
target_link_options(toyvm PRIVATE -m32)
|
|
|
|
add_sample_target(test_util test_util.cpp)
|
|
target_compile_options(test_util PRIVATE -m32)
|
|
target_link_options(test_util PRIVATE -m32)
|
|
|
|
add_sample_target(memfunc memfunc.cpp)
|
|
target_compile_options(memfunc PRIVATE -m32)
|
|
target_link_options(memfunc PRIVATE -m32)
|
|
|
|
add_sample_target(static_buf static_buf.cpp)
|
|
target_compile_options(static_buf PRIVATE -m32)
|
|
target_link_options(static_buf PRIVATE -m32)
|
|
|
|
add_sample_target(jmp_table jmp_table.cpp)
|
|
target_compile_options(jmp_table PRIVATE -m32)
|
|
target_link_options(jmp_table PRIVATE -m32)
|
|
|
|
if(Boost_FOUND)
|
|
add_sample_target(calc calc.cpp)
|
|
target_compile_options(calc PRIVATE -m32)
|
|
target_link_options(calc PRIVATE -m32)
|
|
target_link_libraries(calc Boost::boost)
|
|
endif()
|
|
endif()
|
|
|
|
# Additional utilities
|
|
add_sample_target(profiler profiler.cpp)
|
|
|
|
# Optional VTune profiler build
|
|
option(BUILD_PROFILER_VTUNE "Build profiler with VTune support" OFF)
|
|
if(BUILD_PROFILER_VTUNE AND UNIX)
|
|
add_sample_target(profiler-vtune profiler.cpp)
|
|
target_compile_definitions(profiler-vtune PRIVATE XBYAK_USE_VTUNE)
|
|
target_include_directories(profiler-vtune PRIVATE /opt/intel/vtune_amplifier/include/)
|
|
target_link_directories(profiler-vtune PRIVATE /opt/intel/vtune_amplifier/lib64)
|
|
target_link_libraries(profiler-vtune jitprofiling dl)
|
|
endif()
|
|
|
|
# Print configuration summary
|
|
message(STATUS "Xbyak Samples Configuration:")
|
|
message(STATUS " Build type: ${CMAKE_BUILD_TYPE}")
|
|
message(STATUS " Architecture: ${CMAKE_SIZEOF_VOID_P} bytes (${CMAKE_SIZEOF_VOID_P} * 8 = ${CMAKE_SYSTEM_PROCESSOR})")
|
|
message(STATUS " Boost found: ${Boost_FOUND}")
|
|
message(STATUS " Output directory: ${CMAKE_BINARY_DIR}/bin")
|