ASM_NASM: Improve support for standalone usage
* Add tests for standalone NASM usage * Change generic ASM_NASM executable linker to <CMAKE_LINKER> * Use CMAKE_SYSTEM_PROCESSOR to determine output format when used without a C/CXX compilerstage/master/nightly/2024/03/05^2
parent
47bc42b5ac
commit
7cf45c9e6a
|
@ -1,2 +1,4 @@
|
|||
set(CMake_TEST_ASM_NASM "ON" CACHE BOOL "")
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/configure_debian12_ninja_common.cmake")
|
||||
set(CMake_TEST_UseSWIG "ON" CACHE BOOL "")
|
||||
|
|
|
@ -6,6 +6,7 @@ if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
|
|||
set(CMake_TEST_CTestUpdate_P4 "ON" CACHE BOOL "")
|
||||
endif()
|
||||
|
||||
set(CMake_TEST_ASM_NASM "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindALSA "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindBLAS "All;static=1;Generic" CACHE STRING "")
|
||||
set(CMake_TEST_FindBoost "ON" CACHE BOOL "")
|
||||
|
|
|
@ -12,6 +12,8 @@ if(NOT CMAKE_ASM_NASM_OBJECT_FORMAT)
|
|||
set(CMAKE_ASM_NASM_OBJECT_FORMAT win64)
|
||||
elseif(DEFINED CMAKE_CXX_SIZEOF_DATA_PTR AND CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT win64)
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT win64)
|
||||
else()
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT win32)
|
||||
endif()
|
||||
|
@ -20,6 +22,8 @@ if(NOT CMAKE_ASM_NASM_OBJECT_FORMAT)
|
|||
set(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
|
||||
elseif(DEFINED CMAKE_CXX_SIZEOF_DATA_PTR AND CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
|
||||
else()
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT macho)
|
||||
endif()
|
||||
|
@ -28,6 +32,8 @@ if(NOT CMAKE_ASM_NASM_OBJECT_FORMAT)
|
|||
set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
|
||||
elseif(DEFINED CMAKE_CXX_SIZEOF_DATA_PTR AND CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
|
||||
else()
|
||||
set(CMAKE_ASM_NASM_OBJECT_FORMAT elf)
|
||||
endif()
|
||||
|
@ -38,6 +44,11 @@ if(NOT CMAKE_ASM_NASM_COMPILE_OBJECT)
|
|||
set(CMAKE_ASM_NASM_COMPILE_OBJECT "<CMAKE_ASM_NASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -f ${CMAKE_ASM_NASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_ASM_NASM_LINK_EXECUTABLE)
|
||||
set(CMAKE_ASM_NASM_LINK_EXECUTABLE
|
||||
"<CMAKE_LINKER> <CMAKE_ASM_NASM_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
||||
endif()
|
||||
|
||||
if(CMAKE_ASM_NASM_COMPILER_ID STREQUAL "NASM")
|
||||
set(CMAKE_DEPFILE_FLAGS_ASM_NASM "-MD <DEP_FILE> -MT <DEP_TARGET>")
|
||||
|
||||
|
|
|
@ -498,6 +498,10 @@ if(BUILD_TESTING)
|
|||
ADD_TEST_MACRO(ReturnTest ReturnTest)
|
||||
ADD_TEST_MACRO(Properties Properties)
|
||||
ADD_TEST_MACRO(Assembler HelloAsm)
|
||||
# relies on Linux syscall interface
|
||||
if(CMake_TEST_ASM_NASM AND CMAKE_SYSTEM_NAME MATCHES "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
||||
ADD_TEST_MACRO(NasmOnly NasmOnly)
|
||||
endif()
|
||||
ADD_TEST_MACRO(SourceGroups SourceGroups)
|
||||
ADD_TEST_MACRO(Preprocess Preprocess)
|
||||
set(ExportImport_BUILD_OPTIONS -DCMake_TEST_NESTED_MAKE_PROGRAM:FILEPATH=${CMake_TEST_EXPLICIT_MAKE_PROGRAM}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
cmake_minimum_required(VERSION 3.28)
|
||||
|
||||
project(NasmOnly LANGUAGES ASM_NASM)
|
||||
|
||||
add_library(testnasm1 STATIC libnasm1.nasm)
|
||||
add_executable(NasmOnly nasmonly.nasm)
|
||||
target_link_libraries(NasmOnly testnasm1)
|
|
@ -0,0 +1,6 @@
|
|||
global LibNasm1Func
|
||||
|
||||
section .text
|
||||
LibNasm1Func:
|
||||
mov rax, 1
|
||||
ret
|
|
@ -0,0 +1,19 @@
|
|||
global _start
|
||||
|
||||
extern LibNasm1Func
|
||||
|
||||
section .text
|
||||
_start:
|
||||
xor rax, rax
|
||||
call LibNasm1Func
|
||||
cmp rax, 1
|
||||
jne err
|
||||
|
||||
mov rax, 60
|
||||
xor rdi, rdi
|
||||
syscall
|
||||
|
||||
err:
|
||||
mov rax, 60
|
||||
mov rdi, 1
|
||||
syscall
|
Loading…
Reference in New Issue