1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-29 02:40:05 +00:00
JUCE/extras/Build/juceaide/CMakeLists.txt
reuk 5847e3d6a8
Juceaide: Pass C and CXX flags during configure when not crosscompiling
Similar code was incorrectly removed in
070a6b35e9.

When using CLion to invoke CMake, using a Clang toolchain and Ninja, and
targeting x64, CLion will pass -m64 in CMAKE_C_FLAGS and
CMAKE_CXX_FLAGS. The compilers are passed through to the juceaide build,
but the target arch was not, which meant that the linker attempted to
link x86 libraries, which failed.
2023-04-18 11:39:40 +01:00

160 lines
5.6 KiB
CMake

# ==============================================================================
#
# This file is part of the JUCE library.
# Copyright (c) 2022 - Raw Material Software Limited
#
# JUCE is an open source library subject to commercial or open-source
# licensing.
#
# By using JUCE, you agree to the terms of both the JUCE 7 End-User License
# Agreement and JUCE Privacy Policy.
#
# End User License Agreement: www.juce.com/juce-7-licence
# Privacy Policy: www.juce.com/juce-privacy-policy
#
# Or: You may also use this code under the terms of the GPL v3 (see
# www.gnu.org/licenses).
#
# JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
# EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
# DISCLAIMED.
#
# ==============================================================================
# The juceaide program generates intermediate build files including BinaryData sources, icons, and
# plists. To ensure that we always build it for the host system, and not for, say, a device or
# simulator if we're targeting iOS or Android, we reinvoke cmake here and build juceaide during the
# configuration stage of the outer project.
if(JUCE_BUILD_HELPER_TOOLS)
# Build the tool for the current system
juce_add_console_app(juceaide _NO_RESOURCERC)
target_sources(juceaide PRIVATE Main.cpp)
target_compile_definitions(juceaide PRIVATE
JUCE_DISABLE_JUCE_VERSION_PRINTING=1
JUCE_USE_CURL=0)
target_link_libraries(juceaide PRIVATE
juce::juce_build_tools
juce::juce_recommended_config_flags
juce::juce_recommended_lto_flags
juce::juce_recommended_warning_flags)
set_target_properties(juceaide PROPERTIES
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
export(TARGETS juceaide
NAMESPACE juce_tools::
FILE "${JUCE_BINARY_DIR}/JUCEToolsExport.cmake")
else()
set(extra_compiler_flag_arguments)
# If we're building using the NDK, the gradle wrapper will try to inject its own compiler using
# environment variables, which is unfortunate because we really don't want to cross-compile
# juceaide.
# Similarly, when cross-compiling from Linux->Windows (e.g. using
# Fedora's mingw64-cmake command), the environment might be configured
# for cross-compiling, and we'll need to attempt to put it back to the
# host settings in order to build an executable that can run on the host
# machine.
if(CMAKE_CROSSCOMPILING)
unset(ENV{ADDR2LINE})
unset(ENV{AR})
unset(ENV{ASM})
unset(ENV{AS})
unset(ENV{CC})
unset(ENV{CPP})
unset(ENV{CXXFILT})
unset(ENV{CXX})
unset(ENV{DLLTOOL})
unset(ENV{DLLWRAP})
unset(ENV{ELFEDIT})
unset(ENV{GCC})
unset(ENV{GCOV_DUMP})
unset(ENV{GCOV_TOOL})
unset(ENV{GCOV})
unset(ENV{GPROF})
unset(ENV{GXX})
unset(ENV{LDFLAGS})
unset(ENV{LD_BFD})
unset(ENV{LD})
unset(ENV{LTO_DUMP})
unset(ENV{NM})
unset(ENV{OBJCOPY})
unset(ENV{OBJDUMP})
unset(ENV{PKG_CONFIG_LIBDIR})
unset(ENV{PKG_CONFIG})
unset(ENV{RANLIB})
unset(ENV{RC})
unset(ENV{READELF})
unset(ENV{SIZE})
unset(ENV{STRINGS})
unset(ENV{STRIP})
unset(ENV{WIDL})
unset(ENV{WINDMC})
unset(ENV{WINDRES})
if(DEFINED ENV{PATH_ORIG})
set(ENV{PATH} "$ENV{PATH_ORIG}")
endif()
else()
set(extra_compiler_flag_arguments
"-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}"
"-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}")
endif()
message(STATUS "Configuring juceaide")
# Looks like we're bootstrapping, reinvoke CMake
execute_process(COMMAND "${CMAKE_COMMAND}"
"."
"-B${JUCE_BINARY_DIR}/tools"
"-G${CMAKE_GENERATOR}"
"-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"
"-DCMAKE_BUILD_TYPE=Debug"
"-DJUCE_BUILD_HELPER_TOOLS=ON"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}"
${extra_compiler_flag_arguments}
WORKING_DIRECTORY "${JUCE_SOURCE_DIR}"
OUTPUT_VARIABLE command_output
ERROR_VARIABLE command_output
RESULT_VARIABLE result_variable)
if(result_variable)
message(FATAL_ERROR "Failed to configure juceaide\n${command_output}")
endif()
message(STATUS "Building juceaide")
execute_process(COMMAND "${CMAKE_COMMAND}"
--build "${JUCE_BINARY_DIR}/tools"
--config Debug
OUTPUT_VARIABLE command_output
ERROR_VARIABLE command_output
RESULT_VARIABLE result_variable)
if(result_variable)
message(FATAL_ERROR "Failed to build juceaide\n${command_output}")
endif()
message(STATUS "Exporting juceaide")
# This will be generated by the recursive invocation of CMake (above)
include("${JUCE_BINARY_DIR}/tools/JUCEToolsExport.cmake")
add_executable(juceaide IMPORTED GLOBAL)
get_target_property(imported_location juce_tools::juceaide IMPORTED_LOCATION_DEBUG)
set_target_properties(juceaide PROPERTIES IMPORTED_LOCATION "${imported_location}")
add_executable(juce::juceaide ALIAS juceaide)
set(JUCE_TOOL_INSTALL_DIR "bin/JUCE-${JUCE_VERSION}" CACHE STRING
"The location, relative to the install prefix, where juceaide will be installed")
install(PROGRAMS "${imported_location}" DESTINATION "${JUCE_TOOL_INSTALL_DIR}")
get_filename_component(binary_name "${imported_location}" NAME)
set(JUCE_JUCEAIDE_NAME "${binary_name}" CACHE INTERNAL "The name of the juceaide program")
endif()