Files
ircolib/sample/CMakeLists.txt
T
iris 2201a02272 Squashed 'external/xbyak/' content from commit 431abd86
git-subtree-dir: external/xbyak
git-subtree-split: 431abd865e70a46d56f5aa0e1f87572decb60169
2026-05-12 14:03:16 +02:00

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")