mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
PellesC: Compile for architecture matching LIB environment variable
Issue: #21536 Co-authored-by: Serguei E. Leontiev <leo@sai.msu.ru>
This commit is contained in:
co-authored by
Serguei E. Leontiev
parent
20ccf97df8
commit
bc51518821
@@ -4,10 +4,21 @@
|
||||
include (Platform/Windows-PellesC)
|
||||
__windows_compiler_pellesc(ASM_POASM)
|
||||
|
||||
if(_PellesC_ARCH STREQUAL "x64")
|
||||
set(_PellesC_ASM_POASM_FLAGS " -Aamd64")
|
||||
elseif(_PellesC_ARCH STREQUAL "x86")
|
||||
set(_PellesC_ASM_POASM_FLAGS " -Aia32")
|
||||
else()
|
||||
set(_PellesC_ASM_POASM_FLAGS "")
|
||||
endif()
|
||||
|
||||
set(CMAKE_ASM_POASM_COMPILE_OBJECT
|
||||
"<CMAKE_ASM_POASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -Fo<OBJECT> <SOURCE>")
|
||||
"<CMAKE_ASM_POASM_COMPILER> <DEFINES> <INCLUDES>${_PellesC_ASM_POASM_FLAGS} <FLAGS> -Fo<OBJECT> <SOURCE>")
|
||||
|
||||
string(APPEND CMAKE_ASM_POASM_FLAGS_DEBUG_INIT " -Zi")
|
||||
string(APPEND CMAKE_ASM_POASM_FLAGS_RELEASE_INIT "")
|
||||
string(APPEND CMAKE_ASM_POASM_FLAGS_RELWITHDEBINFO_INIT " -Zi")
|
||||
string(APPEND CMAKE_ASM_POASM_FLAGS_MINSIZEREL_INIT "")
|
||||
|
||||
unset(_PellesC_ASM_POASM_FLAGS)
|
||||
unset(_PellesC_ARCH)
|
||||
|
||||
@@ -4,8 +4,14 @@
|
||||
include (Platform/Windows-PellesC)
|
||||
__windows_compiler_pellesc(C)
|
||||
|
||||
if(_PellesC_ARCH)
|
||||
set(_PellesC_C_OBJ_FLAGS " -T${_PellesC_ARCH}-coff")
|
||||
else()
|
||||
set(_PellesC_C_OBJ_FLAGS "")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_COMPILE_OBJECT
|
||||
"<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -Fo<OBJECT> -c <SOURCE>")
|
||||
"<CMAKE_C_COMPILER> <DEFINES> <INCLUDES>${_PellesC_C_OBJ_FLAGS} <FLAGS> -Fo<OBJECT> -c <SOURCE>")
|
||||
|
||||
# Enable Pelles C's Microsoft extensions to use Windows APIs.
|
||||
# The flag also disables standard definitions, so add them.
|
||||
@@ -15,3 +21,6 @@ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -Zi -Ob0")
|
||||
string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -Ot -Ob2 -DNDEBUG=1")
|
||||
string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -Zi -Ot -Ob1 -DNDEBUG=1")
|
||||
string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -Os -Ob1 -DNDEBUG=1")
|
||||
|
||||
unset(_PellesC_C_OBJ_FLAGS)
|
||||
unset(_PellesC_ARCH)
|
||||
|
||||
@@ -8,17 +8,33 @@ set(CMAKE_LINK_LIBRARY_FLAG "")
|
||||
|
||||
set(CMAKE_BUILD_TYPE_INIT Debug)
|
||||
|
||||
# Select a default architecture based on the LIB search path.
|
||||
string(TOLOWER "$ENV{LIB}" _PellesC_LIB)
|
||||
if(_PellesC_LIB MATCHES [[[\/]+lib[\/]+win64[\/]*(;|$)]])
|
||||
set(_PellesC_ARCH "x64")
|
||||
elseif(_PellesC_LIB MATCHES [[[\/]+lib[\/]+win[\/]*(;|$)]])
|
||||
set(_PellesC_ARCH "x86")
|
||||
else()
|
||||
set(_PellesC_ARCH "")
|
||||
endif()
|
||||
|
||||
macro(__windows_compiler_pellesc lang)
|
||||
if(_PellesC_ARCH)
|
||||
set(_PellesC_LINK_FLAGS " -machine:${_PellesC_ARCH}")
|
||||
else()
|
||||
set(_PellesC_LINK_FLAGS "")
|
||||
endif()
|
||||
|
||||
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "<CMAKE_AR> <LINK_FLAGS> -out:<TARGET> <OBJECTS>")
|
||||
|
||||
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
|
||||
"<CMAKE_LINKER> <OBJECTS> ${CMAKE_START_TEMP_FILE} -out:<TARGET> -implib:<TARGET_IMPLIB> -dll -version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
||||
"<CMAKE_LINKER> <OBJECTS> ${CMAKE_START_TEMP_FILE} -out:<TARGET> -implib:<TARGET_IMPLIB> -dll -version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PellesC_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
||||
set(CMAKE_${lang}_CREATE_SHARED_MODULE "${CMAKE_${lang}_CREATE_SHARED_LIBRARY}")
|
||||
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "")
|
||||
|
||||
set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE
|
||||
"<CMAKE_LINKER> <OBJECTS> ${CMAKE_START_TEMP_FILE} -out:<TARGET> -implib:<TARGET_IMPLIB> -version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
||||
"<CMAKE_LINKER> <OBJECTS> ${CMAKE_START_TEMP_FILE} -out:<TARGET> -implib:<TARGET_IMPLIB> -version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PellesC_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
||||
|
||||
set(CMAKE_${lang}_LINK_DEF_FILE_FLAG "${CMAKE_LINK_DEF_FILE_FLAG}")
|
||||
|
||||
@@ -29,6 +45,8 @@ macro(__windows_compiler_pellesc lang)
|
||||
set(CMAKE_RC_COMPILER_INIT porc)
|
||||
endif()
|
||||
enable_language(RC)
|
||||
|
||||
unset(_PellesC_LINK_FLAGS)
|
||||
endmacro()
|
||||
|
||||
foreach (t IN ITEMS EXE SHARED MODULE)
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
cmake_minimum_required(VERSION 4.3)
|
||||
project(PellesASM LANGUAGES ASM_POASM)
|
||||
add_executable(PellesASM main-AMD64.asm)
|
||||
|
||||
string(TOLOWER "$ENV{LIB}" env_lib)
|
||||
if(env_lib MATCHES [[[\/]+lib[\/]+win64[\/]*(;|$)]])
|
||||
set(arch "AMD64")
|
||||
elseif(env_lib MATCHES [[[\/]+lib[\/]+win[\/]*(;|$)]])
|
||||
set(arch "IA32")
|
||||
else()
|
||||
message(FATAL_ERROR "Cannot determine target architecture.")
|
||||
endif()
|
||||
|
||||
add_executable(PellesASM main-${arch}.asm)
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
extern $printf:proc
|
||||
|
||||
.rdata
|
||||
fmt db "hello assembler world, %d arguments given", 0ah, 0
|
||||
.code
|
||||
main proc
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push dword ptr [ebp + 8]
|
||||
lea eax, [fmt]
|
||||
push eax
|
||||
call $printf
|
||||
add esp, 8
|
||||
mov eax, 0
|
||||
mov esp, ebp
|
||||
pop ebp
|
||||
ret
|
||||
main endp
|
||||
|
||||
.drectve SEGMENT
|
||||
db ' -defaultlib:crt'
|
||||
db ' -defaultlib:kernel32'
|
||||
end
|
||||
Reference in New Issue
Block a user