From ff5d7f0c13fc1ba416a1b028065c4562db08b8b4 Mon Sep 17 00:00:00 2001 From: "Michael J. Manley" Date: Wed, 9 Jul 2025 10:54:49 -0700 Subject: [PATCH] Added an option to allow users to build with GCC if they so desire. Targeting v2 x86_64 cpu's for optimizations. --- CMakeLists.txt | 46 +++++++++++++++++++++++++--------------------- src/CMakeLists.txt | 3 +++ 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 49e3f921..7ec72bc3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,28 @@ cmake_minimum_required(VERSION 3.20) +# This is created if someone wants to use GCC still. Although I am targeting CLang, I am trying not to use non-GCC compatable +# options. So if you really dont care, and want to try to make GCC build again, enable this option. It is only documented here +# +# To use just add -DI_WANT_TO_USE_GCC=YES to your cmake command. + +option(I_WANT_TO_USE_GCC "I dont care, I want to use GCC even if its not supported anymore" OFF) + # We are going to force clang on both Linux and Windows builds to be uniform -set(CMAKE_C_COMPILER "clang" CACHE FILEPATH "C compiler") -set(CMAKE_CXX_COMPILER "clang++" CACHE FILEPATH "C++ compiler") +if(NOT I_WANT_TO_USE_GCC) + set(CMAKE_C_COMPILER "clang" CACHE FILEPATH "C compiler") + set(CMAKE_CXX_COMPILER "clang++" CACHE FILEPATH "C++ compiler") +endif() project(PCem) -# Dont allow GCC Building anymore, force Clang -if(NOT (CMAKE_C_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")) - message(FATAL_ERROR "Detected compiler is not Clang! Please ensure Clang is in your PATH or specified correctly.") +# Dont allow GCC Building anymore, force Clang, unless I_WANT_TO_USE_GCC is on +if(NOT I_WANT_TO_USE_GCC) + string(TOUPPER "${CMAKE_C_COMPILER_ID}" CMAKE_C_COMPILER_ID_UPPER) # This is to deal with some distros showing compiler id as clang instead of Clang + string(TOUPPER "${CMAKE_CXX_COMPILER_ID}" CMAKE_CXX_COMPILER_ID_UPPER) # This is to deal with some distros showing compiler id as clang instead of Clang + + if(NOT (CMAKE_C_COMPILER_ID_UPPER MATCHES "CLANG" AND CMAKE_CXX_COMPILER_ID_UPPER MATCHES "CLANG")) + message(FATAL_ERROR "Detected compiler is not Clang! Please ensure Clang is in your PATH or specified correctly.") + endif() endif() set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -25,21 +39,11 @@ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -fomit-frame-pointer set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} -DDEBUG") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -DDEBUG") -if(${PCEM_CPU_TYPE} STREQUAL "i386") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2") +if(${PCEM_CPU_TYPE} STREQUAL "x86_64") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=x86-64-v2") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64-v2") endif() -# Turning this off, maybe this is whats causing issues as i noticed in an older build, 64-bit builds dont do stack realign -#if(NOT ${PCEM_CPU_TYPE} MATCHES "arm.*") -# set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -mstackrealign") -# set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mstackrealign") -#endif() - -if (UNIX) - add_definitions(-D_FILE_OFFSET_BITS=64) -endif () - set(PCEM_VERSION_STRING "vNext" CACHE STRING "PCem Version String") set(PCEM_DISPLAY_ENGINE "wxWidgets" CACHE STRING "PCem Display Engine") set(PCEM_DEFINES ${PCEM_DEFINES} PCEM_VERSION_STRING="${PCEM_VERSION_STRING}") @@ -61,9 +65,9 @@ option(USE_NETWORKING "Build PCem with networking support" ON) message("Networking Support: ${USE_NETWORKING}") if(USE_NETWORKING) - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -std=gnu17") - message(" Switching C to gnu17 to allow slirp to build") - +# Turning off to see if it does build with CLang, I think it passes warnings but still builds. +# set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -std=gnu17") +# message(" Switching C to gnu17 to allow slirp to build") option(USE_PCAP_NETWORKING "Build PCem with PCAP support" ON) message(" PCAP Networking Support: ${USE_PCAP_NETWORKING}") endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a692a92c..09c8e2db 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -76,4 +76,7 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/plugin-api/plugin-api.cmake) add_executable(pcem ${PCEM_SRC} ${PCEM_PRIVATE_API} ${PCEM_EMBEDDED_PLUGIN_API}) target_compile_definitions(pcem PUBLIC ${PCEM_DEFINES}) target_compile_options(pcem PUBLIC $<$:-fcommon> $<$:-fcommon>) +if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + target_link_options(pcem PRIVATE "/SUBSYSTEM:WINDOWS") +endif() target_link_libraries(pcem ${PCEM_LIBRARIES})