Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何为6502CPU(C64)建立CMake交叉装配工具链?_Assembly_Cmake_Cross Platform_6502_Commodore - Fatal编程技术网

Assembly 如何为6502CPU(C64)建立CMake交叉装配工具链?

Assembly 如何为6502CPU(C64)建立CMake交叉装配工具链?,assembly,cmake,cross-platform,6502,commodore,Assembly,Cmake,Cross Platform,6502,Commodore,我正在尝试为Commodore 64/6502交叉汇编程序建立一个尽可能可重用的cmake构建系统,名为 我的问题是: 我如何让CMake[尝试]检测并设置tmpx或tmpx.exe可执行文件和正确路径,具体位置取决于主机平台? 如果可能的话,下面列出的/cmake/模块中有哪些是这样的搜索/查找模块 是否有办法让cmake.检测并列出TMPX版本,而不是显示: --ASM\U TMPX编译器标识未知 除此之外,我们非常感谢其他建议 (以下是我的个人资料和以下文件) My/CMakeL

我正在尝试为Commodore 64/6502交叉汇编程序建立一个尽可能可重用的cmake构建系统,名为

我的问题是:

  • 我如何让CMake[尝试]检测并设置
    tmpx
    tmpx.exe
    可执行文件和正确路径,具体位置取决于主机平台?
    • 如果可能的话,下面列出的
      /cmake/
      模块中有哪些是这样的搜索/查找模块
  • 是否有办法让
    cmake.
    检测并列出TMPX版本,而不是显示: --
    ASM\U TMPX
    编译器标识未知

除此之外,我们非常感谢其他建议

(以下是我的个人资料和以下文件)

My
/CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
set(CMAKE_SYSTEM_NAME "C64")
set(CMAKE_SYSTEM_PROCESSOR 6502)

LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_BINARY_DIR}/cmake")
#TODO: Try to move this into one of the cmake/ modules..
SET(CMAKE_ASM_TMPX_COMPILER "${CMAKE_BINARY_DIR}/tools/TMPx_v1.1.0-STYLE/linux-x86_64/tmpx")

PROJECT(test001 ASM_TMPX)
通过以下步骤,到目前为止,我已将以下cmake模块接近完成且半工作状态:

/cmake/CMakeASM\u TMPXInformation.cmake
/cmake/CMakeTestASM\u TMPXCompiler.cmake
/cmake/Platform/C64.cmake

在使用CMake的“MESSAGE()”命令仔细检查之后,我想我至少找到了第一个问题的答案/cmake/cmakeDeterminateasm_TMPXCompiler.cmake是第一个要运行的东西(并且只在第一个“cmake.”时运行)

PROJECT(test001 ASM_TMPX)#ASM_TMPX表示_
在./CMakeLists.txt中设置

就我而言,“cmake.”的运行顺序似乎是:

  • /cmake/CMakeDetermineLANG\u方言编译器.cmake(仅在初始“cmake”时运行)
  • .cmake/Platform/cmake\u SYSTEM\u NAME.cmake(在每个“cmake”运行)

    注:这取决于例如已在CMakeLists.txt中设置的集(CMAKE\u SYSTEM\u NAME“C64”);然后,CMake将查找例如/CMake/Platform/C64.CMake

  • /cmake/CMakeLANG\u方言信息。cmake(在每个“cmake”运行)

  • /cmake/CMakeTestLANG\u方言编译器.cmake(仅在初始“cmake”时运行)
  • 所以我猜CMakeDetermineLANG_方言编译器。cmake是可以而且需要执行的对汇编程序可执行文件位置的任何和所有检测,以及对汇编程序版本、命令行参数等的任何提取

    SET(ASM_DIALECT "_TMPX")
    
    SET(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS ms;s;asm)
    
    
    #Set any default arguments here
    #TODO: remove the nasm args
    IF(UNIX)
        SET(CMAKE_ASM_TMPX_COMPILER_ARG1 "-f elf")
    ELSE(UNIX)
        SET(CMAKE_ASM_TMPX_COMPILER_ARG1 "-f win32")
    ENDIF(UNIX)
    
    # This section exists to override the one in CMakeASMInformation.cmake
    # (the default Information file). This removes the <FLAGS>
    # thing so that your C compiler flags that have been set via
    # set_target_properties don't get passed to TMPx and confuse it.
    IF(NOT CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT)
    
        #TODO: Change nasm args to correct tmpx arguments
        SET(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> -o <OBJECT> <SOURCE>")
    
    ENDIF(NOT CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT)
    
    INCLUDE(CMakeASMInformation)
    SET(ASM_DIALECT)
    
    SET(ASM_DIALECT "_TMPX")
    
    IF(UNIX)
        SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}tmpx)
    ENDIF()
    
    # TODO: Properly determine exen for other host platforms
    # (The Windows exe would be 'TMPx.exe' but possibly 'tmpx.exe' or 'TMPX.EXE')
    
    INCLUDE(CMakeDetermineASMCompiler)
    
    SET(ASM_DIALECT)
    
    ###
    # From original template:
    # This file is used by EnableLanguage in cmGlobalGenerator to
    # determine that the selected ASM-ATT "compiler" works.
    # For assembler this can only check whether the compiler has been found,
    # because otherwise there would have to be a separate assembler source file
    # for each assembler on every architecture.
    ###
    
    set(ASM_DIALECT "_TMPX")
    include(CMakeTestASMCompiler)
    set(ASM_DIALECT)
    
    MESSAGE("-¤# Building for Commodore 64 platform! #¤-")
    
    #this does not seem to work
    #SET(CMAKE_ASM_TMPX_COMPILER "${CMAKE_BINARY_DIR}/tools/TMPx_v1.1.0-STYLE/linux-x86_64/tmpx")
    
    set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
    
    PROJECT(test001 ASM_TMPX) #asm_tmpx denoting the <lang>_<dialect>