How do I compile different assembly files for different architectures in CMake? For example, I have x86_64.S for x86-64, x86_32.S for x86-32, ARM7.S for ARMv8 and AArch64.S for ARMv8 AArch64. How to compile only one assembly file for target architecture?
            Asked
            
        
        
            Active
            
        
            Viewed 220 times
        
    1 Answers
1
            
            
        Edit: As mentioned by @KamilCuk, there is no need to use the add_custom_command() cmake can detect automatically how to manage the source file.
add_executable(my_exec main.c out.o)
if( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" )
    target_sources(my_exec ARMV7.S)
elseif( CMAKE_SYSTEM_PROCESSOR MATCHES "x86" )
    target_sources(my_exec x86_64.S)
endif()
According to this answer How to detect target architecture using CMake?, you could add a custom command depending of the architecture. The following could help:
if( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" )
    add_custom_command(
        OUTPUT out.o 
        COMMAND as -o out.o ARMV7.S 
        DEPENDS ARMV7.S
    )
elseif( CMAKE_SYSTEM_PROCESSOR MATCHES "x86" )
    add_custom_command(
        OUTPUT out.o 
        COMMAND nasm -o out.o x86_64.S
        DEPENDS x86_64.S
    )
endif()
add_executable(my_exec main.c out.o)
Adapt conditions to fit your needs.
        Stéphane Clérambault
        
- 61
 - 3
 
- 
                    1You do not really need add_custom_command, just `target_sources(my_exec ARMV7.S)` should be enough. – KamilCuk May 10 '22 at 20:49