mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
59 lines
2.0 KiB
CMake
59 lines
2.0 KiB
CMake
# identifier: Name of the example
|
|
# songfile: File path of the song YAML file.
|
|
# architecture: 386 or amd64
|
|
# abi: 32 or 64
|
|
# windows_libraries: All libraries that you need to link on Windows
|
|
# unix_libraries: All libraries that you need to link on unix
|
|
function(add_asm_example identifier songfile architecture sizeof_void_ptr windows_libraries unix_libraries)
|
|
get_filename_component(songprefix ${songfile} NAME_WE)
|
|
|
|
# Generate the song assembly file
|
|
add_custom_command(
|
|
COMMAND
|
|
${compilecmd} -arch=${architecture} -o ${songprefix}_${architecture}.asm ${songfile}
|
|
WORKING_DIRECTORY
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS
|
|
${songfile}
|
|
${compilecmd}
|
|
OUTPUT
|
|
${songprefix}_${architecture}.asm
|
|
${songprefix}_${architecture}.h
|
|
${songprefix}_${architecture}.inc
|
|
COMMENT
|
|
"Compiling ${PROJECT_SOURCE_DIR}/examples/patches/physics-girl-st.yml..."
|
|
)
|
|
|
|
# Platform dependent options
|
|
if(WIN32)
|
|
set(abi win)
|
|
set(libraries ${windows_libraries})
|
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
set(link_options -nostartfiles)
|
|
endif()
|
|
elseif(UNIX)
|
|
set(abi elf)
|
|
set(link_options -z noexecstack -no-pie)
|
|
set(libraries ${unix_libraries})
|
|
endif()
|
|
|
|
# Add target
|
|
add_executable(${identifier}-${architecture}
|
|
${identifier}.${abi}${sizeof_void_ptr}.asm
|
|
${songprefix}_${architecture}.asm
|
|
${songprefix}_${architecture}.inc
|
|
)
|
|
set_target_properties(${identifier}-${architecture} PROPERTIES ASM_NASM_COMPILE_OPTIONS -f${abi}${sizeof_void_ptr})
|
|
target_include_directories(${identifier}-${architecture} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
|
set_target_properties(${identifier}-${architecture} PROPERTIES LINKER_LANGUAGE C)
|
|
target_link_options(${identifier}-${architecture} PRIVATE -m${sizeof_void_ptr} ${link_options})
|
|
target_link_libraries(${identifier}-${architecture} PRIVATE ${libraries})
|
|
target_compile_definitions(${identifier}-${architecture} PRIVATE TRACK_INCLUDE="${songprefix}_${architecture}.inc")
|
|
|
|
# Set up dependencies
|
|
add_dependencies(examples ${identifier}-${architecture})
|
|
endfunction()
|
|
|
|
add_subdirectory(386)
|
|
add_subdirectory(amd64)
|