Skip to content

Commit 4e0946f

Browse files
committed
cmake: Build with -m64 for g++ on amd64
1 parent e9587ca commit 4e0946f

2 files changed

Lines changed: 22 additions & 17 deletions

File tree

CMakeLists.txt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,21 @@ endif(silent)
110110
# Append optimization level
111111
set(CAPABS "${CAPABS} ${OPTIMIZE}")
112112

113+
# object format needs to be set BEFORE enabling ASM
114+
# see: https://cmake.org/Bug/bug_relationship_graph.php?bug_id=13166
115+
if ("${ARCH}" STREQUAL "i686")
116+
set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf")
117+
set(OBJCOPY_TARGET "elf32-i386")
118+
set(CAPABS "${CAPABS} -m32")
119+
else()
120+
set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf64")
121+
set(OBJCOPY_TARGET "elf64-x86-64")
122+
set(CAPABS "${CAPABS} -m64")
123+
endif()
124+
125+
enable_language(ASM_NASM)
126+
127+
# initialize C and C++ compiler flags
113128
if (CMAKE_COMPILER_IS_GNUCC)
114129
# gcc/g++ settings
115130
set(CMAKE_CXX_FLAGS " -MMD ${CAPABS} ${WARNS} -Wno-frame-address -nostdlib -fno-omit-frame-pointer -c -D_LIBCPP_HAS_NO_THREADS=1 -DOS_VERSION=\\\"${OS_VERSION}\\\"")
@@ -125,18 +140,6 @@ endif()
125140
set(BUNDLE_LOC "" CACHE STRING "Local path of bundle with pre-compile libraries")
126141
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/cross_compiled_libraries.txt)
127142

128-
# object format needs to be set BEFORE enabling ASM
129-
# see: https://cmake.org/Bug/bug_relationship_graph.php?bug_id=13166
130-
if ("${ARCH}" STREQUAL "i686")
131-
set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf")
132-
set(OBJCOPY_TARGET "elf32-i386")
133-
else()
134-
set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf64")
135-
set(OBJCOPY_TARGET "elf64-x86-64")
136-
endif()
137-
138-
enable_language(ASM_NASM)
139-
140143
# Botan Crypto & TLS
141144
# Note: Include order matters!
142145
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/botan.cmake)

cmake/post.service.cmake

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,23 @@ set(CMAKE_CXX_COMPILER_TARGET ${TRIPLE})
1515
set(CMAKE_C_COMPILER_TARGET ${TRIPLE})
1616
message(STATUS "Target triple ${TRIPLE}")
1717

18+
# defines $CAPABS depending on installation
19+
include(${CMAKE_CURRENT_LIST_DIR}/settings.cmake)
20+
1821
# Arch-specific defines & options
1922
if ("${ARCH}" STREQUAL "x86_64")
2023
set(ARCH_INTERNAL "ARCH_X64")
2124
set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf64")
2225
set(OBJCOPY_TARGET "elf64-x86-64")
26+
set(CAPABS "${CAPABS} -m64")
2327
else()
2428
set(ARCH_INTERNAL "ARCH_X86")
2529
set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf")
2630
set(OBJCOPY_TARGET "elf32-i386")
31+
set(CAPABS "${CAPABS} -m32")
2732
endif()
2833
enable_language(ASM_NASM)
2934

30-
# defines $CAPABS depending on installation
31-
include(${CMAKE_CURRENT_LIST_DIR}/settings.cmake)
32-
3335
# Various global defines
3436
# * OS_TERMINATE_ON_CONTRACT_VIOLATION provides classic assert-like output from Expects / Ensures
3537
# * _GNU_SOURCE enables POSIX-extensions in newlib, such as strnlen. ("everything newlib has", ref. cdefs.h)
@@ -46,8 +48,8 @@ if (debug)
4648
endif()
4749

4850
if (CMAKE_COMPILER_IS_GNUCC)
49-
set(CMAKE_CXX_FLAGS "-m32 -MMD ${CAPABS} ${WARNS} -nostdlib -fno-omit-frame-pointer -c -std=c++14 -D_LIBCPP_HAS_NO_THREADS=1")
50-
set(CMAKE_C_FLAGS "-m32 -MMD ${CAPABS} ${WARNS} -nostdlib -fno-omit-frame-pointer -c")
51+
set(CMAKE_CXX_FLAGS "-MMD ${CAPABS} ${WARNS} -nostdlib -fno-omit-frame-pointer -c -std=c++14 -D_LIBCPP_HAS_NO_THREADS=1")
52+
set(CMAKE_C_FLAGS "-MMD ${CAPABS} ${WARNS} -nostdlib -fno-omit-frame-pointer -c")
5153
else()
5254
# these kinda work with llvm
5355
set(CMAKE_CXX_FLAGS "-MMD ${CAPABS} ${OPTIMIZE} ${WARNS} -nostdlib -nostdlibinc -fno-omit-frame-pointer -c -std=c++14 -D_LIBCPP_HAS_NO_THREADS=1")

0 commit comments

Comments
 (0)