diff options
| author | Czarek Nakamoto <cyjan@mrcyjanek.net> | 2026-02-22 11:57:00 +0100 |
|---|---|---|
| committer | Czarek Nakamoto <cyjan@mrcyjanek.net> | 2026-02-22 11:57:00 +0100 |
| commit | 218e34c4ad7aaa3ef01ac1e869999c309588502b (patch) | |
| tree | cf039321984f9ba0d104614cd286347090974c8c | |
| parent | a8b70857baddea2a6078a80c5c4d6a08203b5981 (diff) | |
fix: toolchain
| -rw-r--r-- | contrib/depends/Makefile | 2 | ||||
| -rwxr-xr-x | contrib/depends/gen_toolchain.cmake.sh | 204 |
2 files changed, 205 insertions, 1 deletions
diff --git a/contrib/depends/Makefile b/contrib/depends/Makefile index 46450a1..e391b6b 100644 --- a/contrib/depends/Makefile +++ b/contrib/depends/Makefile @@ -2,7 +2,7 @@ HOST ?= -PACKAGES = native/cmake,native/python@3.14,native/git,native/_,native/make,boost,zeromq,unbound,sodium,openssl,zlib +PACKAGES = native/cmake,native/python@3.14,native/git,native/_,native/make,native/cmake-toolchain,boost,zeromq,unbound,sodium,openssl,zlib SIMPLYBS_HASH = 9adf984c68dd37da38d4e9aa905610dda54be7a4 all: simplybs $(if $(HOST),sbs-build-$(HOST),) diff --git a/contrib/depends/gen_toolchain.cmake.sh b/contrib/depends/gen_toolchain.cmake.sh index 25cf17e..0810cf4 100755 --- a/contrib/depends/gen_toolchain.cmake.sh +++ b/contrib/depends/gen_toolchain.cmake.sh @@ -257,4 +257,208 @@ endif() #Create a new global cmake flag that indicates building with depends set (DEPENDS true) + +# github.com/mrcyjanek/cmake-toolchain + +if(DEFINED ENV{HOST}) + string(TOLOWER "$ENV{HOST}" _host) + message(STATUS "toolchain: HOST = ${_host}") + + if(_host MATCHES "darwin") + set(CMAKE_SYSTEM_NAME Darwin) + if(_host MATCHES "aarch64") + set(CMAKE_SYSTEM_PROCESSOR arm64) + endif() + if(_host MATCHES "x86_64") + set(CMAKE_SYSTEM_PROCESSOR x86_64) + endif() + + elseif(_host MATCHES "ios") + set(CMAKE_SYSTEM_NAME iOS) + if(_host MATCHES "aarch64") + set(CMAKE_SYSTEM_PROCESSOR arm64) + endif() + if(_host MATCHES "x86_64") + set(CMAKE_SYSTEM_PROCESSOR x86_64) + endif() + if(_host MATCHES "simulator") + set(_ios_simulator TRUE) + endif() + + elseif(_host MATCHES "linux") + set(CMAKE_SYSTEM_NAME Linux) + if(_host MATCHES "aarch64") + set(CMAKE_SYSTEM_PROCESSOR aarch64) + endif() + if(_host MATCHES "armv7") + set(CMAKE_SYSTEM_PROCESSOR armv7) + endif() + if(_host MATCHES "x86_64") + set(CMAKE_SYSTEM_PROCESSOR x86_64) + endif() + + elseif(_host MATCHES "android") + set(CMAKE_SYSTEM_NAME Android) + + if(_host MATCHES "aarch64") + set(CMAKE_SYSTEM_PROCESSOR aarch64) + endif() + if(_host MATCHES "armv7") + set(CMAKE_SYSTEM_PROCESSOR armv7) + endif() + if(_host MATCHES "x86_64") + set(CMAKE_SYSTEM_PROCESSOR x86_64) + endif() + + set(CMAKE_ANDROID_STL_TYPE c++_static) + set(BUILD_SHARED_LIBS OFF) + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + + elseif(_host MATCHES "mingw" OR _host MATCHES "w64") + set(CMAKE_SYSTEM_NAME Windows) + if(_host MATCHES "x86_64") + set(CMAKE_SYSTEM_PROCESSOR x86_64) + endif() + if(_host MATCHES "i686") + set(CMAKE_SYSTEM_PROCESSOR i686) + endif() + endif() +endif() + +function(_set_compiler_from_env LANG ENVNAME CMAKE_COMPILER_VAR CMAKE_FLAGS_VAR) + if(NOT DEFINED ENV{\${ENVNAME}}) + return() + endif() + + separate_arguments(_tokens UNIX_COMMAND "\$ENV{\${ENVNAME}}") + list(LENGTH _tokens _tlen) + if(_tlen EQUAL 0) + return() + endif() + + list(GET _tokens 0 _exe) + list(REMOVE_AT _tokens 0) # remaining tokens are flags + + if(NOT IS_ABSOLUTE "\${_exe}") + find_program(_found_exe "\${_exe}") + if(_found_exe) + set(_exe "\${_found_exe}") + endif() + endif() + + set(\${CMAKE_COMPILER_VAR} "\${_exe}" CACHE PATH "" FORCE) + + if(_tokens) + string(REPLACE ";" " " _token_flags "\${_tokens}") + else() + set(_token_flags "") + endif() + + if("\${ENVNAME}" STREQUAL "CC") + set(_env_flags "\$ENV{CFLAGS}") + elseif("\${ENVNAME}" STREQUAL "CXX") + set(_env_flags "\$ENV{CXXFLAGS}") + else() + set(_env_flags "") + endif() + + if(_token_flags AND _env_flags) + set(_final_flags "\${_token_flags} \${_env_flags}") + elseif(_token_flags) + set(_final_flags "\${_token_flags}") + elseif(_env_flags) + set(_final_flags "\${_env_flags}") + else() + set(_final_flags "") + endif() + + if(_final_flags) + set(\${CMAKE_FLAGS_VAR} "\${_final_flags}" CACHE STRING "" FORCE) + endif() + + message(STATUS "toolchain: \${CMAKE_COMPILER_VAR} = \${_exe}") + if(_final_flags) + message(STATUS "toolchain: \${CMAKE_FLAGS_VAR} = \${_final_flags}") + endif() +endfunction() + +_set_compiler_from_env("C" "CC" "CMAKE_C_COMPILER" "CMAKE_C_FLAGS_INIT") +_set_compiler_from_env("CXX" "CXX" "CMAKE_CXX_COMPILER" "CMAKE_CXX_FLAGS_INIT") + +if(NOT DEFINED CMAKE_C_FLAGS_INIT AND DEFINED ENV{CFLAGS}) + set(CMAKE_C_FLAGS_INIT "\$ENV{CFLAGS}" CACHE STRING "" FORCE) + message(STATUS "toolchain: fallback CMAKE_C_FLAGS_INIT = \$ENV{CFLAGS}") +endif() +if(NOT DEFINED CMAKE_CXX_FLAGS_INIT AND DEFINED ENV{CXXFLAGS}) + set(CMAKE_CXX_FLAGS_INIT "\$ENV{CXXFLAGS}" CACHE STRING "" FORCE) + message(STATUS "toolchain: fallback CMAKE_CXX_FLAGS_INIT = \$ENV{CXXFLAGS}") +endif() + +if(DEFINED ENV{LDFLAGS}) + set(CMAKE_EXE_LINKER_FLAGS_INIT "\$ENV{LDFLAGS}" CACHE STRING "" FORCE) + set(CMAKE_SHARED_LINKER_FLAGS_INIT "\$ENV{LDFLAGS}" CACHE STRING "" FORCE) + set(CMAKE_MODULE_LINKER_FLAGS_INIT "\$ENV{LDFLAGS}" CACHE STRING "" FORCE) + message(STATUS "toolchain: LDFLAGS = \$ENV{LDFLAGS}") +endif() + +foreach(var AR RANLIB STRIP NM INSTALL_NAME_TOOL LIBTOOL OTOOL) + if(DEFINED ENV{\${var}}) + # some CMake variables are named CMAKE_AR, CMAKE_RANLIB etc. + set(CMAKE_\${var} "\$ENV{\${var}}" CACHE PATH "" FORCE) + message(STATUS "toolchain: tool \${var} = \$ENV{\${var}}") + endif() +endforeach() + +if(DEFINED ENV{SDK_PATH}) + set(CMAKE_SYSROOT "\$ENV{SDK_PATH}" CACHE PATH "" FORCE) + # also set OSX-specific variable (useful for Apple targets) + set(CMAKE_OSX_SYSROOT "\$ENV{SDK_PATH}" CACHE PATH "" FORCE) + message(STATUS "toolchain: SDK_PATH -> CMAKE_SYSROOT = \$ENV{SDK_PATH}") +elseif(DEFINED ENV{SYSROOT}) + set(CMAKE_SYSROOT "\$ENV{SYSROOT}" CACHE PATH "" FORCE) + set(CMAKE_OSX_SYSROOT "\$ENV{SYSROOT}" CACHE PATH "" FORCE) + message(STATUS "toolchain: SYSROOT -> CMAKE_SYSROOT = \$ENV{SYSROOT}") +else() + # if this is an iOS simulator/native iOS mapping and no SDK_PATH was set, + # set the logical name so CMake + Apple toolchain can pick it up if available + if(_ios_simulator) + set(CMAKE_OSX_SYSROOT iphonesimulator CACHE STRING "" FORCE) + elseif(DEFINED _ios_simulator AND NOT _ios_simulator) + set(CMAKE_OSX_SYSROOT iphoneos CACHE STRING "" FORCE) + endif() +endif() + +if(DEFINED ENV{OSX_MIN_VERSION}) + set(CMAKE_OSX_DEPLOYMENT_TARGET "\$ENV{OSX_MIN_VERSION}" CACHE STRING "" FORCE) + message(STATUS "toolchain: CMAKE_OSX_DEPLOYMENT_TARGET = \$ENV{OSX_MIN_VERSION}") +endif() + +if(DEFINED ENV{PREFIX}) + set(CMAKE_FIND_ROOT_PATH "\$ENV{PREFIX}" CACHE PATH "" FORCE) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + message(STATUS "toolchain: CMAKE_FIND_ROOT_PATH = \$ENV{PREFIX}") +endif() + +if(DEFINED ENV{PKG_CONFIG_PATH}) + set(ENV{PKG_CONFIG_PATH} "\$ENV{PKG_CONFIG_PATH}") + message(STATUS "toolchain: PKG_CONFIG_PATH = \$ENV{PKG_CONFIG_PATH}") +endif() + +if(DEFINED CMAKE_C_COMPILER) + if(NOT EXISTS "\${CMAKE_C_COMPILER}") + message(WARNING "toolchain: C compiler '\${CMAKE_C_COMPILER}' does not exist on filesystem; if it is a program name it must be in PATH.") + endif() +else() + message(WARNING "toolchain: C compiler not set (ENV{CC} missing).") +endif() + +if(DEFINED CMAKE_CXX_COMPILER) + if(NOT EXISTS "\${CMAKE_CXX_COMPILER}") + message(WARNING "toolchain: C++ compiler '\${CMAKE_CXX_COMPILER}' does not exist on filesystem; if it is a program name it must be in PATH.") + endif() +else() + message(WARNING "toolchain: C++ compiler not set (ENV{CXX} missing).") +endif() EOF |
