mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-11-10 07:12:03 +00:00
cmake: Fix nasm/add yasm support
Tested to work on MSVC, mingw-gcc
This commit is contained in:
parent
194ce626e1
commit
d7015d1492
5 changed files with 161 additions and 3 deletions
46
cmake/Modules/CMakeASM_YASMInformation.cmake
Normal file
46
cmake/Modules/CMakeASM_YASMInformation.cmake
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2010 Kitware, Inc.
|
||||||
|
#
|
||||||
|
# Distributed under the OSI-approved BSD License (the "License");
|
||||||
|
# see accompanying file Copyright.txt for details.
|
||||||
|
#
|
||||||
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||||
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
# See the License for more information.
|
||||||
|
#=============================================================================
|
||||||
|
# (To distribute this file outside of CMake, substitute the full
|
||||||
|
# License text for the above reference.)
|
||||||
|
|
||||||
|
# support for the yasm assembler
|
||||||
|
|
||||||
|
set(CMAKE_ASM_YASM_SOURCE_FILE_EXTENSIONS nasm yasm asm)
|
||||||
|
|
||||||
|
if(NOT CMAKE_ASM_YASM_OBJECT_FORMAT)
|
||||||
|
if(WIN32)
|
||||||
|
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
|
||||||
|
set(CMAKE_ASM_YASM_OBJECT_FORMAT win64)
|
||||||
|
else()
|
||||||
|
set(CMAKE_ASM_YASM_OBJECT_FORMAT win32)
|
||||||
|
endif()
|
||||||
|
elseif(APPLE)
|
||||||
|
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
|
||||||
|
set(CMAKE_ASM_YASM_OBJECT_FORMAT macho64)
|
||||||
|
else()
|
||||||
|
set(CMAKE_ASM_YASM_OBJECT_FORMAT macho)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
|
||||||
|
set(CMAKE_ASM_YASM_OBJECT_FORMAT elf64)
|
||||||
|
else()
|
||||||
|
set(CMAKE_ASM_YASM_OBJECT_FORMAT elf)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_ASM_YASM_COMPILE_OBJECT "<CMAKE_ASM_YASM_COMPILER> <FLAGS> -f ${CMAKE_ASM_YASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>")
|
||||||
|
|
||||||
|
# Load the generic ASMInformation file:
|
||||||
|
set(ASM_DIALECT "_YASM")
|
||||||
|
include(CMakeASMInformation)
|
||||||
|
set(ASM_DIALECT)
|
27
cmake/Modules/CMakeDetermineASM_YASMCompiler.cmake
Normal file
27
cmake/Modules/CMakeDetermineASM_YASMCompiler.cmake
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2010 Kitware, Inc.
|
||||||
|
#
|
||||||
|
# Distributed under the OSI-approved BSD License (the "License");
|
||||||
|
# see accompanying file Copyright.txt for details.
|
||||||
|
#
|
||||||
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||||
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
# See the License for more information.
|
||||||
|
#=============================================================================
|
||||||
|
# (To distribute this file outside of CMake, substitute the full
|
||||||
|
# License text for the above reference.)
|
||||||
|
|
||||||
|
# Find the nasm assembler. yasm (http://www.tortall.net/projects/yasm/) is nasm compatible
|
||||||
|
|
||||||
|
set(CMAKE_ASM_YASM_COMPILER_LIST nasm yasm)
|
||||||
|
|
||||||
|
if(NOT CMAKE_ASM_YASM_COMPILER)
|
||||||
|
find_program(CMAKE_ASM_YASM_COMPILER yasm
|
||||||
|
"$ENV{ProgramFiles}/YASM")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Load the generic DetermineASM compiler file with the DIALECT set properly:
|
||||||
|
set(ASM_DIALECT "_YASM")
|
||||||
|
include(CMakeDetermineASMCompiler)
|
||||||
|
set(ASM_DIALECT)
|
23
cmake/Modules/CMakeTestASM_YASMCompiler.cmake
Normal file
23
cmake/Modules/CMakeTestASM_YASMCompiler.cmake
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2010 Kitware, Inc.
|
||||||
|
#
|
||||||
|
# Distributed under the OSI-approved BSD License (the "License");
|
||||||
|
# see accompanying file Copyright.txt for details.
|
||||||
|
#
|
||||||
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||||
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
# See the License for more information.
|
||||||
|
#=============================================================================
|
||||||
|
# (To distribute this file outside of CMake, substitute the full
|
||||||
|
# License text for the above reference.)
|
||||||
|
|
||||||
|
# This file is used by EnableLanguage in cmGlobalGenerator to
|
||||||
|
# determine that the selected ASM_NASM "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 "_YASM")
|
||||||
|
include(CMakeTestASMCompiler)
|
||||||
|
set(ASM_DIALECT)
|
|
@ -198,13 +198,32 @@ set(SRB2_R_OPENGL_HEADERS
|
||||||
prepend_sources(SRB2_R_OPENGL_SOURCES)
|
prepend_sources(SRB2_R_OPENGL_SOURCES)
|
||||||
prepend_sources(SRB2_R_OPENGL_HEADERS)
|
prepend_sources(SRB2_R_OPENGL_HEADERS)
|
||||||
|
|
||||||
|
set(SRB2_ASM_SOURCES
|
||||||
|
vid_copy.s
|
||||||
|
)
|
||||||
|
|
||||||
set(SRB2_NASM_SOURCES
|
set(SRB2_NASM_SOURCES
|
||||||
tamp_mmx.nas
|
tmap_mmx.nas
|
||||||
tmap.nas
|
tmap.nas
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
list(APPEND SRB2_NASM_SOURCES tmap_vc.nas)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SRB2_NASM_OBJECTS
|
||||||
|
tmap_mmx.obj
|
||||||
|
tmap.obj
|
||||||
|
)
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
list(APPEND SRB2_NASM_OBJECTS tmap_vc.obj)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
prepend_sources(SRB2_ASM_SOURCES)
|
||||||
prepend_sources(SRB2_NASM_SOURCES)
|
prepend_sources(SRB2_NASM_SOURCES)
|
||||||
|
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
set(SRB2_CONFIG_HAVE_BLUA ON CACHE BOOL
|
set(SRB2_CONFIG_HAVE_BLUA ON CACHE BOOL
|
||||||
"Enable Lua interpreter support")
|
"Enable Lua interpreter support")
|
||||||
|
@ -218,6 +237,8 @@ set(SRB2_CONFIG_HWRENDER ON CACHE BOOL
|
||||||
"Enable hardware rendering through OpenGL")
|
"Enable hardware rendering through OpenGL")
|
||||||
set(SRB2_CONFIG_USEASM OFF CACHE BOOL
|
set(SRB2_CONFIG_USEASM OFF CACHE BOOL
|
||||||
"Enable NASM tmap implementation for software mode speedup.")
|
"Enable NASM tmap implementation for software mode speedup.")
|
||||||
|
set(SRB2_CONFIG_YASM OFF CACHE BOOL
|
||||||
|
"Use YASM in place of NASM.")
|
||||||
set(SRB2_CONFIG_STATIC_OPENGL OFF CACHE BOOL
|
set(SRB2_CONFIG_STATIC_OPENGL OFF CACHE BOOL
|
||||||
"Use statically linked OpenGL. NOT RECOMMENDED.")
|
"Use statically linked OpenGL. NOT RECOMMENDED.")
|
||||||
|
|
||||||
|
@ -348,7 +369,13 @@ if(${SRB2_CONFIG_HWRENDER} AND ${SRB2_CONFIG_STATIC_OPENGL})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${SRB2_CONFIG_USEASM})
|
if(${SRB2_CONFIG_USEASM})
|
||||||
enable_language(ASM-NASM)
|
if(${SRB2_CONFIG_YASM})
|
||||||
|
set(CMAKE_ASM_YASM_SOURCE_FILE_EXTENSIONS ${CMAKE_ASM_YASM_SOURCE_FILE_EXTENSIONS} nas)
|
||||||
|
enable_language(ASM_YASM)
|
||||||
|
else()
|
||||||
|
set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS ${CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS} nas)
|
||||||
|
enable_language(ASM_NASM)
|
||||||
|
endif()
|
||||||
set(SRB2_USEASM ON)
|
set(SRB2_USEASM ON)
|
||||||
add_definitions(-DUSEASM)
|
add_definitions(-DUSEASM)
|
||||||
else()
|
else()
|
||||||
|
@ -365,7 +392,7 @@ endif()
|
||||||
# Compatibility flag with later versions of GCC
|
# Compatibility flag with later versions of GCC
|
||||||
# We should really fix our code to not need this
|
# We should really fix our code to not need this
|
||||||
if(NOT CLANG AND NOT MSVC)
|
if(NOT CLANG AND NOT MSVC)
|
||||||
add_compile_options(-mno-ms-bitfields)
|
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -mno-ms-bitfields)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_definitions(-DCMAKECONFIG)
|
add_definitions(-DCMAKECONFIG)
|
||||||
|
|
|
@ -75,6 +75,17 @@ if(${SDL2_FOUND})
|
||||||
set(SRB2_SDL2_TOTAL_SOURCES ${SRB2_SDL2_TOTAL_SOURCES}
|
set(SRB2_SDL2_TOTAL_SOURCES ${SRB2_SDL2_TOTAL_SOURCES}
|
||||||
${SRB2_NASM_SOURCES}
|
${SRB2_NASM_SOURCES}
|
||||||
)
|
)
|
||||||
|
if(MSVC)
|
||||||
|
set(SRB2_SDL2_TOTAL_SOURCES ${SRB2_SDL2_TOTAL_SOURCES}
|
||||||
|
${SRB2_NASM_OBJECTS}
|
||||||
|
)
|
||||||
|
set_source_files_properties(${SRB2_NASM_OBJECTS} PROPERTIES GENERATED ON)
|
||||||
|
else()
|
||||||
|
list(APPEND SRB2_SDL2_TOTAL_SOURCES ${SRB2_ASM_SOURCES})
|
||||||
|
set_source_files_properties(${SRB2_ASM_SOURCES} PROPERTIES LANGUAGE C)
|
||||||
|
set_source_files_properties(${SRB2_ASM_SOURCES} PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp")
|
||||||
|
endif()
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM} MATCHES Windows)
|
if(${CMAKE_SYSTEM} MATCHES Windows)
|
||||||
|
@ -132,6 +143,30 @@ if(${SDL2_FOUND})
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(${SRB2_USEASM})
|
||||||
|
if(${SRB2_CONFIG_YASM})
|
||||||
|
set(ASM_ASSEMBLER_TEMP ${CMAKE_ASM_YASM_COMPILER})
|
||||||
|
set(ASM_ASSEMBLER_OBJFORMAT ${CMAKE_ASM_YASM_OBJECT_FORMAT})
|
||||||
|
set_source_files_properties(${SRB2_NASM_SOURCES} LANGUAGE ASM_YASM)
|
||||||
|
else()
|
||||||
|
set(ASM_ASSEMBLER_TEMP ${CMAKE_ASM_NASM_COMPILER})
|
||||||
|
set(ASM_ASSEMBLER_OBJFORMAT ${CMAKE_ASM_NASM_OBJECT_FORMAT})
|
||||||
|
set_source_files_properties(${SRB2_NASM_SOURCES} LANGUAGE ASM_NASM)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
# using assembler with msvc doesn't work, must do it manually
|
||||||
|
foreach(ASMFILE ${SRB2_NASM_SOURCES})
|
||||||
|
get_filename_component(ASMFILE_NAME ${ASMFILE} NAME_WE)
|
||||||
|
set(ASMFILE_NAME ${ASMFILE_NAME}.obj)
|
||||||
|
add_custom_command(TARGET ${SRB2_SDL2_EXE_NAME} PRE_LINK
|
||||||
|
COMMAND ${ASM_ASSEMBLER_TEMP} ARGS -f ${ASM_ASSEMBLER_OBJFORMAT} -o ${CMAKE_CURRENT_BINARY_DIR}/${ASMFILE_NAME} ${ASMFILE}
|
||||||
|
COMMENT "assemble ${ASMFILE_NAME}."
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set_target_properties(${SRB2_SDL2_EXE_NAME} PROPERTIES VERSION ${SRB2_VERSION})
|
set_target_properties(${SRB2_SDL2_EXE_NAME} PROPERTIES VERSION ${SRB2_VERSION})
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM} MATCHES Windows)
|
if(${CMAKE_SYSTEM} MATCHES Windows)
|
||||||
|
|
Loading…
Reference in a new issue